Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2011, 23h17   #1
Invité de passage
 
Lionel
Inscription : février 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Lionel

Informations forums :
Inscription : février 2011
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à lion24
Par défaut Vérifier que l'utilisateur et l'email n'est pas prise

Bonsoir,

Voilà je sèche un peu,
J'aimerai bien que si la personne entre un nom d'utilisateur et une émail déjà utilisée, que php indique à coté de chacun des champs à l'utilisateur que nom d'utilisateur et l'email est déjà prise.

J'ai fais le test en ne prenant en compte que le nom et ça marche très bien, mais je ne vois pas comment faire en tenant compte en plus de l'émail.


Voici mes codes:
La partie index.php contenant le formulaire,
Je n'ai ici repris que le code jQuery ainsi que la requète AJAX
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
$(function(){
	$("#formid").submit(function(){
				nom1 = $(this).find("input[name=nom]").val();
				email1 = $(this).find("input[name=email]").val();
				$.post("test.php",{nom : nom1, email : email1}, function(data){
					if(data == '1'){
						$("#nomID").next("#erreur").empty().append().text("Le nom est déja utilisé");
					}
					else{
						$("#nomID").next("#erreur").hide();
					}
 
				});
				return false;
			});
		});
 
<!--Le FORMULAIRE-->
<form method="post" action="#" id="formid">
Nom : <input type="text" name="nom" id="nomID" /><span id="erreur"></span><br />
email : <input type="text" name="email" id="email"/><span id="erreur"></span><br />
<input type="submit" value="Envoyer" />
</form>
Et le fichier test.php qui contient la requète SQL :
Ici la requête va envoyer un nombre si il est > 0 : Alors l'utilisateur existe.
J'ai essayé de faire une autre requête dans la même logique pour l'email mais ça marche pas.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<?php
 
function redirige($url)
{
   die('<meta http-equiv="refresh" content="0;URL='.$url.'">');
}
 
	if(!isset($_POST) && empty($_POST['nom']) && empty($_POST['email'])){
		redirige('index.php');
	}
	else{
		extract($_POST);
 
		include "connect.php";
		$sql = $DB->query("SELECT COUNT(nom) AS '$nom' FROM info WHERE nom = '$nom'");
		$nb = $sql->fetchColumn();
 
		if($nb > 0){
			echo '1';
		}
	}
?>
lion24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 23h20   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Montre nous ce que tu avais fait.

Au passage, $_POST est toujours défini.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 23h30   #3
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Sur le principe je me demande si c'est une bonne idée car cela pourrait aussi permettre de trouver des adresses email valides...
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 08h41   #4
Invité de passage
 
Lionel
Inscription : février 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Lionel

Informations forums :
Inscription : février 2011
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à lion24
Salut,

Je suis d'accord pour le principe des adresses émail valides.
Mais je suis obligé : 2 utilisateurs différents ne peuvent pas s'inscrire avec 2 emails identiques !!

@sabotage Vous avez là le code essentiel, le reste n'à pas beaucoup d'importance il s'agit des balises html head rien de spécial...

Je veux simplement savoir comment indiqué à l'utilisateur que :
- Son nom est déjà pris => ça, ça marche !
- Son email est déjà pris => J'ai essayé de faire un deuxième requête mais ça ne marche pas et ça ralenti tout.
- Son émail et son nom d'utilisateur est déjà pris et l'indiqué dans la page index à coté des champs respectifs. Un peu comme quand on s'inscrit sur un forum et que l'on rentre un nom d'utilisateur ET/OU une émail et qu'il nous indique qu'il(elle) est déjà pris(e)

J'espère avoir été assez clair...


Bonne journée
lion24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h42   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu fais la meme chose en remplacant "nom" par "email" ; je ne vois pas ce qui te bloque.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h11   #6
Invité de passage
 
Lionel
Inscription : février 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Lionel

Informations forums :
Inscription : février 2011
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à lion24
Ok je vais réessayer...
Mais dans le cas ou le nom d'utilisateur ET l'email sont déjà pris
Je fais comment ?

C'est ça mon problème...
lion24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h35   #7
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Citation:
Tu fais la meme chose en remplacant "nom" par "email"
Puis tu modifie ton js afin de gérer l'affichage pour l'email.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 16h38   #8
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Le problème c'est que tu ne nous dis pas à quel endroit tu bloque...

Si c'est pour le retour de la requête ajax tu peux faire envoyer par exemple 1 si le login est déjà pris, 2 si le mail est déjà pris et 3 si les deux sont pris.
Et en fonction du retour tu fais afficher les erreurs correspondantes.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 23h20   #9
Invité de passage
 
Lionel
Inscription : février 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Lionel

Informations forums :
Inscription : février 2011
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à lion24
Oui voilà ABCIWEB,

C'est exactement ce que je recherche...
Alors à ce moment là je devrais faire plusieurs requètes SQL vers le serveur.

La question que je me pose c'est quelle requète formuler pour savoir que le nom d'utilisateur ET L'adresse mail est déjà prise...

J'ai essayé

Code :
1
2
 
SELECT COUNT(nom,email) AS '$nom','$email' WHERE nom='$nom' AND email='$email'
Mais cela ne marche pas..

Je suis débutant en SQL donc je pose peut-être une bête question mais comprenez-moi.

Merci à tous
lion24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 07h31   #10
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 708
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 708
Points : 3 278
Points : 3 278
Salut

Ce n'est pas très loin :
Code sql :
1
2
3
4
5
 
SELECT COUNT(*) AS total
FROM info
WHERE nom = '$nom'
AND email = '$email'
Mais apparemment tu utiliserais PDO, du coup, faire une requête préparée serait largement mieux (voir indispensable pour le coté sécurité) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
$nom = $_POST['nom'];
$email = $_POST['email'];
//
$sth = $dbh->prepare('SELECT COUNT(*) AS total
FROM info
WHERE nom = :nom
AND email = :email');
$sth->bindValue(':nom', $nom, PDO::PARAM_STR);
$sth->bindValue(':email', $email, PDO::PARAM_STR);
$sth->execute();
$info = $sth->fetch();
//
if ((int)$info['total'] > 0) {
    // Identification correcte
    ... etc ...
}
else {
    // Erreur : Aucune personne correspondante
    ... etc ...
}
Petite parenthèse au passage.
Si tu compte faire cette vérification uniquement via Ajax, et bien il faut bien avoir en tête que l'Ajax c'est avant tout du Javascript.
Et bien un utilisateur quelque peu mal intentionné aura aucun mal à détecter ça, et il lui suffit de désactiver coté navigateur JS, et aucune vérification sera faite.
Donc quelque part, ça oblige de refaire la même vérif après validation du formulaire.
C'est alors à ce demander si le faire en Ajax vaut le coup.


Autre parenthèse.
Les redirections par meta/refresh, ça fait des années maintenant qu'on ne cesse de dire que c'est largement dépassé, franchement inutile vu que Php permet de faire ça de manière bien plus optimisée et simple.
Fonction header()
Code :
1
2
header('Location: url_de_la_page.php');
exit();
Le seul point à respecter, c'est qu'il ne faut pas envoyer de contenu (pas de echo, ni de Html, même pas un espace/saut de ligne) avant d'appeler cette fonction.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 16h38   #11
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Remarque que tu pourrais aussi ne faire qu'une requête à la place de trois (si 'ai bien compris ton problème).
Par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$pseudo = $_POST['peudo'];
$mail = $_POST['mail'];
 
$SQL = "SELECT pseudo, mail FROM membres WHERE pseudo = '".mysql_real_escape_string($pseudo)."' OR mail = '".mysql_real_escape_string($mail)."'";
 
$Result = mysql_query($SQL);
 
$pseudo_nb = null;
$mail_nb = null;
 
while ($assoc = mysql_fetch_assoc($Result))
{
if ($assoc['pseudo'] ==  $pseudo) $pseudo_nb++;
if ($assoc['mail'] ==  $mail) $mail_nb++;
}
 
$retour = 0;
 
if (isset($pseudo_nb)) $retour = 1;
if (isset($mail_nb)) $retour = 2;
if (isset($pseudo_nb,$mail_nb)) $retour = 3;
 
echo $retour;
 
// 0 si rien n'est utilisé
// 1 si pseudo est utilisé
// 2 si mail est utilisé
// 3 si pseudo et mail sont utilisés
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 16h49   #12
Invité de passage
 
Lionel
Inscription : février 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Lionel

Informations forums :
Inscription : février 2011
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à lion24
Salut,

Merci beaucoup RunCodePhp et ABCIWEB,
C'est vraiment les réponses que j'attendais

Quand à ce que tu disais RunCodePhp c'est vrai qu'au niveau sécurité c'est pas le top. Je vais donc aussi faire une vérification au niveau du php...


Merci encore les gars.


Et A+
lion24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 16h21   #13
Invité de passage
 
Lionel
Inscription : février 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Lionel

Informations forums :
Inscription : février 2011
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à lion24
Je viens de tester les bouts de code et ça fonctionne nickel

Encore merci...
lion24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h49.


 
 
 
 
Partenaires

Hébergement Web