Problème de formulaire msyql

Répondre
Kniva
le 04/06/2010 à 11:20
Kniva
Entre le moment où j'ai posté ma question, j'ai refait des modifications ( en cliquant sur envoyer, je me suis dit, remet les '').
Le problèmes, c'est que j'ai toujours le même message d'erreur
LA GLOBULE
le 04/06/2010 à 11:34
LA GLOBULE
Plusieurs choses à dire :

<?php
$sql="SELECT loginName FROM member WHERE loginName='".mysql_real_escape_string($_POST[fusername])."'";
$result=mysql_query($sql,$cxn) or die ('Erreur : '.mysql_error());
if($num>0)//loginName non trouvé
{
$sql="SELECT loginName FROM member WHERE loginName=='".mysql_real_escape_string($_POST[fusername])."'
AND password=md5'".mysql_real_escape_string($_POST[fpassword])."'";
$result2=mysql_query($sql,$cxn) or die ('Erreur : '.mysql_error());
?>


1) $num n'existe pas. Par conséquent, tu ne rentres pas dans le if.
2) Sur ta seconde requête SQL, si on interprète le code PHP, on va tomber sur une requête de ce genre :

SELECT loginName FROM member WHERE loginName=='toto' AND password=md5'password';


Pour moi, elle n'est pas correcte : tu as un double = sur loginName, et ta condition sur le champs password n'est pas bonne. Quel est ce mot 'md5' ? Tu souhaitais utiliser la fonction md5 de php pour hacher ton mot de passe j'imagine. Dans ce cas, il aurait fallu faire un truc dans ce gout la :

<?php
$sql = "SELECT loginName FROM member WHERE loginName='".mysql_real_escape_string($_POST[fusername])."' AND password='".mysql_real_escape_string(md5($_POST[fpassword]))."'";
?>


3) Je ne vois pas où l’intérêt de faire 2 requête SQL. Autant faire la seconde directement.
Kniva
le 04/06/2010 à 11:54
Kniva
J'ai corrigé mon code.
Effectivement, j'ai utilisé la fonction md5 pour cacher le mot de passe.

Voici donc mon code

<?php
/*Programme: Login.php
Description: Programme de login pour la section à accès réservé de la boutique.
Il propose 2 options: s'identifier
créer un nouveau compte.*/

session_start();
include("inf.php");//on définit la base de données, identifiant
switch (@$_POST['do'])
{
case "login":
$cxn=mysql_connect(SERVER,LOGIN,MDP) or die ('Erreur : '.mysql_error());
mysql_select_db(BDD,$cxn) or die("Impossible d'ouvrir la base de données ");
$sql="SELECT loginName FROM member WHERE loginName='".mysql_real_escape_string($_POST[fusername])."'
AND password=md5'".mysql_real_escape_string($_POST[fpassword])."'";
$result=mysql_query($sql,$cxn) or die ('Erreur : '.mysql_error());

if($num>0) // mot de passe OK
{
$_SESSION['auth']="yes";
$logname=$_POST['fusername'];
$_SESSION['logname']=$logname;
$today=date("y-m-d h:i:s");
$sql="INSERT INTO Login(loginName,loginTime) VALUES ('$logname', '$today')";
$result=mysql_query($cxn,$sql) or die ("INSERT en échec.");
header("Location: membres.php");
}
else // mot de passe incorrect
{
$message="Le nom de Login '$_POST[fusername]' existe, mais le mot de passe ne correspond pas! Réessayez.<br>";
include("login_form.inc");
}

if($num==0)//Nom de longin introuvable
{
$message="Le nom de Login que vous avez saisi n'existe pas. Essayez une nouvelle fois.<br>";
include("login_form.inc");
}
break;
mysql_close();
?>


Qui m'affiche cette erreur quand je veux me connecter
Erreur : 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 ''mon mot de passe'' at line 2
LA GLOBULE
le 04/06/2010 à 12:07
LA GLOBULE
Si tu avais bien lu mon message, tu aurais modifié ton code en conséquence.

Et au final, c'est $_POST[fusername] ou $_POST['fusername'] que tu dois utiliser ??
Kniva
le 04/06/2010 à 12:18
Kniva
J'ai modifié mon code, y a juste la partie $num qui me pose problème ( car tu me dis que $num n'existe pas, donc je ne rentre pas dans mon if). Mais e ne vois pas quoi mettre.

Je vous montre mon code en entier ( la partie php et le formulaire)

<?php
/*Programme: Login.php
Description: Programme de login pour la section à accès réservé de la boutique.
Il propose 2 options: s'identifier
créer un nouveau compte.*/

session_start();
include("inf.php");//on définit la base de données, identifiant
switch (@$_POST['do'])
{
case "login":
$cxn=mysql_connect(SERVER,LOGIN,MDP) or die ('Erreur : '.mysql_error());
mysql_select_db(BDD,$cxn) or die("Impossible d'ouvrir la base de données ");
$sql="SELECT loginName FROM member WHERE loginName='".mysql_real_escape_string($_POST[fusername])."'
AND password=md5'".mysql_real_escape_string($_POST[fpassword])."'";
$result=mysql_query($sql,$cxn) or die ('Erreur : '.mysql_error());

if($num>0) // mot de passe OK
{
$_SESSION['auth']="yes";
$logname=$_POST[fusername];
$_SESSION['logname']=$logname;
$today=date("y-m-d h:i:s");
$sql="INSERT INTO Login(loginName,loginTime) VALUES ('$logname', '$today')";
$result=mysql_query($cxn,$sql) or die ("INSERT en échec.");
header("Location: membres.php");
}
else // mot de passe incorrect
{
$message="Le nom de Login '$_POST[fusername]' existe, mais le mot de passe ne correspond pas! Réessayez.<br>";
include("login_form.inc");
}

if($num==0)//Nom de longin introuvable
{
$message="Le nom de Login que vous avez saisi n'existe pas. Essayez une nouvelle fois.<br>";
include("login_form.inc");
}
break;
mysql_close();
case"news":
/*Recherche de champs vides.*/
foreach ($_POST as $field=>$value)
{
if($field!="fax")
{
if($value=="")
{
$blanks[]=$field;
}
}
}
if(isset($blanks))
{
$message_new="Champs non saisis. Veuillez les renseigner:";
foreach($blanks as $value)
{
$message_new.="$value,";
}
extract($_POST);
include("login_form.inc");
exit();
}
/*Validation des données*/
foreach($_POST as $field=>$value)
{
if(!empty($value))
{
if(eregi("name",$field) and !eregi("login",$field))
{
if(!ereg("^[A-Za-z' -] {1,50} $",$value))
{
$errors[]="$value n'est pas un nom valide.";
}
}
if(eregi("street",$field) or eregi("addr",$field) or eregi("city",$field))
{
if(!ereg("^[A-Za-z0-9., '-]{1,50}$",$value))
{
$errors[]="$value est incorrect.";
}
}
if(eregi("state",$field))
{
if(!ereg("[A-Za-z]{2}",$value))
{
$errors[]="$value est refusée pour state.";
}
}
if(eregi("email",$field))
{
if(!ereg("^.+@.+\\..+$" ,$value))
{
$errors[]="$value est refusé comme email.";
}
}
/* if(eregi("zip",$field))
{
if(!ereg("^[0-9]{5,5}(\-[0-9]{4,4})?$",$value))
{
$errors[]="$value n'est pas un zipcode autorisé.";
}
}
if(ereg("phone",$field) or eregi("fax",$field))
{
if(!ereg("^[0-9)(xX -]{7,20} $",$value))
{
$errors[]="$value n'est âs un numéro de tél.";
}
}
*/
}//fin de if empty
}//fin de foreach
if(@is_array($errors))
{
$message_new="";
foreach($errors as $value)
{
$message_new.=$value."Réessayez.<br/>";
}
extract($_POST);
include("login_form.inc");
exit();
mysql_close();
}
/*Nettoyage des données*/
$cxn=mysql_connect(SERVER,LOGIN,MDP);
mysql_select_db(BDD,$cxn) or die("Impossible d'ouvrir la base de données ");
foreach($_POST as $field =>$value)
{
if($field !="Button" and $field !="do")
{
if($field=="password")
{
$password=strip_tags(trim($value));
}
else
{
$fields[]=$field;
$value=strip_tags(trim($value));
$values[]=mysql_real_escape_string($cxn,$value);
$field=$value;
}
}
}
/*Le nom de login existe-t-il déjà?*/
$sql="SELECT loginName FROM member WHERE loginName='$loginName'";
$result=mysql_query($cxn,$sql) or die ("Requête SELECT en échec dans case new.");
$num=mysql_num_rows($result);
if($num>0)
{
$message_new="$loginName existe déjà. Choisissez-en un autre.";
include("login_form.inc");
exit();
}
/*Ajout du nouveau membre dans la base.*/
else
{
$today=date("Y-m-d");
$fields_str=implode(",",$fields);
$values_str=implode('","',$values);
$fields_str .=",createDate";
$values_str .='"'.",".'"'.$today;
$fields_str .=",password";
$values_str .='"'.","."md5"."('".$password."')";
$sql="INSERT INTO member";
$sql .="(".$fields_str .")";
$sql .="VALUES";
$sql .="(".'"'.$value_str . ")";
$result=mysql_query($cxn,$sql) or die("Requête INSERT en échec.");
$_SESSION['auth']="yes";
$_SESSION['logname']=$loginName;
/*Envoyer un emai au nouveau membre*/
$emess="Un nouveau compte de membre vient d'être créé.";
$emess .="Votre identifiant et votre mot de passe sont:";
$emess .="\n\n\t$loginName\n\t$password\n\n";
$emess .="Nous apprécions l'intérêt que vous portez à notre librairie.\n\n";
$emess .="Si vous avez des questions à poser, vous pouvez envoyer,";
$emess .="un e-mail à contact@honyamanga.fr";//adresse a changer ou modifier
$ehead="From: member-desk@honyamanga.fr\r\n";// adresse a changer
$subj="Votre nouveau compte à la librairie.";
$mailsnd=mail("$email","$subj","$emess","$ehead");
header("Location: Nouveau_membre.php");
}
break;
default:
include("login_form.inc");
}
?>



et voici le formulaire
<?php 
/* Fichier:login_form.inc
Description: Affiche la page de login. Celle-ci présente 2 formulaires:
saisir le nom du login existant et mot de passe associé
saisir info permettant d'enregistrer en tant que nouveau membre.*/

?>
<html>
<head>
<title> Page d'accueil des membres et futurs membres</title>
<link rel="shortcut icon" type="image/png" href="favicon.png" />
<LINK type="text/css" rel="stylesheet" href="styles.css">
<SCRIPT LANGUAGE="JavaScript">
function popup(page) {
window.open(page,'popup','width=500,height=400,toolbar=false,scrollbars=false');
}
function popop(page) {
window.open(page,'popup','width=500,height=300,toolbar=false,scrollbars=false');
}
</SCRIPT>
</head>
<body bgcolor="#9FB6CD">
<center>
<div id="conteneur">
<table border="0" cellpadding="3" cellspacing="0" width="800">
<tr>
<td><a href="index.html"onMouseOver="document.img_8.src='indexbis2.png';"
onMouseOut="document.img_8.src='indexbis.png';">
<img class="img" name="img_" src="indexbis.png"> </a></td>
</tr>
<tr align="center"style="background-image: url(fondbannbis.png)" height="256" width="800">
<td colspan="3" valign="bottom"> <img src="Logoidentification.png"> </td>
</tr>
<tr align="center"style="background-image: url(fondid.png)" height="507">
<td width="35%" valign="top" class="bold-large">&Ecirc;tes-vous déja membre?
<!--pour le login des nouveaux membres-->
<form action="login.php" method="POST">
<table border="0">
<?php
if(isset($message))
{
echo"<tr>
<td style='color:red' colspan='2'>$message<br/></td>
</tr>";
}
?>
<tr>
<td class="bold-right">Identifiant</td>
<td><input type="text" name="fusername" size="20"></td>
</tr>
<tr>
<td class="bold-right"> Mot de passe</td>
<td><input type="password" name="fpassword" size="20"></td>
</tr>
<input type="hidden" name="do" value="login">
<tr>
<td style="text-align:center" colspan="2"><br/>
<input type="submit" name="log" value="Identifiez-vous"></td>
</tr>
</table>
</form>
</td>
<td style="width:1; background-color:gray"></td>
<td style="width:65%" valign="top">
<p><span class="bold-large"> Pas encore Membre?</span></p>
<p style="text-align:left">Des offres spéciales, une lettre d&apos;informations, des annonces sur les nouveaux mangas et plus encore...
Renseignez le formulaire ci-apr &egrave;s et devenez membre de notre librairie. C&apos;est facile et c&apos;est gratuit!</p>
<!--formulaire à renseigner par les nouveaux membres-->
<form action="login.php" method="POST">
<table border="0" width="100%">
<?php
if(isset($message_new))
{
echo"<tr>
<td style='color:red;font-weight:bold'>
<p>$message_new</p></td>
</tr>";
}
?>
<tr>
<td class="bold-right">ID Membre</td>
<td><input type="text" name="loginName" value="<?php echo @$loginName ?>" size="20" maxlength="20"></td>
</tr>
<tr>
<td class="bold-right"> Mot de passe</td>
<td><input type="password" name="password" value="<?php echo @$password ?>" size="10" maxlength="8"></td>
</tr>
<tr>
<td class="bold-right"> Prénom</td>
<td><input type="text" name="firstName" value="<?php echo @$firstName ?>" size="40" maxlength="40"></td>
</tr>
<tr>
<td class="bold-right"> Nom</td>
<td><input type="text" name="lastName" value="<?php echo @$lastname ?>" size="40" maxlength="40"></td>
</tr>
<tr>
<td class="bold-right">Rue</td>
<td><input type="text" name="street" value="<?php echo @$street ?>" size="50" maxlength="50"></td>
</tr>
<tr>
<td class="bold-right"> Ville</td>
<td><input type="text" name="city" value="<?php echo @$city ?>" size="40" maxlenth="40"></td>
</tr>
<tr>
<td class="bold-right">Code Postal</td>
<td><input type="text" name="zip" value="<?php echo @$zip ?>" size="10" maxsize="10"></td>
</tr>
<tr>
<td class="bold-right"> T&eacute;l&eacute;phone</td>
<td><input type="text" name="phone" value="<?php echo @$phone ?>" size="15" maxlength="15">
&nbsp;&nbsp;&nbsp;<b>Fax</b>
<input type="text" name="fax" value="<?php echo @$fax ?>" size="15" maxlength="15"> </td>
</tr>
<tr>
<td class="bold-right"> Adresse E-mail </td>
<td><input type="text" name="email" value="<?php echo @$email ?>" size="55" maxlength="67"></td>
</tr>
<input type="hidden" name="do" value="new">
<tr>
<td>&nbsp;</td>
<td style="text-align:center">
<input type="submit" value="Enregistrez-vous"></td>
</tr>
</table>
</form>
</td>
</tr>
<tr align="center"style="background-image: url(fondrestebis.png)" height="217">
<td colspan="3" class="commentaire"> Nous apprécierions vos commentaires et suggestions. Vous pouvez les adresses à
<a href="mailto:***@orange.fr">honyamanga@orange.fr</a><br></td>
</tr>
<tr>
<td align="center"><A HREF='javascript:popup("mentions legalesconnexion.html")'class="type1">Mentions l&eacute;gales</A>-
<A HREF='javascript:popop("credit.html")'class="type1">Cr&eacute;dit</A></td>
</tr>
</table>
</div>
</center>
</body>
</html>
dark_nemo
le 04/06/2010 à 13:08
dark_nemo
J'ai l'impression que tu ne comprends pas trop se que tu fais ou alors tu t'attaques à un trop gros poisson pour ton niveau actuel en php.
Je pense que tu devrais chercher des cours sur les bases de données et sur les formulaires en générale.
Passer 2-3 jours à bien lire les cours pour assimiler.
Car sinon tu risques de rester bloquer sur chaque page de ton site.
Il faut vraiment que tu passes du temps sur les fonctions php car t'as une façon de les utiliser un peu approximative.
Ensuite pour la variable $num c'est normal car à aucun moment tu ne définis cette variable donc php tu le dis. Il veut bien la tester mais il sait pas quoi tester
Kniva
le 04/06/2010 à 14:01
Kniva
Je tiens à vous remercier, j'ai bien relu tous vos commentaires, et mon code fonctionne pour la partie identification.
Je vais tester la partie ou on s'enregistre maintenant.

Voici mon code
<?php
/*Programme: Login.php
Description: Programme de login pour la section à accès réservé de la boutique.
Il propose 2 options: s'identifier
créer un nouveau compte.*/

session_start();
include("inf.php");//on définit la base de données, identifiant
switch (@$_POST['do'])
{
case "login":
$cxn=mysql_connect(SERVER,LOGIN,MDP) or die ('Erreur : '.mysql_error());
mysql_select_db(BDD,$cxn) or die("Impossible d'ouvrir la base de données ");
$sql="SELECT loginName FROM member WHERE loginName='".mysql_real_escape_string($_POST[fusername])."'
AND password='".mysql_real_escape_string($_POST[fpassword])."'";
$result=mysql_query($sql,$cxn) or die ('Erreur : '.mysql_error());
$num=mysql_num_rows($result);

if($num>0) // mot de passe OK
{
$_SESSION['auth']="yes";
$logname=$_POST['fusername'];
$_SESSION['logname']=$logname;
$today=date("y-m-d h:i:s");
$sql="INSERT INTO Login(loginName,loginTime) VALUES ('$logname', '$today')";
$result=mysql_query($sql,$cxn) or die ('Erreur : '.mysql_error());
header("Location: Nouveau_membre.php");
}
else // mot de passe incorrect
{
$message="Le nom de Login '$_POST[fusername]' existe, mais le mot de passe ne correspond pas! Réessayez.<br>";
include("login_form.inc");
}

if($num==0)//Nom de longin introuvable
{
$message="Le nom de Login que vous avez saisi n'existe pas. Essayez une nouvelle fois.<br>";
include("login_form.inc");
}
break;
mysql_close();
case"news":
/*Recherche de champs vides.*/
foreach ($_POST as $field=>$value)
{
if($field!="fax")
{
if($value=="")
{
$blanks[]=$field;
}
}
}
if(isset($blanks))
{
$message_new="Champs non saisis. Veuillez les renseigner:";
foreach($blanks as $value)
{
$message_new.="$value,";
}
extract($_POST);
include("login_form.inc");
exit();
}
/*Validation des données*/
foreach($_POST as $field=>$value)
{
if(!empty($value))
{
if(eregi("name",$field) and !eregi("login",$field))
{
if(!ereg("^[A-Za-z' -] {1,50} $",$value))
{
$errors[]="$value n'est pas un nom valide.";
}
}
if(eregi("street",$field) or eregi("addr",$field) or eregi("city",$field))
{
if(!ereg("^[A-Za-z0-9., '-]{1,50}$",$value))
{
$errors[]="$value est incorrect.";
}
}
if(eregi("state",$field))
{
if(!ereg("[A-Za-z]{2}",$value))
{
$errors[]="$value est refusée pour state.";
}
}
if(eregi("email",$field))
{
if(!ereg("^.+@.+\\..+$" ,$value))
{
$errors[]="$value est refusé comme email.";
}
}
/* if(eregi("zip",$field))
{
if(!ereg("^[0-9]{5,5}(\-[0-9]{4,4})?$",$value))
{
$errors[]="$value n'est pas un zipcode autorisé.";
}
}
if(ereg("phone",$field) or eregi("fax",$field))
{
if(!ereg("^[0-9)(xX -]{7,20} $",$value))
{
$errors[]="$value n'est âs un numéro de tél.";
}
}
*/
}//fin de if empty
}//fin de foreach
if(@is_array($errors))
{
$message_new="";
foreach($errors as $value)
{
$message_new.=$value."Réessayez.<br/>";
}
extract($_POST);
include("login_form.inc");
exit();
mysql_close();
}
/*Nettoyage des données*/
$cxn=mysql_connect(SERVER,LOGIN,MDP);
mysql_select_db(BDD,$cxn) or die("Impossible d'ouvrir la base de données ");
foreach($_POST as $field =>$value)
{
if($field !="Button" and $field !="do")
{
if($field=="password")
{
$password=strip_tags(trim($value));
}
else
{
$fields[]=$field;
$value=strip_tags(trim($value));
$values[]=mysql_real_escape_string($cxn,$value);
$field=$value;
}
}
}
/*Le nom de login existe-t-il déjà?*/
$sql="SELECT loginName FROM member WHERE loginName='$loginName'";
$result=mysql_query($cxn,$sql) or die ("Requête SELECT en échec dans case new.");
$num=mysql_num_rows($result);
if($num>0)
{
$message_new="$loginName existe déjà. Choisissez-en un autre.";
include("login_form.inc");
exit();
}
/*Ajout du nouveau membre dans la base.*/
else
{
$today=date("Y-m-d");
$fields_str=implode(",",$fields);
$values_str=implode('","',$values);
$fields_str .=",createDate";
$values_str .='"'.",".'"'.$today;
$fields_str .=",password";
$values_str .='"'.","."md5"."('".$password."')";
$sql="INSERT INTO member";
$sql .="(".$fields_str .")";
$sql .="VALUES";
$sql .="(".'"'.$value_str . ")";
$result=mysql_query($cxn,$sql) or die("Requête INSERT en échec.");
$_SESSION['auth']="yes";
$_SESSION['logname']=$loginName;
/*Envoyer un emai au nouveau membre*/
$emess="Un nouveau compte de membre vient d'être créé.";
$emess .="Votre identifiant et votre mot de passe sont:";
$emess .="\n\n\t$loginName\n\t$password\n\n";
$emess .="Nous apprécions l'intérêt que vous portez à notre librairie.\n\n";
$emess .="Si vous avez des questions à poser, vous pouvez envoyer,";
$emess .="un e-mail à contact@honyamanga.fr";//adresse a changer ou modifier
$ehead="From: member-desk@honyamanga.fr\r\n";// adresse a changer
$subj="Votre nouveau compte à la librairie.";
$mailsnd=mail("$email","$subj","$emess","$ehead");
header("Location: Nouveau_membre.php");
}
break;
default:
include("login_form.inc");
}
?>
dark_nemo
le 04/06/2010 à 14:37
dark_nemo
ça fonctionne mais c'est branlant.
ça fonctionne tant qu'il n'y a pas de problème.
Si pour x raison ta connexion à la base échoué ça plante de partout.
C'est ça que j'veux te faire comprendre. Tu places les fonctions les unes à la suite des autres sans même tester le retour de celles-ci.
La question que tu devrais te poser c'est
Suis-je connecté? Oui - Non
La base de données est-elle bien sélectionnée? Oui - Non
Ma requête à t'elle aboutie? Oui - Non
etc etc car imaginons que ton serveur de données soit hors service. Tu vas avoir un beau site avec pleins de messages d'erreurs
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours