Bonsoir,
j'ai un petit problème avec le tuto vidéo, j'ai suivis attentivement la vidéo, mais il y a un problème, j'en suis à 9 minute, quand on doit affiché "Vous êtes bien connecté!". Le problème, c'est que ça ne s'affiche pas. Le formulaire disparait, mais aucun texte. Firebug me retourne bien :

login : pass
password : login

Source
login=pass&password=login

Dans la condition de data.erreur == "no"
j'ai fais un alert("test erreur no"); , l'alert s'affiche bien...

if(data.erreur == "no") {
$('#testJson').fadeOut();
$('#testJson').before(data.retour);
// alert("test erreur no");
}

else {
            $t"erreur"] = "no";
            $t"retour"] = "<p>Vous êtes bien <strong>connecté</strong> !</p>";
    }

<body>
<h2>Test Json</h2>
<form method="post" action="check.php" id="testJson" />
<p><label>Login :</label><input type="text" name="login" /></p>
<p><label>Password :</label><input type="password" name="password" /></p>
<p><input type="submit" value="Log me !!!" /></p>
</form>
</body>

Ça avais bien fonctionner jusqu'à présent, je comprenais tout, mais là, je bloque. :/

Merci, d'avance.

8 réponses


Bon, j'ai trouvé le problème, c'est un problème d'accent. J'ai enlevé les accents :

$t"retour"] = "<p>Vous etes bien <strong>connecte</strong> !</p>";

Et ça s'affiche maintenant. :)

Mais pourquoi, ça ne marche pas avec les accents ?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
</script>
</head>
<body>
<form>
formulaire
</form>
</body>
</html

Merci, d'avance.

Essaye de mettre ta page check.php en utf-8 avec la fonction header() en début de page (si tu n'as pas de balises meta dans check.php)?

Merci, c'est bon, ça marche. J'ai modifié le script, pour faire un système de connexion. Quand j'envoie le formulaire vide, ça me met bien "Le champ login est vide !", je remplis le champs correctement, je re-clic sur le bouton, et là, ça m'envoie le formulaire O_o "Vous êtes bien connecté !"

Pourtant avec Firebug :
email moxostoma123@gmail.com
password

Source
email=moxostoma123%40gmail.com&password=

On voie bien, qu'il manque le mot de passe....

AJAX :

<script type="text/javascript">
$(function(){
$('#testJson').submit(function() {
$(this).append('<div class="loader"></div>');
$(this).find(".error").remove();
pass = $(this).find("input[name=password]").val();
Email = $(this).find("input[name=email]").val();
loginInput = $(this).find("input[name=email]");
passInput = $(this).find("input[name=password]");
form = $(this);

url = $(this).attr("action");
$.post(url,{email:Email,password:pass},function(data) {
//formulaire:variablephp
form.find(".loader").fadeOut();
if(data.erreur == "no") {
form.fadeOut();
form.before(data.retour);
}
else {
    if(data.erreurLoginExistePas) {
    loginInput.after(data.erreurLoginExistePas);
    }

    if(data.erreurLoginVide) {
    loginInput.after(data.erreurLoginVide);
    }

    if(data.erreurPasswordVide) {
    passInput.after(data.erreurPasswordVide);
    }

    if(data.erreurPasswordIncorrect) {
    passInput.after(data.erreurPasswordIncorrect);
    }

    form.preprend(data.erreur);
}
}, "json");
return false;
});
});
</script>
</head>
<body>
<h2>Test Json</h2>
<form method="post" action="check.php" id="testJson" />
<p><label>Email :</label><input type="text" name="email" /></p>
<p><label>Password :</label><input type="password" name="password" /></p>
<p><input type="submit" value="Log me !!!" /></p>
</form>

PHP :

<?php
include('connexion_bdd.php');
$t = array();
$t"erreur"] = "<span class='error'>Formulaire incorrect</span>";
$i = 0;
$Email = stripslashes(htmlspecialchars($_POST'email'])); //Email
$pass = md5($_POST'password']);
if(!empty($Email))
{
//Vérification de l'email 1/2
$resultat = mysql_query("SELECT * FROM membres WHERE membres_email = '$Email'");
$verif_email_existe = mysql_num_rows($resultat);
if($verif_email_existe==0)
{
$t"erreurLoginExistePas"] = "<span class='error'>L'email <strong>".$Email."</strong> n'existe pas dans notre base de donnees</span>";
$i++;
}
}
//Vérification de l'email 2/2
if(empty($Email))
{
$t"erreurLoginVide"] = "<span class='error'>Le champ login est vide !</span>";
$i++;
}
//Vérification du password
if(empty($pass))
{
$t"erreurPasswordVide"] = "<span class='error'>Le champ password est vide !</span>";
$i++;
}
$connexion = mysql_query('SELECT membres_id,membres_email, membres_password FROM membres WHERE 
membres_email = "'.$Email.'" AND membres_password ="'.$pass.'"');
$connexion_du_membre = mysql_fetch_assoc($connexion);
$req_pass = md5($connexion_du_membre'membres_password']);
$req_login = $connexion_du_membre'membres_email'];
if(!empty($pass))
{
if($req_pass != $pass)
{
$t"erreurPasswordIncorrect"] = "<span class='error'>Le mot de passe est incorrect</span>";
$i++;
}
}
if ($i == 0) // Si i est vide, il n'y a pas d'erreur
{
$t"erreur"] = "no";
$t"retour"] = "<span class='error'><p>Vous êtes bien <strong>connecté</strong> !</p></span>";
}
echo json_encode($t);
?>

Vous voyez ou est mon erreur, là, je sèche...
Merci, d'avance.

Ça doit être à cause du md5, si c'est vide, il va quand même encoder :)

Vous avez raison, cela venait bien du md5, mais comment régler ce problème ?
Les mots de passe sont tous cryptés en md5 dans la base de donnée.

Vous pouvez mettre votre variable $pass en dessous de cette condition ( empty($pass) )
Car si je vois bien, vous ne l'utilisez pas pour vos requêtes de dessus
Ou sinon condition ternaire

// Si $_POST'password'] n'est pas vide on encode sinon on laisse vide
$pass = (isset($_POST'password'][0])) ? md5($_POST'password']) : '';

Merci, ça fonctionne afin ! J'ai utilisé votre condition ternaire, mais ça ne fonctionnait toujours pas, j'ai donc voulus afficher ce que contenais le résultat de ma requête, j'ai donc fais :

if(!empty($pass))
{
if($req_pass != $pass)
{
// $t"erreurPasswordIncorrect"] = "<span class='error'>Le mot de passe est incorrect</span>";
$t"erreurPasswordIncorrect"] = '  <strong>Email :</strong> '.$req_login.'<br />
  <strong>Password :</strong> '.$req_pass.'<br />';
$i++;
}
}

Est ça me retourner en faite, mon mot de passe qui était crypter en md5, re-crypter en md5 par dessus...

Ce qui retourner donc :

Chaîne demandée : 098f6bcd4621d373cade4e832627b4f6 = test
Chaîne correspondante : fb469d7ef430b0baf0cab6c436e70375 <= mot de passe crypter 2 fois ^^

Le problème venait de cette variable :

$req_pass = md5($connexion_du_membre'membres_password']);

J'ai donc enlevé le md5, et ça fonctionne.

Merci beaucoup pour votre aide. :D

Bonsoir, je reviens vers vous pour un dernier problème, pour fignoler mon formulaire, il me manque 3 listes déroulantes et 2 boutons radio. J'ai beau essayer divers méthode, rien ne marche.

<select required="true" name="jour" id="jour">
<option value="1">1</option>
...]
</select>
<select required="true" name="mois" id="mois">
<option value="01">Janvier</option>
...]
</select>
<select required="true" name="annee" id="annee">
<option value="2000">2000</option>
...]
</select>

 <label for="sexe">Sexe :</label>
       <input type="radio" name="sexe" id="sexe" value="homme" /> <img src="images/homme.gif" />  <strong>Homme</strong>
       <input type="radio" name="sexe" id="sexe" value="femme" /> <img src="images/femme.gif" />  <strong>Femme</strong><br />

Merci, d'avance. :)