Php mysql pdo espace membre pseudo déjà pris
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je suis en train de créer un petit espace membre pour mon site et j'en suis à la page inscription.php ( je suis en local avec WAMP ).
Je voudrais vérifier si le pseudo rentré par l'utilisateur n'est pas déjà pris mais une erreur s'affiche une fois que j'ai rentré un pseudo et un mot de passe :
Notice: Undefined variable: bdd in C:\wamp\www\tests\Site internet\Bazar\Essai 1\register.php on line 33
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\tests\Site internet\Bazar\Essai 1\register.php on line 33
Voici le code d'inscription.php simplifié :
Quelqu'un a-t-il une idée de l'erreur que j'ai faite ? Merci
Je suis en train de créer un petit espace membre pour mon site et j'en suis à la page inscription.php ( je suis en local avec WAMP ).
Je voudrais vérifier si le pseudo rentré par l'utilisateur n'est pas déjà pris mais une erreur s'affiche une fois que j'ai rentré un pseudo et un mot de passe :
Notice: Undefined variable: bdd in C:\wamp\www\tests\Site internet\Bazar\Essai 1\register.php on line 33
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\tests\Site internet\Bazar\Essai 1\register.php on line 33
Voici le code d'inscription.php simplifié :
<?php include ("cnx.php");
//démarrage de la session
session_start(); ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<h2> Formulaire d'inscription : </h2>
<form action="" method = "POST">
<label for="pseudo"> pseudo (4 à 20 caractères !) : </label> </br>
<input type="texte" name = "pseudo" /> </br>
<label for="password"> Password : </label> </br>
<input type="password" name = "password" /> </br>
<input type="submit" value ="Inscription" />
</form>
<?php
// On vérifie que le formulaire à été complété et si les champs ne sont pas vides
if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['password'])) )
{
//On met le résultat pseudo du formulaire dans $pseudo
$pseudo = addslashes($_POST["pseudo"]) ;
//On sélectionne dans la table 'utilisateurs' les pseudo qui sont les mêmes que le pseudo tapé dans le formulaire
$query = $bdd->query("SELECT pseudo FROM utilisateurs WHERE pseudo = '$pseudo'");
//On compte le nombre de réponse
$count = $query->rowCount();
//Dans le cas où il y a une réponse, qu'un pseudo dans la table correspont au pseudo tapé
if($count == 1)
{
// Pseudo déjà utilisé
echo 'Ce pseudo est déjà utilisé';
}
else
{
// Pseudo libre, on l'insère dans la table
mysql_query("INSERT INTO utilisateurs (pseudo) VALUE ('$pseudo')");
}
}
?>
</body>
</html>
Quelqu'un a-t-il une idée de l'erreur que j'ai faite ? Merci
A voir également:
- Php mysql pdo espace membre pseudo déjà pris
- Espace insécable - Guide
- Espace de stockage gmail plein - Guide
- Membre indisponible vinted - Guide
- Pseudo whatsapp - Accueil - Messagerie instantanée
- Espace stockage google - Guide
6 réponses
Bonjour
tu as oublié d'inclure ta connexion à la bdd ..
Edit : l'include y est ... mais que contient il ?
.
Cordialement,
Jordane
tu as oublié d'inclure ta connexion à la bdd ..
Edit : l'include y est ... mais que contient il ?
.
Cordialement,
Jordane
Déjà, tu feras attention.. tu as encore un bout avec l'ancienne extension MYSQL
Il faudra la passer en PDO également....
Ensuite... ta connexion à la BDD est mise dans $CNX .... hors toi.. tu as cherché à utiliser
$BDD .... ???!
Donc soit tu renommes ta variables dans le QUERY .. soit dans ta CONNEXION.
PS : Au passage... prends l'habitude de sortir la requête de son exécution... cela permet d'en faire un ECHO si besoin.
else { // Pseudo libre, on l'insère dans la table mysql_query("INSERT INTO utilisateurs (pseudo) VALUE ('$pseudo')"); }
Il faudra la passer en PDO également....
Ensuite... ta connexion à la BDD est mise dans $CNX .... hors toi.. tu as cherché à utiliser
$BDD .... ???!
$query = $bdd->query("SELECT pseudo FROM utilisateurs WHERE pseudo = '$pseudo'");
Donc soit tu renommes ta variables dans le QUERY .. soit dans ta CONNEXION.
PS : Au passage... prends l'habitude de sortir la requête de son exécution... cela permet d'en faire un ECHO si besoin.
$sql = "SELECT pseudo FROM utilisateurs WHERE pseudo = '$pseudo'" // echo $sql; // si besoin pour boir ce qu'elle contient... $query = $cnx->query($sql);
Merci pour vos conseils !
J'ai mis $cnx au lieu de $bdd
Quel est l'équivalent de
J'ai mis $cnx au lieu de $bdd
Quel est l'équivalent de
else {avec PDO ? Merci
// Pseudo libre, on l'insère dans la table
mysql_query("INSERT INTO utilisateurs (pseudo) VALUE ('$pseudo')");
}
$sql ="INSERT INTO utilisateurs (pseudo) VALUE ('$pseudo')"; // echo $sql; // si besoin pour boir ce qu'elle contient... $query = $cnx->exec($sql);
Mais l'ideal serait de passer par les requête préparées pour limiter les risques d'injection SQL..
Par exemple :
$sql ="INSERT INTO utilisateurs (pseudo) VALUE (:pseudo)"; $params = array(":pseudo"=>$pseudo); $query = $cnx->prepare($sql); $result = $query->execute($params);
Sachant que les requête préparées fonctionnent pour TOUS les types de requêtes ( INSERT / UPDATE / DELETE ..)
Perso je les utilises partout. ( et jamais ->query ).
Pour comprendre le PREPARE .. je t'invite à lire ceci :
https://www.php.net/manual/fr/pdo.prepare.php
Perso je les utilises partout. ( et jamais ->query ).
Pour comprendre le PREPARE .. je t'invite à lire ceci :
https://www.php.net/manual/fr/pdo.prepare.php
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici mon nouveau code, merci beaucoup de m'aider :-)
EDIT : AJout du langage dans les balises de code
<?php include ("cnx.php"); //démarrage de la session session_start(); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <h2> Formulaire d'inscription : </h2> <form action="" method = "POST"> <label for="pseudo"> pseudo : </label> </br> <input type="texte" name = "pseudo" /> </br> <label for="password"> Password : </label> </br> <input type="password" name = "password" /> </br> <input type="submit" value ="Inscription" /> </form> <?php // On vérifie que le formulaire à été complété et si les champs ne sont pas vides if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['password'])) ) { //On met le résultat pseudo du formulaire dans $pseudo $pseudo = addslashes($_POST["pseudo"]) ; //On sélectionne dans la table 'utilisateurs' les pseudo qui sont les mêmes que le pseudo tapé dans le formulaire $query = $cnx->query("SELECT pseudo FROM utilisateurs WHERE pseudo = '$pseudo'"); //On compte le nombre de réponse $count = $query->rowCount(); //Dans le cas où il y a une réponse, qu'un pseudo dans la table correspont au pseudo tapé if($count == 1) { // Pseudo déjà utilisé echo 'Ce pseudo est déjà utilisé'; } else { $sql ="INSERT INTO utilisateurs (pseudo) VALUE (:pseudo)"; $params = array(":pseudo"=>$pseudo); $query = $cnx->prepare($sql); $result = $query->execute($params); echo 'Vous êtes enregistré !'; } } ?> </body> </html>
EDIT : AJout du langage dans les balises de code
Ton souci est surement du à ta ligne
Pour info (voici ce que dit la documentation) :
Pour ma part je ferais un truc du genre :
$count = $query->rowCount();
Pour info (voici ce que dit la documentation) :
Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête.
Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données et ne devrait pas être exécuté pour des applications portables.
Pour ma part je ferais un truc du genre :
//On sélectionne dans la table 'utilisateurs' les pseudo qui sont les mêmes que le pseudo tapé dans le formulaire //préparation de la requête $params = array(":pseudo"=>$pseudo); $sql = "SELECT pseudo FROM utilisateurs WHERE pseudo = :pseudo" ; // execution de la requete $query = $cnx->prepare($sql); $query->execute($params); //Récupère tous les résultats dans un ARRAY $result = $query->fetchAll(); $nbResult = count($result); if($nbResult==1){ //....
Si tu utilises PDO alors tu ne peux pas utiliser mysql_query()
D'autre part ce n'est pas :
mais :
Cordialement.