afficher une alert si l'email est déja présent dans ma base

Invité
Invité n'ayant pas de compte PHPfrance

02 avr. 2010, 12:36

Bonjour a tous, alors pour commencer mon niveau en Javascript est proche du néant j'avous que j'ai le bonnet d'âne du Javascripteur!!!
Alors je bidouille mais forcément j'arrive à rien... Voila mon problème, j'ai repris un script de confirmation de champs d'un formulaire alors j'lai remis a ma sauce et ca marche nickel, sauf que j'ai une fonction PHP qui vérifie la présence de l'email dans ma base de donnée pour savoir si cet email y est déja présent et j'aimerais qu'il affiche un message type alert() s'il y est déja, alors jvous montre mon code mais rigolé pas cest du bricolage :)
Et ma question finalement serait : "que dois je mettre dans le ELSE de ma fonction PHP pour que mon javascript s'affiche en alert() ?
<script language="javascript" type="text/javascript">
<!--
function validation() 
{ 	
        var email = document.FORMULAIRE.email.value; 
		
			if (email.search(/^[A-Za-z0-9._-]+[^._-]@[A-Za-z0-9._-]+([A-Za-z0-9]+[^._-])?[.-]+[A-Za-z0-9]{2,4}$/) == -1)
			{ 
			alert ('entrez une adresse Email valide'); 
			document.FORMULAIRE.email.focus(); 
			return false; 
			}
			if(document.FORMULAIRE.password.value == "") 
			{ 
			alert ('veuillez entrer votre mot de pass'); 
			document.FORMULAIRE.password.focus(); 
			return false; 
			}
			if(document.FORMULAIRE.password_confirmation.value == "") 
			{ 
			alert ('veuillez confirmer votre mot de pass'); 
			document.FORMULAIRE.password_confirmation.focus(); 
			return false;
			}
			if(document.FORMULAIRE.password_confirmation.value != document.FORMULAIRE.password.value) 
			{ 
			alert ('le mot de passe doit être identique dans les deux champs'); 
			document.FORMULAIRE.password_confirmation.focus(); 
			return false;
			}
			if(document.FORMULAIRE.conditions_vente.checked == "") 
			{ 
			alert ('veuillez accepter nos conditions générales de vente'); 
			document.FORMULAIRE.conditions_vente.focus(); 
			return false; 
			}
			if(document.FORMULAIRE.email_existe.value == "")
			{ 
			alert ('Un compte MABOUILLE.COM existe déjà avec cet Email');
			document.FORMULAIRE.email_existe.focus();
			return false;
			}
else {return true;}
}
// -->
</script> 	  

Et là un extrais de ma fameuse fonction qui permet de dire, reagarde dans la base si ya l'email et l'inscrire ou sinon s'il y est pas alors afficher le javascript
if ($req == true)
            {
					// Vos identifiants
					$_SESSION['email'] = $email;
					$_SESSION['password'] = $password;
					$_SESSION['password_confirmation'] = $password_confirmation;
					
					$_SESSION['newsletter'] = $newsletter;
					$_SESSION['conditions_vente'] = $conditions_vente;

            	header("Location: ../../templates/pages/etape6_recapitulatif.php");
				exit();
	
			}
			else
			{
			///////////Si lemail est deja dans la base afficher un message java/////////
				?>
				<input class="infos" type="hidden" name="email_existe" />
				<?php
				
			}

Eléphanteau du PHP | 27 Messages

02 avr. 2010, 12:44

salut

une idée comme ça, car souvent on cherche à faire du complexe alors que l'on peut faire du simple

pour quoi ne pas afficher un message de ce type après avoir effectué le contrôle via PHP ?

Code : Tout sélectionner

echo "<script type='text/javascript'>alert('Mon message d\'alerte !');</script>";
sinon plus complexe, mais un contrôle ajax en temps réel serait réalisable par exemple, un truc tout simple à mettre en place
http://www.editeurjavascript.com/script ... _3_543.php
Développeur PHP à temps perdu ...
PHP Maximus CMS , un cms plus petit PHP Minimus, un cms minimaliste PHP Nanomus, un pare feu pour votre site PHP Firewall

Invité
Invité n'ayant pas de compte PHPfrance

02 avr. 2010, 15:10

Merci Maximus pour ta réponse, j'ai lus le lien que tu m'a donné mais effectivement ta première solution est celle la mieu adapté à ma situation, le seul inconvéniant est qu'au même moment ou il affiche l'alert il recharge également la page en supprimant tout les renseignement du formulaire... Alors je m'dit que peu être il devrait apparaitre dans le HEAD avec mes autre alert je sais pas trop en fait :roll: mais alors là ça se complique, houlala queee d'aventure :P

Mammouth du PHP | 661 Messages

02 avr. 2010, 16:23

Salut !...

en faite, tu as 2 solutions :
1. au rechargement de la page :
- l'internaute rempli le champ
- l'internaute valide la formulaire
- php fait les vérif
- affiche un message d'erreur au cas ou (pour l'afficher, tu peux le faire en JS ou pas ^^)

2. vérif Ajax :
- l'internaute rempli le champ
- une requete Ajax vérifi la validité du mail et en cas d'erreur affiche le message

Dans tous les cas, la première solution devra etre apliquée (vérification PHP avant d'effectuer les enregistrements) car si l'internaute désactive la JS ... bin y plus de vérif JS ^^

/* NOTA :: pour réincrémenter le formulaire aprés qu'il ai été posté ... utilises $_POST ;) */

@++

Mammouth du PHP | 672 Messages

02 avr. 2010, 16:37

Merci Maximus pour ta réponse, j'ai lus le lien que tu m'a donné mais effectivement ta première solution est celle la mieu adapté à ma situation, le seul inconvéniant est qu'au même moment ou il affiche l'alert il recharge également la page en supprimant tout les renseignement du formulaire... Alors je m'dit que peu être il devrait apparaitre dans le HEAD avec mes autre alert je sais pas trop en fait :roll: mais alors là ça se complique, houlala queee d'aventure :P
Deux solutions :
1. En PHP. Si le mail existe, tu renvoie le formulaire.
Dans ce cas, par défaut tu vas effectivmeent perdre ce qui a été rempli. Solution (très approximative, hein, c'est juste pour l'idée générale) :
echo '<input name="toto" ';
if ($email_deja_existant == true) {
   echo 'value="'.$_POST['toto'];
}
echo ' />';
2. En AJAX.
Tu trouveras sur le net des bons tutos sur AJAX...
En gros :
1. Tu crées un fichier test_mail.php qui va tester l'existence du mail, et renvoyer "existe" ou "inexistant" (par exemple).
<?php
if (mail_existe($_GET['mail'])  {
   echo "oui";
}
else {
   echo "non";
}
?>
Et la page que tu appelles au départ :
<form>
<script language="Javascript">
function TestMail () {
	function GetMail(ajax) {
	if (ajax.readyState == 4) {
		err = ajax.responseText;
		if (err != 'oui')
				alert("le mail existe déjà");
		}
	}

	var mail = document.getElementById("input_mail").value;
	var xhr_object = null;
	if (window.XMLHttpRequest) { // FIREFOX
		xhr_object = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) { // IE
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
		return (false);

	xhr_object.open("GET", "test2.php?mail="+mail, false);
	xhr_object.send(null);
	xhr_object.onreadystatechange = GetMail(xhr_object);
}

</script>
<input type="text" name="mail" id="input_mail" />
<input type="button" value="tester mail" onclick="TestMail();" />
</form>

ViPHP
ViPHP | 5462 Messages

02 avr. 2010, 16:42

[hs]
juste pour être tatillon

Code : Tout sélectionner

else if (window.ActiveXObject) { // IE
plutôt mettre IE < 7, parce que a partir d'IE7 il est comme les autre il utilise XMLHttpRequest. Voilou ca évite les confusions et les fausse rumeur :wink:
[/hs]

devlop78
Invité n'ayant pas de compte PHPfrance

03 avr. 2010, 03:14

AhAh IE se normaliserait-il avec le temps :shock: :mrgreen:

Invité
Invité n'ayant pas de compte PHPfrance

04 avr. 2010, 14:24

Merci a tous pour votre aide c'est top :D

Mammouth du PHP | 672 Messages

06 avr. 2010, 09:10

[hs]
juste pour être tatillon

Code : Tout sélectionner

else if (window.ActiveXObject) { // IE
plutôt mettre IE < 7, parce que a partir d'IE7 il est comme les autre il utilise XMLHttpRequest. Voilou ca évite les confusions et les fausse rumeur :wink:
[/hs]
:oops:
C'est une recopie rapide d'un vieux code (pas top, d'ailleurs). Je n'ai pas pensé à le mettre à jour...

L'intérêt principal de ce code, à mon avis, est d'illustrer le fonctionnement d'AJAX. Pour une utilisation régulière, il vaut mieux utiliser une bibliothèque JS (jQuery, par exemple)

ViPHP
ViPHP | 5462 Messages

06 avr. 2010, 10:00

pas soucis, mais je trouve comme toi que c'est bien aussi de montrer comment marche les choses, et ne pas être dépendant de framework :wink:

devlop78
Invité n'ayant pas de compte PHPfrance

06 avr. 2010, 15:53

pareil pour le moment je travail avec le moins de framework possible (bon ok j'ai utilisé shadowbox mais ça urgeait lol). En php c'est pareil je préfère faire mon propre système et faire des conneries, ça me permet de découvrir les failles, les machins les bidules. Après, en production dans une entreprise, j'utiliserai surement un framework (symfonie par exemple) mais au moins je saurai un minimum ce qu'il a dans le ventre.