PHP - Vérifier si un membre existe ds la bdd

[Résolu/Fermé]
Signaler
Messages postés
32
Date d'inscription
lundi 6 septembre 2010
Statut
Membre
Dernière intervention
25 juillet 2011
-
Messages postés
32
Date d'inscription
lundi 6 septembre 2010
Statut
Membre
Dernière intervention
25 juillet 2011
-
Bonjour,

Voilà j'ai une page ou on peut consulter le profil d'un membre et pour des raisons de sécurité je voudrais imposer un message d'erreur si le membre n'existe pas. Voici mon code:

// On protège l'id du membre
$_GET['id'] = mysql_real_escape_string($_GET['id']);
							
//On récupère les infos du membre
$requete = mysql_query('SELECT EXISTS (SELECT * FROM membres WHERE membre_id='.$_GET['id'].') AS membre_exists');
$donnees = mysql_fetch_array($requete);
if ($donnees['membre_exists']) {
	echo $donnees['membre_pseudo'];
}	
else {
	echo 'Ce pseudo n\'existe pas';
}


Avec ce code si un utilisateur rentre un id au hasard dans la barre d'adresse de son navigateur et que l'id en question n'existe pas dans la base de données il se voit afficher un message d'erreur. Par contre si l'id existe il m'affiche une erreur Undefined index: membre_pseudo. C'est la 1ère fois que j'utilise le SELECT EXISTS peut être que j'ai fais une erreur! Et si il y a un autre moyen de vérifier ça m'intéresse aussi ;)

Merci d'avance!

4 réponses

Messages postés
6118
Date d'inscription
jeudi 9 juillet 2009
Statut
Contributeur
Dernière intervention
20 mars 2017
1 635
Bonjour,

Personnellement, je n'utilisais pas SELECT EXIST mais un simple select, exemple d'une table avec comme clé primaire "id".


<php 

$pseudo = "Frank"; 
$req = "select id from membre where pseudo='$pseudo'"; 
$res = mysql_query($req); 
$donnee = mysql_fetch_array($res); //Dans l'optique où il ne peut pas avoir de doublon dans le champ pseudo. 

if($donnee['id']=='') 
{ 
     echo "le pseudo est introuvable"; 
} 
else 
{ 
... 
} 
?> 



"Trotti Trotta, Monsieur P, il y a des anges qui veulent un bisou..."
"Même les joujou de Monsieur P ont besoin de joujou"
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
32
Date d'inscription
lundi 6 septembre 2010
Statut
Membre
Dernière intervention
25 juillet 2011
1
Merci pour ce complément d'informations
Messages postés
32
Date d'inscription
lundi 6 septembre 2010
Statut
Membre
Dernière intervention
25 juillet 2011
1
Ouais t'as raison je me complique la vie là je crois. Du coup j'ai fais ça:

// On protège l'id du membre
$_GET['id'] = mysql_real_escape_string($_GET['id']);
		
//On récupère les infos du membre
$requete = mysql_query('SELECT * FROM membres WHERE membre_id='.$_GET['id'].'');
$donnees = mysql_fetch_array($requete);
if ($donnees['membre_id'] != "")

C'est assez sécurisé comme ça ? Petite question d'ailleurs
Quand j'affiche les infos du membre est-ce que

echo $donnees["membre_pseudo"];

suffit ou il faut rajouter mysql_real_escape_string ou htmlspecialchars ou striplashes, je suis un peu perdu dans tout ça !

Quand c'est des variables $_POST je fais mysql_real_escape_string à chaque fois mais la on interroge la bdd, l'utilisateur ne transmet pas de variables donc que convient-il de faire?
Messages postés
6118
Date d'inscription
jeudi 9 juillet 2009
Statut
Contributeur
Dernière intervention
20 mars 2017
1 635
Personnellement, j'évite d'utilisé GET mais plutôt POST dans le cas où tu te sers de formulaire, c'est plus sécurisé.

Ensuite, évite de mettre des GET ou POST directement dans une requête SQL, cela peut marcher comme cela peut bugger.
Le champ id contient-t-il seulement un nombre ou du texte

<code>
$id = $_GET['id'];
$requete = mysql_query("Select * from membres where membre_id=$id"); //Dans le cas où id n'est qu'un nombre sinon mettre des quote (') autour de $id.

htmlspecialchars permet d'éviter les erreurs dû à l'insertion de balise html lorsque l'utilisateur entre quelque chose. Cela permet d'éviter notamment que des hacker (pirates) lance des instruction via des formulaires.

stripslashes permet de supprimer les anti-slash d'une chaîne de caractères.