hey mensen, ik heb voor een profielen website een "voeg toe als vriend" scriptje,, dus wanneer een member de profiel bezoekt van een andere member kan hij die toevoegen als vriend.....

ik heb het volgende script daarvoor inelkaar gezet:

<?

/*

CREATE TABLE `voegvriendtoe` (
`vriendid` int(4) NOT NULL auto_increment,
`username` varchar(30) NOT NULL default '',
`vriendnaam` varchar(30) NOT NULL default '',
PRIMARY KEY (`vriendid`),
UNIQUE KEY `vriendid` (`vriendid`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

*/


if ($_SESSION['loggedin'] == 'ja'){

// scriptt



if (isset ($_GET['addvriend'])) {
$addsql = "INSERT INTO voegvriendtoe(vriendid, username, vriendnaam) VALUES ('','".$username."', '".$row[username]."')";

mysql_query ($addsql) or trigger_error (mysql_error());

echo "$row[username] is toegevoegd aan je vriendenlijst";

}


echo "<a href=?page=profielen&func=overzicht&show=3&addvriend=$row[username]>voeg deze persoon toe als vriend</a>";


}

elseif ($_SESSION['loggedin'] != 'ja'){

// fout je kan niet toeveogen

}


?>

het werkt wel..... alleen probleem is dat ik 10 keer kan klikken op de link voeg toe als vriend en dat hij hem dan ook 10 keer in de DB zet.... hoe los ik dat op ?
Ik heb zelf ook ooit zoiets gemaakt. Het ging er bij mij toen om dat je alleen interne berichtjes naar elkaar kon sturen als je vrienden was. Hij controleerde ook op aanvragen, als je nog geen vrienden was gaf die aan of je vrienden wou worden. Als je had aangevraagd maar de ander had nog niet geaccepteerd, gaf die dat aan en als de ander had geaccepteerd kreeg je een tekstarea voor het zenden van berichten.
De kunst is nu het hieruit halen van delen die je kan gebruiken. En het op de juiste manier aanpassen.

<html>
<head>
<title>Mijn berichten</title>
<h2>Laat een bericht achter</h2></head>
<body>

<table>
<?php
// Verbinden.php wordt geincluded om verbinding te maken met de database.
include("verbinden.php");

$id = $_GET['id'];
$id_sql = "SELECT * FROM gebruiker WHERE id=" . $id;
$id_result = mysql_query($id_sql);
$id_ontvanger = mysql_fetch_array($id_result);

$my_id_sql = "SELECT * FROM gebruiker WHERE username='" . $username ."'";;
$my_id_result = mysql_query($my_id_sql);
$my_id = mysql_fetch_array($my_id_result);
$mijnid=$my_id['id'];

if (isset($_GET['aanvraag']) && $_GET['aanvraag'] == "ja"){
$aanvraag_SQL_insert="INSERT INTO aanvragen (userid,aanvrager) VALUES ('$id','$mijnid')";
$bool=mysql_query($aanvraag_SQL_insert);
if($bool==1) echo ("<center>Uw aanvraag wordt verwerkt</center><br>");
if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het schrijven naar de database. Probeer het later nog eens. <br>Wanneer het probleem zich voor blijft doen, neem dan contact op met de beheerder.</font>");
}
$vriend_sql = "SELECT * FROM vrienden WHERE userid=" . $id . " AND vriend=" . $mijnid . " OR userid=" . $mijnid . " AND vriend=" . $id;
$vriend_result = mysql_query($vriend_sql);
if (@mysql_num_rows($vriend_result) >0){

if (isset($_POST['bericht']) && strlen($_POST['bericht']) >= 8){
$bericht=htmlspecialchars($_POST['bericht']);
$bericht=nl2br($bericht);
$berichten_SQL_insert="INSERT INTO berichten (userid,bericht,afzender) VALUES ('$id','$bericht','$mijnid')";
$bool=mysql_query($berichten_SQL_insert);
if($bool==1) echo ("<center>Het bericht is naar de gebruiker verzonden</center>");
if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het schrijven naar de database. Probeer het later nog eens. <br>Wanneer het probleem zich voor blijft doen, neem dan contact op met de beheerder.</font>");
}

else {
?>
<tr>
<td><?php echo ("<b>$my_id[username]</b>");?></td>
</tr>
<tr>
<td><?php if (isset($_POST['bericht']) && strlen($_POST['bericht']) < 8) echo ("<font color=red>Een bericht moet meer dan 8 tekens bevatten</font><br>") ?>
<form name="bericht" action="index2.php?locatie=profiel&id=<?php echo $id ?>" method="post">
<textarea name="bericht" cols="40" rows="5"></textarea>
</td>
</tr>
<tr>
<td>
<input type="submit" name="submit" value="Verstuur">
</form>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>
<?php
}
}
else{
echo ("<center><font color=gray>U kunt pas een bericht voor deze persoon achterlaten, wanneer hij/ zij u heeft geacepteerd als vriend.<br>");
}
$aanvraag_sql = "SELECT * FROM aanvragen WHERE userid=" . $id . " AND aanvrager=" . $mijnid . " OR userid=" . $mijnid . " AND aanvrager=" . $id;
$aanvraag_result = mysql_query($aanvraag_sql);
if (@mysql_num_rows($aanvraag_result) <> 0){
echo "Deze persoon heeft uw aanvraag nog niet geaccepteerd of geweigerd. Als uw aanvraag wordt geweigerd, kan u opnieuw aanvraag doen.";
}
else if(@mysql_num_rows($vriend_result) == 0){
?>
<a href="index2.php?locatie=profiel&id=<?php echo $id ?>&aanvraag=ja"><br>Aanvraag plaatsen</a></font></center>

<?php

}
?>
Ik ga zelf toch mee met Arjan: gooi het veld vriendid weg en zet een samengestelde primary key op username en vriendnaam. Scheelt je een heleboel PHP-code en maakt de database een flink stuk sneller.
ik heb arjans wijze raad maar eens opgevolgt... (gedeelde primary key) en nu werkt het wel maar toch is er iets wat weer vervelend is

<?


if ($_SESSION['loggedin'] == 'ja'){

// scriptt


if (isset ($_GET['addvriend'])) {
$addsql = "INSERT INTO voegvriendtoe(username, vriendnaam) VALUES ('".$userid."', '".$row[username]."')";

mysql_query ($addsql) or trigger_error (mysql_error());

echo "$row[username] is toegevoegd aan je vriendenlijst";

}


echo "<a href=?page=profielen&func=overzicht&show=3&addvriend=$row[username]>voeg deze persoon toe als vriend</a>";


}

elseif ($_SESSION['loggedin'] != 'ja'){

// fout je kan niet toeveogen

}


?>

als ik iemand toevoeg die al een vriend is dan geeft hij de volgende error aan

Notice: Duplicate entry '21-heks' for key 1 in c:\appserv\www\hs\modules\profielen\voeg_vriend_toe.php on line 25

dat komt dat hij er al in staat,, hoe kan ik het zo maken dat hij gewoon aangeeft,,, $row[username] is al jou vriend ofzoiets ?
<?
$sql = mysql_query("SELECT * FROM voegvriendtoe WHERE username = '".$_SESSION['username']."' AND vriendnaam = '".$_POST['vriendnaam']."'");
$res = mysql_num_rows($sql);

if($res >= 1){
echo 'Bestaat al als vriend';
}
if(isset($error)){
echo $error;
}
?>
Voor je gaat inserten eerst iets als:

<?
$res = mysql_query("SELECT username, vriendnaam FROM voegvriendtoe WHERE username=$userid AND vriendnaam=$row[username])";
if (mysql_num_rows($res) > 1)
{
# vriend is al toegevoegd
}
else
{
# voeg vriend toe
}
?>
R schreef op 30.01.2006 14:58
$addsql = "INSERT INTO voegvriendtoe(username, vriendnaam) VALUES ('".$userid."', '".$row[username]."')";
Hier doe je iets was niet netjes is. Je gebruikt namelijk $row[username] buiten een string context, waardoor 'username' niet wordt gezien als een string, maar als een ongedefinieerde constante. Dat kun je op twee manieren oplossen:

1) Haal $row[username] weer binnen de quotes

2) Maak er $row['username'] van
thanks mensen hij werkt!!!!


(oh ja heb er ondertussen ook $row['username'] TY!!)

Reageren