[PHP] Aidez-moi à comprendre mon erreur, SVP!

Résolu/Fermé
roukmouth - 4 avril 2005 à 18:46
roukmouth Messages postés 26 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 10 mars 2010 - 5 avril 2005 à 18:11
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 :
<?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:

6 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
4 avril 2005 à 23:12
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:
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....
2
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...
0
Bonsoir
$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é.
0
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. ^_^
0

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
if(mysql_numrows($result_verif) == 0)
0
roukmouth Messages postés 26 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 10 mars 2010 2
5 avril 2005 à 18:11
Merci à tous, c'est bon j'ai réussi (enfin nous avons réussi). Alorzs merci à tous... ^^
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";
			}
		}
?>
0