Pb php de vérification d'une valeur Mysql

Résolu/Fermé
Signaler
Messages postés
11
Date d'inscription
jeudi 23 octobre 2008
Statut
Membre
Dernière intervention
16 avril 2009
-
 ramzy -
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(); ?>

5 réponses

Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008
90
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 )

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...
Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008
90
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..)
Messages postés
11
Date d'inscription
jeudi 23 octobre 2008
Statut
Membre
Dernière intervention
16 avril 2009
1
Merci pour vos réponses !
je fini d'installer analytics et j'essai ca desuite .

Gabriel
Messages postés
11
Date d'inscription
jeudi 23 octobre 2008
Statut
Membre
Dernière intervention
16 avril 2009
1
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>


jai un problème. voici mon code
<!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>
et voici l'erreur que le navigateur me ramène lorsque j'exécute ma page:
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'; } ?>
merci de m'aider
Messages postés
11
Date d'inscription
jeudi 23 octobre 2008
Statut
Membre
Dernière intervention
16 avril 2009
1
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