[RESOLU] Vérification nbr de donnees renvoie toujours 0

Eléphant du PHP | 250 Messages

18 juil. 2013, 10:18

Bonjour,

Je cherche à vérifier si, lors d'une inscription, le couple nom/email n'existe pas déjà dans la base. C'est une opération que j'ai déjà faites sur d'autres projets sans jamais rencontrer de soucis.
Or aujourd'hui, chaque validation du formulaire d'inscription renvoie systématiquement 0 (aucun enregistrement ne répondant à la demande) même avec 1 ou plusieurs enregistrements y répondant dans la base... :shock:
Voici les codes concernés:
-1- Le code de vérification
	
if(isset($_POST['submit'])){print_r($_POST);
//initialisation du tableau des erreurs
$erreur = array();
//recuperation des elements du tableau post
	$nom = trim(htmlspecialchars(addslashes($_POST['nom'])));
	$adresse = trim(htmlspecialchars(addslashes($_POST['adresse'])));
	$telephone = trim(htmlspecialchars(addslashes($_POST['telephone'])));
	$email = trim(htmlspecialchars(addslashes($_POST['email'])));
	$password1 = trim($_POST['password']); 
	$password2 = trim($_POST['password2']);
	$accord_termes = $_POST['acceptTerms'];
	//vérification que les champs obligatoires sont remplis
.............
	//on vérifie d'abord que le client n'existe pas
$sql = sprintf("SELECT COUNT(id_client) AS nbr FROM test_client_atlas WHERE nom_client = '%s' AND email_client = '%s' ", 
									mysql_real_escape_string($nom),
									mysql_real_escape_string($email)); echo $sql;
									$query = mysql_query($sql); 
	if (!$query) {
   die('Impossible d\'exécuter la requête :' . mysql_error());}
   $resultat = mysql_fetch_assoc($query); print_r($resultat);
   
			
	 if ($resultat['nb'] > 0){
		array_push($erreur, "Le couple $nom - $email, <br />est déjà inscrit dans notre base.");
	}//fin du if déjà enregistré dans la base 
		if($resultat['nb'] == 0){
-2- Le formulaire:
		  <form action="inscription.php" id="inscript" method="post">
		  <h2 id="tete_form">Créez votre compte </h2>
 	<fieldset>
         
		<p>Tous les champs doivent être renseignés.</p>
		<p>Après votre inscription, vous recevrez un email de confirmation.</p>  
		  

		<p><label for="nom" id="nom">Votre Nom </label>
		<input type="text" id="nom" name="nom" placeholder="Votre Nom" value="<?php echo $_POST['nom']; ?>" />
		</p>
		
		<p><label for="adresse" id="adresse">Adresse complète</label>
		<input type="text" id="adresse" name="adresse" placeholder="Adresse complète" value="<?php echo $_POST['adresse']; ?>" />
		</p>
		
		<p><label for="telephone" id="telephone">Téléphone</label>
		<input type="tel" id="telephone" name="telephone" placeholder="Téléphone" value="<?php echo $_POST['telephone']; ?>" />
		</p>
		
		<p><label for="email" id="email">Email</label>
		<input type="email" id="email" name="email" placeholder="Email" value="<?php echo $_POST['email']; ?>" />
		</p>
		
		<p><label for="pswd">Votre mot de passe (pour des raisons de sécurité, il doit contenir obligatoirement de 6 à 10 caractères alphanumérique)</label>
		<input type="password" id="pswd" name="password" placeholder="Votre mot de passe" value="<?php echo$_POST['password']; ?>" />
		</p>
		
		<p><label for="pswd2">Confirmez votre mot de passe</label>
		<input type="password" id="pswd2" name="password2" placeholder="Confirmez votre mot de passe" value="<?php echo$_POST['password2']; ?>" />	
		</p>
		
         <p><input id="acceptTerms" name="acceptTerms" type="checkbox" />
            <label for="acceptTerms">
                J'accepte les <a href="">Termes et Conditions</a> et <a href=""> la politique de confidentialité</a>de Atlas Saveurs.(<a href="#" title="déclaration cnil à télécharger">déclaration CNIL</a>)
            </label>
         </p>
		 
		 <p>
			<input type="submit" name="submit" value="Créer le compte" />
         </p>
 	</fieldset>
</form>
J'ai beau lire et relire mon code, je ne vois pas pourquoi j'ai toujours 0...si l'un d'entre vous à une piste, une solution, je suis preneur!
D'avance merci.
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Mammouth du PHP | 2278 Messages

18 juil. 2013, 10:47

En dehors du fait qu'il faudrait passer de mysql à mysqli,
$resultat = mysql_fetch_assoc($query);
print_r($resultat); //le print_r doit donner la réponse à ta question
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 250 Messages

18 juil. 2013, 12:03

Voici ce que me renvoie systématiquement le print_r:
Array
(
    [nbr] => 0
)
Et c'est bien ce qui m'inquiète: comment (et pourquoi!) peut il me retourner 0 qaund j'ai au moins 1 ligne correspondante?

Edit: l y avait une erreur dans la copie de mon code, dans mon original j'appelle bien:
	 if ($resultat['nbr'] > 0){
		array_push($erreur, "Le couple $nom - $email, <br />est déjà inscrit dans notre base.");
	}//fin du if déjà enregistré dans la base 
		if($resultat['nbr'] == 0){
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2013, 21:50

salut,

le echo $sql donne quoi ?

a priori je dirais que ta requête retourne toujours faut il faut la tester en dehors.

pourquoi utiliser sprintf ? une concaténation serait, a mon gout, plus lisible.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 250 Messages

19 juil. 2013, 09:40

Bonjour moogli,
l'echo sur $sql renvoie bien ma commande; pour le sprintf, en fait il s'agit de mon dernier test: j'utilise comme toi la concaténation (+1 pour la lisibilité), mais suite au problème rencontré, j'ai testé cette écriture; j'ai aussi testé avec mysql_num_rows et * en lieu et place de COUNT(id_client) = même absence de résultat....
Je vais tester la requête seule, et je reviens; si d'ici là d'autres idées....toujours preneur!
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2013, 14:15

si tu peux nous montrer la requête générée ça peux aller plus vite :)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 250 Messages

19 juil. 2013, 15:26

1-) Pour :
$sql = sprintf("SELECT COUNT(id_client) AS nbr FROM test_client_atlas WHERE nom_client = '%s' AND email_client = '%s' ",
                                                                        mysql_real_escape_string($nom),
                                                                        mysql_real_escape_string($email));
===> Résultat du echo: SELECT id_client FROM test_client_atlas WHERE nom_client = 'Rudyard Kipling' AND email_client = '[email protected]'

2-) Pour:
"SELECT id_client FROM test_client_atlas 
			WHERE nom_client = ".mysql_real_escape_string($nom)." 
			AND email_client = ".mysql_real_escape_string($email)." "
									;
===> Résultat du echo: SELECT id_client FROM test_client_atlas WHERE nom_client = Rudyard Kipling AND email_client = [email protected] Impossible d'exécuter la requête :You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Kipling AND email_client = [email protected]' at line 2
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2013, 16:23

1 / ok
2/ normale pas de ' autour des chaines de caractère.

donc la c'est qu'il n'y a pas de donnés associé.
montre le create table + u nneux de donnée :)

(et oui on remonte petit a petit ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 250 Messages

19 juil. 2013, 16:57

1-) La table:
CREATE TABLE IF NOT EXISTS `test_client_atlas` (
  `id_client` int(250) unsigned NOT NULL AUTO_INCREMENT,
  `nom_client` tinytext COLLATE utf8_unicode_ci NOT NULL,
  `adresse_client` text COLLATE utf8_unicode_ci NOT NULL,
  `tel_client` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `email_client` tinytext COLLATE utf8_unicode_ci NOT NULL,
  `mot_passe` text COLLATE utf8_unicode_ci NOT NULL,
  `date_crea` date NOT NULL,
  `date_modif` date NOT NULL,
  UNIQUE KEY `id_client` (`id_client`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
2-) une ligne de la table:
-- Contenu de la table `test_client_atlas`
--
(57, ' Rudyard Kipling ', ' 1 Boulevard des lianes 00000 Là-bas', ' xx-xx-xx-xx-xx ', ' [email protected] ', ' $5$rounds=50$Pt4M6o8As0vt8o8FX.c93dcg.VxqjALXMnFmNBfC3C6 ', '2013-07-19', '0000-00-00'),
Merci du coup de main (comme d'hab.... :mrgreen: )
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Eléphant du PHP | 250 Messages

19 juil. 2013, 17:08

Je viens de voir que dans ma table, et malgrès un "trim" lors de l'insertion des données, un espace :evil: se crée devant les données, sur chaque ligne...j'ai supprimé (manuellement) ces espaces, et là....ça marche... :twisted:
Donc, maintenant je sais pourquoi ça ne marche pas, mais je ne comprends pas comment un espace peut se créer alors que je les supprime avant insertion....une idée?
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juil. 2013, 10:16

Tu a un espace dans la requête d'insertion ;)

Sinon vi c'est une erreur vicieuse :/
Au pire doit pouvoir ajouter un trim dans la requête.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 250 Messages

20 juil. 2013, 10:41

Bonjour,
=D>
A vouloir bien trop bien faire la distinction entre ' et ", je créais effectivement cet espace....scrogneugneu... |*()
Merci moogli, ton aide m'a (encore une fois) été très précieuse! =D>
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juil. 2013, 10:46

mais de rien on galère tous sur trucs bête :)


@+
Il en faut peu pour être heureux ......