Pb php de vérification d'une valeur Mysql
Résolu
seom
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
ramzy -
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"); ?>
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"> </h3> <br /> </body> </html> <?php mysql_close(); ?>
A voir également:
- Pb php de vérification d'une valeur Mysql
- Easy php - Télécharger - Divers Web & Internet
- Verification lien internet - Guide
- Mysql community server - Télécharger - Bases de données
- Verification windows 11 - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
5 réponses
Bonjour.
Deux problèmes, à vue de nez :
1.
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
<? // 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...
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...
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..)
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..)
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 :
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>
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à :
$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é...
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é...
<!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>
<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>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour tes conseils, le message etait : Le mail existe deja
j'ai remplacé par ca :
Ps: Merci pour l'explication sur l'utilisation des booléennes
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