afficher message d'erreur pour un login

Eléphanteau du PHP | 37 Messages

18 févr. 2008, 18:39

Bonjour,

je vérifie dans mon formulaire php si le login existe déjà dans la base de données avec mysql_num_rows, mais je voudrais afficher le résultat(existe ou n'existe pas) à coté de mon champ input du login.

Je sais qu'il faut utiliser un span à coté du input du login, mais je n'arrive vraiment pas à voir comment il faut faire pour lier la requete php et l'affichage javascript

En gros :

Login resultat
marc Ce login existe deja dans la base.

d0m
Mammouth du PHP | 1141 Messages

18 févr. 2008, 20:17

Pourquoi le faire en javascript?

Tu peux tout simplement rajouter un message d'erreur dans la page, visble que si on vient de soumettre le formulaireet que le login existe déjà :
<INPUT TYPE="text">
<?php if(isset($_POST['valider']) && login_existe_deja){?>
<SPAN>Ce login existe deja</SPAN>
<?php }?>
<INPUT TYPE="submit" NAME="valider">
en faisant le test sur les logins de la base avant.

Eléphant du PHP | 99 Messages

18 févr. 2008, 22:38

Je pense que c'est parce qu'il veut utiliser un script du style ajax.

Essaye ça:

Fichier HTML
<html>
<head>
<title>Hello World Ajax</title>
<script type="text/javascript" src="monScript.js"></script>
</head>
<body>
<input type="text" id="username" />
<span id="resultat">KO</span>
</body>
</html>
Ficher JS
function checkUsername() {
// Récupération du pseudo
var username = document.getElementById('username').value;
// Chargerment d'Ajax (remplace la ligne pour rendre le script crossbrowser)
var xhr = new XMLHTTPRequest();
// Création & envoi de la requête
xhr.open('GET','ajax.php?action=checkusername&username='+escape(username),false);
xhr.send(null);
// Vérification du résultat
if(xhr.responseText!='0') {
document.getElementById('resultat').innerHTML = 'KO';
} else {
document.getElementById('resultat').innerHTML = 'OK';
}
}

// Et c'est partis pour le timer du siècle
setInterval('checkUsername();',500);
Fichier PHP
<?php
// Tu charge ta connexion à MySQL
include('mysql.php');

switch($_GET['action']) {
// Si l'action est de vérifier le pseudo...
case 'checkusername':
// On affiche le nombre de membres avec ce pseudo (le +0 sert à afficher 0 s'il n'y en a aucun, au lieu d'une chaine vide)
echo mysql_num_rows('SELECT `id` FROM `membres` WHERE `username`=\''.mysql_real_escape_string($_GET['username']).'\'')+0;
break;
}

// Bon...c'est pas vraiment la peine de mettre cette ligne, mais c'est toujours mieux. Au cas où, on va dire.
die();
?>
Désolé pour l'indentation. Un problème de phpBB que j'ai la flemme de contourner... =_='[/b]

Eléphanteau du PHP | 37 Messages

20 févr. 2008, 01:04

merci pour ta réponse Arcanis, j'ai deja fait un truc de ce style en ajax pour un login une fois.
en fait je ne veux pas tester que le login existe deja mais un nom mais bon ça revient au même.
je serais plutot tenter par la methode des submit de d0m mais j'ai testé et ça fonctionne pas bien.

dans le code, j'ai fait $login_existe_deja=mysql_num_rows($requete) mais quand j'execute , meme si le login est inexistant ça me retourne login existe deja.j'ai essayé de changer le test de toute sorte de façon en mettant 0 etc, ça fonctionne pas bien.

Code : Tout sélectionner

<INPUT TYPE="text"> <?php if(isset($_POST['valider']) && $login_existe_deja==1){?> <SPAN>Ce login existe deja</SPAN> <?php }?> <INPUT TYPE="submit" NAME="valider">

Eléphant du PHP | 99 Messages

20 févr. 2008, 13:19

Essaye en remplacant
$login_existe_deja=mysql_num_rows($requete);
par
$login_existe_deja=mysql_num_rows($requete)+0;
et le test ==1 par !==0

Eléphanteau du PHP | 37 Messages

20 févr. 2008, 20:48

ben j'ai testé et ça fonctionne pas.ça m'affiche que le login existe deja meme lorsqu'il n'existe pas dans la base.meme avec un $login_existe_deja==1 ou !=0 c'est la meme chose.

d0m
Mammouth du PHP | 1141 Messages

21 févr. 2008, 09:28

Si les tests
if($login_existe_deja==1)
//ou 
if($login_existe_deja!=0)
c'est que $login_existe_deja vaut forcement 0
et donc par égalité que le nombre de ligne de ton résultat vaut 0.

Essaie d'afficher le résultat de ta requête (pas seulement le nombre de ligne).

Le problème vient surement du fait que la requête SQL ne renvoie jamais de résultat.
Affiche la et teste là directement dans PHPMyAdmin (ou autre).