[PHP] Aidez-moi à comprendre mon erreur, SVP!
Résolu
roukmouth
-
roukmouth Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
roukmouth Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
Salut,
je fais un site où j'aimerai que des internautes puissent s'enregistrer dans ma base de données afin d'avoir droit à une partie de ce site.
Pour cela, j'ai créé une page contenant un formulaire avec "pseudo", "password" et "email" qui envoie la réponse sur une deuxième page (et c'est celle-ci qui pose problème).
Car c'est ici que l'enregistrement des internautes s'effectue par un programme PHP que j'ai amélioré (enfin si je peux dire puisque cela ne marche pas...).
Le code de cette page est le suivant :
Le fichier "perso/abcd.inc" contient les éléments de la connexion à ma base de données qui contient qu'une seule table (contenant "login", "pass" et "email").
A vouloir faire trop bien, cela ne fonctionne plus mais je tiens beaucoup aux vérifications effectuées dans ce programme ( vérifications de non redondance au niveau du pseudo et de l'email) alors je compte sur vous pour m'aider à débugger tout cela. Merci...
je fais un site où j'aimerai que des internautes puissent s'enregistrer dans ma base de données afin d'avoir droit à une partie de ce site.
Pour cela, j'ai créé une page contenant un formulaire avec "pseudo", "password" et "email" qui envoie la réponse sur une deuxième page (et c'est celle-ci qui pose problème).
Car c'est ici que l'enregistrement des internautes s'effectue par un programme PHP que j'ai amélioré (enfin si je peux dire puisque cela ne marche pas...).
Le code de cette page est le suivant :
<?php include("perso/abcd.inc"); $connexion = mysql_connect($host, $user, $pass) or die ("Connexion au serveur impossible"); $db = mysql_select_db($base, $connexion) or die ("La base de données ne peut être sélectionnée"); $pseudo=trim($pseudo); $pseudo=strip_tags($pseudo); $password=trim($password); $password=strip_tags($password); $email=trim($email); $email=strip_tags($email); $query = "INSERT INTO user (login, pass, email) VALUES ('$pseudo','$password','$email')"; $verif = "SELECT email FROM user WHERE email = '$email'"; $verif2 = "SELECT login FROM user WHERE login = '$pseudo'"; $verif3 = "SELECT login FROM user WHERE email = '$email'"; $result_verif = mysql_query($verif); $result_verif2 = mysql_query($verif2); if ((!$result_verif) && (!$result_verif2)) { $result = mysql_query($query); if (!$result) { echo "Exécution de la requête<br>$query<br><b>impossible"; echo mysql_errno()." : ".mysql_error()."<br>";//pour mise au point } else echo "Bienvenue sur mon site '$pseudo'<br>"; } else { if (!$result_verif) { echo "Le pseudo $verif2 est déjà utilisé<br>"; } else { $result_verif3 = mysql_query($verif3); echo "Cette adresse électronique possède déjà un compte avec le pseudo '$result_verif3'<br>"; } } ?>
Le fichier "perso/abcd.inc" contient les éléments de la connexion à ma base de données qui contient qu'une seule table (contenant "login", "pass" et "email").
A vouloir faire trop bien, cela ne fonctionne plus mais je tiens beaucoup aux vérifications effectuées dans ce programme ( vérifications de non redondance au niveau du pseudo et de l'email) alors je compte sur vous pour m'aider à débugger tout cela. Merci...
A voir également:
- [PHP] Aidez-moi à comprendre mon erreur, SVP!
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Expert php pinterest - Télécharger - Langages
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
6 réponses
Salut,
Ca me parait bien vu dans le sens où mysql_query() retourne FALSE en cas d'erreur.
C'est ce qui est dis ici:
http://fr.php.net/manual/fr/function.mysql-query.php
Mais une requête qui ne comporte pas d'erreur mais qui ne retourne aucun resultat, est ce considéré comme une erreur?
Je viens de tester pour voir.
Alors une requête SELECT dans un mysql_query() ne retournera pas FALSE si elle ne retourne aucun resultat.
En revanche si la syntaxe de ta requête est fausse, alors mysql_query() retournera False. Exemple:
Ca rejoins ce que dis ric.
Pour tester si une requête SELECT ne te retourne rien, utilise mysql_num_rows() (et voit si c'est égal à 0).
Ensuite ton 'Resource id #5' c'est parce que tu prends la valeur retournée par mysql_query() sans la transfomer en une valeur exploitable en php, il ya plein de fonctions pour ça:
mysql_fetch_array,mysql_result etc....
Ca me parait bien vu dans le sens où mysql_query() retourne FALSE en cas d'erreur.
C'est ce qui est dis ici:
http://fr.php.net/manual/fr/function.mysql-query.php
Mais une requête qui ne comporte pas d'erreur mais qui ne retourne aucun resultat, est ce considéré comme une erreur?
Je viens de tester pour voir.
Alors une requête SELECT dans un mysql_query() ne retournera pas FALSE si elle ne retourne aucun resultat.
En revanche si la syntaxe de ta requête est fausse, alors mysql_query() retournera False. Exemple:
mysql_query("select * fom machin");retournera FALSE à cause de "fom".
Ca rejoins ce que dis ric.
Pour tester si une requête SELECT ne te retourne rien, utilise mysql_num_rows() (et voit si c'est égal à 0).
Ensuite ton 'Resource id #5' c'est parce que tu prends la valeur retournée par mysql_query() sans la transfomer en une valeur exploitable en php, il ya plein de fonctions pour ça:
mysql_fetch_array,mysql_result etc....
Désolé mais je n'ai pas trouvé comment rééditer mon message alors je continue sur un autre post puisque j'ai oublié de vous dire quel erreur résulte de l'enregistrement.
Quel que soit les renseignements que je rentre dans le formulaire, la réponse reste toujours la même :
"Cette adresse électronique possède déjà un compte avec le pseudo 'Resource id #5' "
Sachant bien sûr que je rentre des adresses email au hasard (qui ne figurent donc pas dans ma base de données) et des noms aléatoires.
Alors je ne comprends rien, aidez-moi SVP !!! Merci d'avance...
Quel que soit les renseignements que je rentre dans le formulaire, la réponse reste toujours la même :
"Cette adresse électronique possède déjà un compte avec le pseudo 'Resource id #5' "
Sachant bien sûr que je rentre des adresses email au hasard (qui ne figurent donc pas dans ma base de données) et des noms aléatoires.
Alors je ne comprends rien, aidez-moi SVP !!! Merci d'avance...
Bonsoir
Je dirais que $result_verif et $result_verif2 sont toujours vrais tant que les requêtes ont pu être faites donc le dernier else est exécuté.
$result_verif = mysql_query($verif); $result_verif2 = mysql_query($verif2); if ((!$result_verif) && (!$result_verif2))
Je dirais que $result_verif et $result_verif2 sont toujours vrais tant que les requêtes ont pu être faites donc le dernier else est exécuté.
Ce que je désirais obtenir avec ces tests c'est : S'il ne trouve pas de réponse à ces requêtes, alors faire si ou ça... Je débute en PHP/MySQL, alors si vous avez une solution, je suis preneur. Merci pour vos réponses, en espérant que vous continuerez à m'aider. Et pour 'Resource id #5', il est vrai que j'ai oublié de le transformer, merci, je suis sûr que je n'y aurais pas pensé tout seul. ^_^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il a une fonction mysql_nums_rows ( http://www.zend.com/manual/function.mysql-num-rows.php ).
Ensuite tu a juste qu'à faire
Ensuite tu a juste qu'à faire
if(mysql_numrows($result_verif) == 0)
Merci à tous, c'est bon j'ai réussi (enfin nous avons réussi). Alorzs merci à tous... ^^
Pour ceux qui voudraient en faire autant :
Pour ceux qui voudraient en faire autant :
<?php include("perso/abcd.inc"); $connexion = mysql_connect($host, $user, $pass) or die ("Connexion au serveur impossible"); $db = mysql_select_db($base, $connexion) or die ("La base de données ne peut être sélectionnée"); $pseudo=trim($pseudo); $pseudo=strip_tags($pseudo); $password=trim($password); $password=strip_tags($password); $email=trim($email); $email=strip_tags($email); $query = "INSERT INTO user (login, pass, email) VALUES ('$pseudo','$password','$email')"; $verif = "SELECT email FROM user WHERE email = '$email'"; $verif2 = "SELECT login FROM user WHERE login = '$pseudo'"; $verif3 = "SELECT login FROM user WHERE email = '$email'"; $result_verif = mysql_query($verif); $result_verif2 = mysql_query($verif2); if ((mysql_num_rows($result_verif)==0) && (mysql_num_rows($result_verif2)==0)) { $result = mysql_query($query); if (!$result) { echo "Exécution de la requête<br>$query<br><b>impossible"; echo mysql_errno()." : ".mysql_error()."<br>";//pour mise au point } else echo "Bienvenue sur mon site $pseudo<br>"; } else { if (mysql_num_rows($result_verif)==0) { echo "Le pseudo $pseudo est déjà utilisé<br>"; } else { $result_verif3 = mysql_query($verif3); $ligne = mysql_fetch_array($result_verif3); extract($ligne); echo "Cette adresse électronique possède déjà un compte avec le pseudo $login"; } } ?>