Pb php de vérification d'une valeur Mysql

Résolu/Fermé
seom Messages postés 11 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 16 avril 2009 - 23 oct. 2008 à 14:31
 ramzy - 3 sept. 2014 à 14:06
Bonjour, je shouaite créer un champ d'inscription à une newsletter, mais j'aimerais vérifier si un email existe deja pour afficher un message ou autre.

voilà mon code


<?
mysql_connect("serveur", "nom", "pass");
mysql_select_db("nom"); ?>

<?php 
$ok = $_POST[ok];
$inscrit = $_POST[email];?>

<?
// vérification du formulaire
if ($inscrit == "") { $vide = true; } else $vide = false; ?> 



<?   // le pb vien d'ici je pense 
// vérification d'inscription dans la base de donnée 
$verif = mysql_num_rows(mysql_query ("SELECT mail FROM users WHERE mail = '$inscrit'")); 
if ($verif == true ) {  
$mail_exist = 1;} else {$mail_exist = 0;

}


   if ($vide == false and $mail_exist == 0) { 
			
	// Connexion base de donnée
mysql_query("INSERT INTO `infom84779`.`users` (`id`, `mail`) VALUES (NULL, '$inscrit')");

} 


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="3;
<?php if ($vide == false and $mail_exist = 0) { 
           echo('URL=site">');
}    else 
          echo('URL=site">');  
		  
?>
<title>Confirmation d'envoi</title>
</head>

<body>
<table width="689" border="0" height="300" cellspacing="0" align="center">
  <tr>
    <th scope="col"><span style="color:#1E8C99; font-size:18px">
	
	<?php if ($vide == false and $mail_exist = 0 ) { 
	echo('merci pour votre inscription'); 
} 
	       elseif ($vide == true) { 
    echo('veuillez remplir le formulaire'); 
} 
          elseif ($mail_exist = 1) {
		  echo('le mail existe deja '); }
		   
?>
   
    </span></th>
  </tr>
</table>
<h3 align="center">&nbsp;</h3> 

<br />
</body>
</html>
<?php mysql_close(); ?>
A voir également:

5 réponses

macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
23 oct. 2008 à 15:32
Bonjour.
<?   // le pb vien d'ici je pense 
// vérification d'inscription dans la base de donnée 
$verif = mysql_num_rows(mysql_query ("SELECT mail FROM users WHERE mail = '$inscrit'")); 
if ($verif == true ) {  
$mail_exist = 1;} else {$mail_exist = 0;

}

Deux problèmes, à vue de nez :
1.
$verif = mysql_num_rows(mysql_query ("SELECT mail FROM users WHERE mail = '$inscrit'")); 
echo $verif;

Tu verras que le contenu de $verif ne correspond pas à ce que tu veux :
Comme tu mets $inscrit entre simples quotes, php ne l'interprète pas.
Solution simple :
$verif = mysql_num_rows(mysql_query ("SELECT mail FROM users WHERE mail = '".$inscrit."'"));

2.
Extrait de la doc PHP
mysql_num_rows retourne le nombre de lignes d'un résultat.
Fais plutôt un
 if ($verif > 0 )

0
Bonjour

Ton $inscrit était bien entre double quotes, et la remarque 1 de macgawel est infondée. Il n'a pas dû faire lui-même l'essai qu'il te demande de faire.
Par contre sa remarque sur $verif>0 est bonne, elle. Il aurait même fallu séparer les appels à mysql_query et mysql_num_rows pour tester les erreurs, mais ça n'est pas ça qui empêche le script de marcher...
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
23 oct. 2008 à 15:50
Ton $inscrit était bien entre double quotes, et la remarque 1 de macgawel est infondée. Il n'a pas dû faire lui-même l'essai qu'il te demande de faire.
Je confirme :-O

Je viens de regarder, effectivement le résultat est correct.
En fait, j'ai toujours un doute avec les doubles/simples quotes... Du coup, je préfère bien éclater les chaînes de caractères, histoire d'être sûr (et je pensais que, même si le '$inscrit' était à l'intérieur d'une double quote, le fait qu'il y ait une simple quote empêche PHP d'interpréter..)
0
seom Messages postés 11 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 16 avril 2009 1
23 oct. 2008 à 16:55
Merci pour vos réponses !
je fini d'installer analytics et j'essai ca desuite .

Gabriel
0
seom Messages postés 11 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 16 avril 2009 1
23 oct. 2008 à 17:46
Voila, je vien d'apporter les modifications: et .. Ca marche merci beaucoup . Par contre j'ai un autre petit souci :

quand je rentre une donnée dans le formulaire, la premiere inscription s'inscrit dans la BBD, si je remet la meme valeur elle ne s'inscrit pas. j'usque la ca va. Le probleme vien du message :

soit il a rien rempli et ca ecrit : veuillez remplir le formulaire
soit il a inscrit son mail 2 fois et la ca écrit : mail dejà inscrit
soit tout est ok et la c'est : merci pour votre inscription.

Pourtant ca affiche toujour le meme message si le mail existe deja ou pas. alors que le système d'inscription marche:

Le code :



<?php
mysql_connect("blabla", "blabla", "blabla");
mysql_select_db("infom84779"); ?>
<!-- énumération des variables -->
<?php 
$ok = $_POST[ok];
$inscrit = $_POST[email];?>

<?php
// vérification du formulaire
if ($inscrit == "") { $vide = true; } else $vide = false; ?> 



<?php
// vérification d'inscription dans la base de donnée   maitenant ca marche :-D
$verif = mysql_num_rows(mysql_query ("SELECT mail FROM users WHERE mail = '$inscrit'")); 
if ($verif > 0 )

{ $mail_exist = true;} else {$mail_exist = false; }

 


   if ($vide == false and $mail_exist == false) { 
		
		
		
	// requête d'inscription 
mysql_query("INSERT INTO `infom84779`.`users` (`id`, `mail`) VALUES (NULL, '$inscrit')");

} 


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="3;
<?php if ($vide == false and $mail_exist = false) { 
           echo('URL=http://www.page">');
}    else 
          echo('URL=http://www.page.php">');  
		  
?>
<title>Confirmation d'envoi</title>
</head>

<body>
<table width="689" border="0" height="300" cellspacing="0" align="center">
  <tr>
    <th scope="col"><span style="color:#1E8C99; font-size:18px">


// Le problème commence ici j'imagine 


	<?php if ($vide == false and $mail_exist == false) { 
	echo('merci pour votre inscription'); 
} 
	       elseif ($vide == true) { 
    echo('veuillez remplir le formulaire'); 
} 
          elseif ($mail_exist == true) {
		  echo('Mail deja enregistré'); } 
?>
   
       </span>
     </th>
  </tr>
</table>
</body>
</html>


0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
23 oct. 2008 à 18:21
Pourtant ca affiche toujour le meme message si le mail existe deja ou pas. alors que le système d'inscription marche:
Ca affiche quel message ?

Au passage, quelques conseils :

mysql_connect("blabla", "blabla", "blabla") or die('Erreur à la connexion : '.mysql_error());
A faire pour toutes les étapes de tes requêtes : s'il y a plantage, tu auras le message d'erreur correspondant.
Ca aide toujours ;-)

if ($inscrit == "") { $vide = true; } else $vide = false;
Tu peux avantageusement remplacer la ligne par
$vide = empty($inscrit);

Et tant qu'à utiliser des variables booléennes (FALSE ou TRUE), autant en profiter :
Tu peux remplacer un test comme if ($vide == false and $mail_exist == false) par if (! ($vide AND $mail_exist))

... Ce qui tévitera des bêtes erreurs, comme celle-là :
<meta http-equiv="refresh" content="3;
<?php if ($vide == false and $mail_exist = false)
:
$mail_exist = false : il faut mettre un ==.
Là, tu affectes false à $mail_exist ! Du coup, pour le reste du code ça ne fonctionne plus comme souhaité...
0
jai un problème. voici mon code
0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Identification</title>
</head>

<body>

<?php
include ("connexion.php");

session_start();
$loginOK = false;

if (isset ($_POST['btnval']))
{
$login= $_POST['login'];
$pwd= $_POST ['password'];

$sql= mysql_query("select login from fournisseur where login = '".addslashes($login)."'") or die ('Erreur SQL'.mysql_error());
$verif=mysql_num_rows($sql);

if ($verif == true)
{
$donnees = mysql_fetch_assoc($sql);

if ($pwd== $donnees['passwd'])
{
$loginOK = true;
}
}
}

if ($loginOK)
{
echo 'bravo! vous êtes connecté';
//header ('location:contribuable.html');
}
else
{
echo 'erreur! verifiez le login et le mot de passe';
}

?>
</body>
</html>
0
et voici l'erreur que le navigateur me ramène lorsque j'exécute ma page:
0
0) { $donnees = mysql_fetch_assoc($sql); if ($pwd== $donnees['passwd']) { $loginOK = true; } } } if ($loginOK) { echo 'bravo! vous êtes connecté'; //header ('location:contribuable.html'); } else { echo 'erreur! verifiez le login et le mot de passe'; } ?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
seom Messages postés 11 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 16 avril 2009 1
23 oct. 2008 à 19:01
Merci pour tes conseils, le message etait : Le mail existe deja

j'ai remplacé par ca :

if (!($vide )) { 
    echo('veuillez remplir le formulaire'); 
} 
          elseif ($verif > 0 ) {
		  echo('Mail deja enregistré'); 
		  
else
echo('merci pour votre inscription'); 



Ps: Merci pour l'explication sur l'utilisation des booléennes
0