hello tout le monde!!
Alors voilà, j'ai des codes d'enregistrement et de login que je n'arrive pas à faire fonctionner. PHP me sort des erreurs que je ne comprends pas:
Voici le code d'enregistrement (inscription.php), le script où il y a une erreur est en gras:
[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>
<title>inscription</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="bdm.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.Style2 {font-family: "Comic Sans MS"}
.Style3 {font-size: xx-small}
-->
</style>
</head>
<body>
//vérification de l'e-mail
if (eregi ("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}", stripslashes(trim($_POST['email']))))
{
$em = echappement($_POST['email']);
}
else
{
$em = FALSE;
echo"<p><font color='red' size='+1'> Votre adresse e-mail n'est pas bonne</font></p>";
}
//controler le mot de passe (les deux saisies)
if (eregi ("^[[:alnum:]_]{4,20}$", stripslashes(trim($_POST['password']))))
{
if ($_POST['password'] == $_POST['password2'])
{
$mp = echappement($_POST['password']);
}
else
{
$mp = FALSE;
echo"<p><font color='red' size='+1'>"."Les saisies de votre mot de passe ne sont pas identiques"."</font></p>";
}
}
else
{
$mp = FALSE;
echo"<p><font color='red' size='+1'>"."Votre mot de passe n'est pas valide (nombre de caractères trop nombreux ou insuffisant)"."</font></p>";
}
//envoie de l'enregistrement
if ($pseu && $em && mp)
{ //si tout est ok on vérifie l'unicité du pseudo
$rq = "SELECT num_fan FROM fan WHERE pseudo='$pseu'";
$result = @mysql_query($rq);
if (mysql_num_rows($result) == 0)
{ //c'est bon, on ajoute le fan
$rq = "INSERT INTO fan (pseudo, password, email) VALUES ('$pseu', PASSWORD ('$mp'), '$em')";
$result = @mysql_query ($rq);
if ($result)
{ //l'enregistrement c'est bien passé
echo "Merci de vous être enregistrer";
exit();
}
else
{ //s'il y a eu un problème à l'enregistrement
echo "Enregistrement impossible à cause d'une erreur système. Toutes nos excuses.";
}
}
else
{ //le pseudo existe déjà
echo "<p><font color='red' size='+1'>"."Ce pseudo est déjà pris"."</font></p>";
}
mysql_close();
}
else
{ //si l'un des tests n'est pas bon
echo "<p><font color='red' size='+1'>"."Réessayer SVP"."</font></p>";
}
}
?>[/b]
<form action="<?php echo $_SERVER['PHP_SELF']; ?> method="post">
<table>
<tr><td width="156"><span class="Style4">Pseudo :</span></td>
<td width="303"><input type="text" name="pseudo" size="15" maxlength="20" value="<?php if (isset ($_POST['pseudo'])) echo $_POST['pseudo']; ?>" /> <span class="Style3">(Seulement des lettres, des chiffres ou un blanc souligné. Entre 4 et 20 caractères)</span></td></tr>
<tr><td valign="top"><span class="Style4">Mot de Passe</span><strong> :</strong></td>
<td><input type="password" name="password" size="20" maxlength="20"/> <span class="Style3">(Seulement des lettres ou des chiffres. Entre 4 et 20 caractères)</span></td></tr>
<tr><td valign="top"><span class="Style4">Confirmation du Mot de Passe</span><strong> :</strong></td>
<td><input type="password" name="password2" size="20" maxlength="20"/> </td></tr>
<tr><td valign="top"><span class="Style4">E-mail</span><strong> :</strong></td>
<td><input type="text" name="email" size="40" maxlength="40" value="<?php if (isset ($_POST['email'])) echo $_POST['email']; ?>"/> </td></tr>
<tr><td> </td><td><input name="submit" type="submit" value="Enregistrer" /></td></tr>
[/code]
l'erreur qu'il m'affiche est celle-ci:
[quote]The requested URL /bdreamanga/inscription.php method= was not found on this server.
Apache/1.3.33 Server at 127.0.0.1 Port 80[/quote]
voici également le script pour le login (login.php), cf code en gras:
[code]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="bdm.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.Style1 {
font-size: xx-small;
color: #FF0000;
}
-->
</style>
</head>
<body>
[b]<?php
if (isset($_POST['submit']))
{ //traiter le formulaire
//connexion à la base de donnée
require_once ('mysql_connect.php');
if (empty($_POST['pseudo']))
{ //valider le nom d'utilisateur
$pseu = FALSE;
echo "<p><font color='red' size='+1'>Vous avez oublié d'indiquer votre pseudo</font></p>";
}
else
{
$pseu = echappement($_POST['pseudo']);
}
if (empty($_POST['password']))
{ //valider le mot de passe
$mp = FALSE;
echo "<p><font color='red' size='+1'>Vous avez oublié d'indiquer votre mot de passe</font></p>";
}
else
{
$mp = echappement($_POST['password']);
}
if ($pseu && $mp)
{ //si tout est OK, on consulte la BDD
$rq = "SELECT num_fan, pseudo FROM fan WHERE pseudo='$pseu' AND password=PASSWORD($mp')";
$result = @mysql_query ($rq);
$ligne = mysql_fetch_array ($result, MYSQL_NUM);
if ($ligne)
{ //on a une réponse, on lance la session et on redirectionne
$_SESSION['pseudo'] = $ligne[1];
$_SESSION['num_fan'] = $ligne[0];
ob_end_clean(); //supprime le buffer de sorties
header ("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."pageaccueil.php");
exit();
}
else
{ //on a rien trouvé
echo "<p><font color='red' size='+1'>Le pseudo ou le mot de passe qu vous avez rentré est incorrecte.</font></p>";
}
mysql_close(); //on referme la connexion à la BDD
}
else
{ //en cas d'erreur
echo "<p><font color='red' size='+1'>Pouvez-vous réessayer SVP.</font></p>";
}
}
?>[/b]
<div class="cadre">
<p><img src="connexion.gif" width="110" height="53" /> </p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="connexion" method="post">
<p><span class="Style2">Pseudo</span><br />
<input type="text" name="pseudo" size="15" maxlength="20" value="<?php if (isset ($_POST['pseudo'])) echo $_POST['pseudo']; ?>"/>
</p>
<p><span class="Style2">Mot de passe</span><br />
<input name="password" type="password" size="20" maxlength="20" />
</p>
<p align="right">
<input type="submit" name="submit" value="OK" />
</p>
<p class="Style1">Attention, pour pouvoir vous logger, votre navigateur doit accepter les cookies.</p>
<p>• <a href="#" class="titre"> Mot de passe oublié ?!</a></p>
<p>• <a href="inscription.php" class="titre">S'inscrire </a></p>
</form>
</div>
</body>
</html>
[/code]
Voici l'erreur:
[quote]
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\bdreamanga\login.php on line 47[/quote]
je vois vraiment pas pourquoi ça ne marche pas à cette ligne 47.
voici pour info le code de mysql_connect.php:
[code]<?php
DEFINE ('DB_USER', 'root');
DEFINE ('DB_PASSWORD', '');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'bdreamanga');
if ($bd = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD))
{ //etablir la connexion
if(!mysql_select_db (DB_NAME))
{ //si on ne peut pas sélectionner la BDD
echo "Sélection de la base de donnée impossible";
exit();
}
}
else
{ //Si la connexion avec mysql est impossible
echo "Certains problèmes techniques empêchent la connexion avec la BDD.";
exit();
}
//Fonction d'échappment et de nettoyage des données
function echappement ($data)
{
global $bd;
if (ini_get('magic_quotes_gpc'))
{
$data = stripslashes($data);
}
return mysql_escape_string (trim ($data));
}
?> [/code]
Il est à noter que j'ai utiliser un livre pour créer ces codes, et que malgrés ça, je ne parviens pas à débeuguer. J'utilise la version 1.8 d'EasyPHP avec la version 4.3 de PHP.
J'espère que vous pourrez m'aider.
merci
__________________________
[b]Thesly[/b]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
pour la partie enregistrement c'est bon, j'ai trouvé l'erreur, il manquait juste des guillemets à la ligne 178. Je susi deg d'avoir perdu du temps pour une erreurs aussi con :(): .
__________________________ Thesly
J'ai regardé ton code, ainsi que l'erreur associée et je pense que ta requète sql est fausse.
pour le débugger essaye de remplacer la ligne : [quote]$result = @mysql_query ($rq);[/quote]
par[quote]$result = mysql_query ($rq);
echo "<br>Requete: ".$rq."<br>";
echo mysql_error()."<br>";[/quote]
Ceci te dira le problème de ta requète si le problème vient bien de là.
++
Mab
__________________________
[img]http://simous.chez.tiscali.fr/images/bansms.gif[/img]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
Salut
Effectivement Mab, il y avait un problème dans ma requête sql. A la fin dans mon [quote]password=PASSWORD($mp')";
[/quote] il manquait une " ' " avant le "$mp".
faut que je change mes lunettes moi. :x:
néanmoins, je ne parviens pas à me connecter. A chaque fois il me dit que le login ou le mot de passe est faux. Je pense que c'est sur le mot de passe qu'est le probleme. Il doit y avoir un problème à cause du codage des caractères. Comment puis-je résoudre ce problème?
merci
__________________________
[b]Thesly[/b]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
Salut thesly,
Je vois que tu utilises PASSWORD de MySQL! Le pb peut venir de là: entre la 4.0.x et la version 4.1.x, il me semble que l'encodage avec PASSWORD a évolué (cf. ce lien sur nexen)
__________________________ FAQ PHP
Salut Windu.
J'ai épluché le lien que tu m'as donné et il semble bien que se soit un problème de version. Pourtant, je n'ai pas tout compris, j'ai l'impression qu'ils utilisent quand même PASSWORD(). J'ai quand même essayé avec OLD_PASSWORD() pour pouvoir gérer les mots de passe sur 16 octets alors qu'ils devraient en faire 41.
J'utilise pourtant la version 4.1.9 de my_sql, ils auraient donc du être directement sur 41 octets, non? Ou bien il faut préciser quelque chose quand on crée sa table avec easyphp???
Enfin bref, pour en revenir à OLD_PASSWORD(), je ne sais pas trop si ça à marcher car il m'a sorti une nouvelle erreur:
[quote]Requete: SELECT num_fan, pseudo FROM fan WHERE pseudo='kiki' AND password=OLD_PASSWORD('kiki')
Notice: ob_end_clean(): failed to delete buffer. No buffer to delete. in c:\program files\easyphp1-8\www\bdreamanga\login.php on line 55
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\bdreamanga\login.php:7) in c:\program files\easyphp1-8\www\bdreamanga\login.php on line 56[/quote]
Si vous pouvez m'expliquer le pourquoi du comment... :(:
merci
__________________________
[b]Thesly[/b]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
[quote]Notice: ob_end_clean(): failed to delete buffer. No buffer to delete. in c:\program files\easyphp1-8\www\bdreamanga\login.php on line 55 [/quote]
à la ligne 55 tu essaye de finir un buffer alors que tu n'en as pas créé
__________________________
Spirit - modérateur casu ^-^'
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
Ben fait, pour simplifier, j'ai enlever cette ligne:
ob_end_clean();
et là ça marche très bien.
Pour le problème de "PASSWORD", j'ai aussi fini par le retirer et là aussi ça marche. En faite PASSWORD sert à coder le mot de passe dans la base de donnée (mais je comprends pas pourquoi il ne parviens pas à le décoder), alors que je croyais que ça servait à décoder le mot de passe tapé dans dans le: