8791 sujets

Développement web côté serveur, CMS

Bonjour à toutes et à tous,

Je cherche à créer une session. Le problème c'est quand la personne est dans la base de donnée elle a accès à toutes les données et non pas à toutes ses données à elle. Je pense que le problème se situe au niveau du sql mais je ne suis pas sûr. J'espère que vous pourrez m'aider, voici le code :

$sql = "select password from login where login='".$login."'";


Je vous donne tout le code qu'en-même au cas où :

<?php

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST);

$sql = "select password from login where login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_assoc($req);

if($data['password'] != $pass) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';

exit;
}
else {
$_SESSION['login'] = $login;

echo '<h1>Votre liste de contact</h1>';


$sql = "SELECT contact.nom, contact.prenom, contact.adresse, contact.tel_fixe, contact.tel_portable, contact.categorie, contact.id_login, login.login, login.password FROM contact, login WHERE id_contact=id_contact ";


$requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );


echo( "<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" align=\"center\">\n" );
echo( "<tr>
<td><div align=\"center\">nom</div></td>
<td><div align=\"center\">prenom</div></td>
<td><div align=\"center\">adresse</div></td>
<td><div align=\"center\">telephone fixe</div></td>
<td><div align=\"center\">telephone portable</div></td>
<td><div align=\"center\">categorie</div></td>
</tr>" );

while( $result = mysql_fetch_array( $requete ) )
{
echo( "<tr>\n" );
echo( "<td><div align=\"center\">".$result["nom"]."</div></td>\n" );
echo( "<td><div align=\"center\">".$result["prenom"]."</div></td>\n" );
echo( "<td><div align=\"center\">".$result["adresse"]."</div></td>\n" );
echo( "<td><div align=\"center\">".$result["tel_fixe"]."</div></td>\n" );
echo( "<td><div align=\"center\">".$result["tel_portable"]."</div></td>\n" );
echo( "<td><div align=\"center\">".$result["categorie"]."</div></td>\n" );
echo( "</tr>\n" );
}

echo( "</table><br>\n" );
}
}
else {
echo '<p>Vous avez oublié de remplir un champ. Pour retourner à l\'identification, cliquez <a href="index.php">ici</a></p>';

exit;

?>
1. Tu n'as pas balisé ton code correctement comme l'exige la règle 13 :
http://forum.alsacreations.com/help.php#regle13
Ce qui te vaux un point de malus, à 10 points tu as droit à une fessée.

2. Prend l'habitude de faire un session_start() au tout début de ta page pour initialiser ta session. Ça t’évitera plein de mauvaises surprises.
http://php.net/manual/fr/function.session-start.php

3. Les utilisateurs ont accès à tous les contacts car dans ta requête tu n'as aucune clause WHERE qui demande explicitement les contacts de l'utilisateur qui est connecté :


$sql = "SELECT contact.nom, contact.prenom, contact.adresse, contact.tel_fixe, contact.tel_portable, contact.categorie, contact.id_login, login.login, login.password FROM contact, login WHERE id_contact=id_contact ";


id_contact=id_contact est toujours vrai.
Modifié par jb_gfx (11 Jul 2011 - 16:06)
Merci de ta réponse rapide.
Pour ce qui est de la 'session_start()', je l'ai mis en tt début de code, avant le doctype de la page.
Par contre je ne comprends pas le "id_contact=id_contact est toujours vrai. ".
Je suis désolé pour le balisement, j'ai bien mérité mon point de malus !.
Faut-il que je te renvoie le code en le balisant bien ?

P.S : je suis au boulot et je vais pas tarder à partir alors si je ne te reponds pas tout de suite c'est que je ne serai plus là et dans ce cas je te répondrai ce soir ou demain !
Je sais pas comment est construite ta table contact mais j'imagine qu'à la place de contact_id=contact_id, tu devrais avoir un truc du genre contact_id=$une_variable_qui_contient_l'id_de_l'utilisateur.

PS: Pour le code tu peux éditer ton premier message, il y a un bouton à droite de la date du message pour ça.
Modifié par jb_gfx (11 Jul 2011 - 16:20)
déjà il faut relier tes tables contact et login avec une jointure , ensuite il faut bien indiquer quel sous-ensemble du résultat tu veux ... ici tu demandes tous les contacts dont l'identifiant est égal a ... lui-même .

je suppose que ta table contact a ses champs là :
a écrit :
contact.id_contact,
contact.id_login,
contact.nom,
contact.prenom,
contact.adresse,
contact.tel_fixe,
contact.tel_portable,
contact.categorie


et ta table login :
a écrit :
login.id_login
login.login,
login.password


donc il faut lier les deux tables par id_login et faire une restriction sur login.login
$sql = "SELECT contact.nom, contact.prenom, contact.adresse,
 contact.tel_fixe, contact.tel_portable, contact.categorie 
FROM contact, login  WHERE (login.id_login = contact.id_login) and (login.login = '$login')";

plus d'informations sur les jointures : http://dev.mysql.com/doc/refman/5.0/fr/join.html
Salut,

Tout d'abord un petit merci d'avoir répondu à mon SOS et puis un grand MERCI car j'ai compris où était mon erreur. Je m’emmêlais les pinceaux après le WHERE et là ça fonctionne alors encore une fois merci !