8719 sujets

Développement web côté serveur, CMS

Bonjour,

Pour mes formulaires j'utilise (comme il est recommandé) un traitement des infos via PHP avec un traitement en javascript pour les utilisateurs. J'ai récemment dû mettre en place un champ "déjà inscrit", qui va chercher dans la BDD si il existe l'adresse mail que l'on vient de taper. Bien sûr, j'ai mis les vérifications PHP et javacsript pour la syntaxe, etc. Mais lorsque l'adresse n'est pas reconnu dans la BBD au lieu de m'afficher une fenêtre d'info javascript, ça change de page pour arriver sur une page blanche avec le message que j'ai paramétré en PHP. Pour pallier à cela j'ai trouvé le moyen de récupérer l'information résultante pour la mettre dans une fenêtre d'info et sans changer de page. Le problème c'est que ma page remonte brutalement vers le header, sans afficher la fenêtre d'info. Étonnamment, si je test plusieurs fois, le problème ne survient que la première fois. Le reste du temps, j'ai bien la fenêtre d'info. D'où cela peut-il bien venir ?

Voici ce que j'ai fait :

en PHP (si le mail n'est pas trouvé dans la BDD ça affiche un message) :
Code :Sélectionner tout - Visualiser dans une fenêtre à part

...
}else {// envoi une variable au javascript qui la récupère et l'interpète
	echo '
	<script language="javascript" type="text/javascript">
	var affichmessphp = 1;
	</script>
	';
}
...


En javascript (le message PHP est récupéré) :

Code :Sélectionner tout - Visualiser dans une fenêtre à part

...
if(affichmessphp == 1) {
	 alert("Cette adresse n'existe pas");
	 document.formdejainscrit.courriel.focus();
	 return false;
}
...


Je ne trouve rien sur internet pour le moment, ni dans mes livres technique. Je remercie par avance gracieusement les personnes qui pourrons m'aider.
Modifié par lavoignat94 (04 Apr 2014 - 18:09)
Pour autant que je comprenne la situation, c'est un problème côté php:
Si vous envoyez votre formulaire au serveur, ce qui va s'afficher est génèré comme toujours par le php, le Javascript étant là pour effectuer des actions supplémentaires côté client.
Si vous regardez le code php, vous devez sans doute avoir un if... else... qui ne génère pas votre boîte de dialogue dans le cas où l'adresse n'est pas dans la BDD, mais simplement l'ordre JavaScript, du genre:

     if($result == "...") {
          [i]/* génèration de la boîte de dialogue */[/i]
     }
     else {
          [i]/* génèration du code JavaScript  */[/i]
     }

Pour vous aider davantage dans l'identification du bug, il faudrait voir un peu plus le contenu de code php.
Je vous remercie pour votre réponse.

Effectivement, il y a un ..if...else... dans le PHP. Si l'adresse est trouvé dans la BDD, on, change de page, on arrive sur le site complet. Si l'adresse n'est pas trouvé, je souhaite juste que ça affiche un message, mais que l'on reste sur la même page et sans mouvement de scroll, comme les messages qui s'affichent en javacsript quand on rempli mal un champ de formulaire.

Voici une partie de mon code PHP :


...
if($mail[0]>=1) {//si le mail existe dans la BDD
$_SESSION['connected'] = 1;
header('Location: pagearrive.html');
header('HTTP/1.1 301 Moved Permanently');
header('Status: 301 Moved Permanently');
exit();
}else {
	
	// ici je veux faire apparaitre la fenêtre avec le message d'information
}
...

Mais je croyais qu'il n'était pas possible de générer une boite de dialogue en PHP ?
Enfin, c'est ce que j'ai cru comprendre sur internet.

Voici les exemples que je vois. On est obligé d'intégrer du javascript dans le PHP dans un echo :

<?php

echo '<script type="text/javascript">'
 . 'alert("Erreur : '.$erreur.'");'
 . '</script>';

?>

Malheureusement, cette méthode m'affiche une page blanche et avec la boîte de dialogue. Je cherche à afficher directement la boîte de dialogue. C'est pour cela, que je cherche à comprendre pourquoi le PHP me fait changer de page.

C'est pourquoi j'ai essayé cette methode (expliqué dans mon premier post) :

...
}else {// envoi une variable au javascript qui la récupère et l'interpète
	echo '
	<script language="javascript" type="text/javascript">
	var affichmessphp = 1;
	</script>
	';
}
...

Je créé une variable javscript dans mon PHP que je récupère et traite plus bas dans mon javascript. Cette méthode à eu pour amélioration de ne pas me faire changer de page, mais lors du premier test, le scroll remonte au header et je n'ai pas de boite de dialogue. Si je reste sur la page et que je continue mes tests, tout les autres qui suivent m'afficheront correctement ma boite de dialogue.

Avez-vous une autre méthode ?

Merci par avance pour votre réponse.
Modifié par lavoignat94 (07 Apr 2014 - 10:45)
Bonjour,

En fait la méthode la plus simple pour effectuer tout cela, est le traitement sur une seule page en PHP. Il faut en plus créer une méthode qui à l'aide d'AJAX va effectuer la vérification en asynchrone.

Je ne sais pas si c'est très explicite.

Concrètement :

En php, tu vérifie ton formulaire, et s'il y a une erreur, tu l'affiche.
En JS (jQuery pour plus de facilitée), tu vérifies pendant que l'utilisateur est entrain de taper son adresse mail, ou quand il quitte le champ à remplir.
Merci totopsy pour ton aide.

Dans mon cas, il faut que ça réagisse à un bouton. Ce qui fonctionne. C'est l'affichage de la boîte de dialogue avec le message "l'adresse mail n'existe pas dans la BDD" qui me pose problème. Comme expliqué précédemment, j'ai essayé 2 méthodes et à chaque fois je me retrouve avec un bug. En fait je n'arrive pas à faire passer l'action qui correspond au ELSE de ma condition dans une boîte de dialogue, tout comme je l'ai fait pour les vérifications basique des champs de formulaire en javascript. L'idéale serait de pouvoir afficher cette boîte de dialogue juste avec le PHP, mais apparemment c'est impossible.

En cherchant, j'ai trouvé ce lien : http://www.grafikart.fr/tutoriels/jquery/json-77
C'est de ça dont tu parle ?

merci beaucoup,
Modifié par lavoignat94 (08 Apr 2014 - 10:13)
J'ai regarder le tutoriel sur l'Ajax, mais je pense que ce que j'essais de faire demande moins de technique. Je cherche juste à afficher un message sur la même page que le formulaire avec du PHP ou du javascript intégré au PHP. Ma problématique c'est que les messages PHP sont automatiquement écrit sur une page vide. J'ai déjà ma condition PHP, il me reste juste à faire en sorte que le message PHP apparaisse dans une bulle ou un pop'in, ou à côté du formulaire...
Bonjour !

Je n'ai peut-être pas tout parfaitement suivi, mais il me semble que tu souhaites juste générer une variable par php, qui soit ensuite interprétée par le navigateur pour afficher une boite de dialogue ?

Dans ce cas le mieux n'est il pas de générer un hidden comme ceci
<input type='hidden' id='alert' value='1'>

et ensuite d'aller lire cette valeur avec une fonction qui se déclencherait une fois la page chargée comme ceci
<body onload="dial()">

fonction javascript dial() qui récupererait la valeur de ce champ caché (document.getElementById('alert').value;) pour afficher ou non une boite de dial ?

Sinon ta solution de base me semble valable mais sans voir ton code javascript dans son intégralité, on peut difficilement éliminer des cause de bug.

En espérant ne pas être totalement dans les choux, c'est mon premier coup de main Smiley murf
Modifié par Brizio (07 May 2014 - 15:58)
Je te remercie Brizio, ton aide est très appréciable.

Je vais regarder ce que ça donne, mais entre temps j'ai avancé sur mon problème d'une autre manière :

dans le PHP :

...
if($mail[0]>=1) {//si le mail existe dans la BDD
$_SESSION['connected'] = 1;
header('Location: xxxxxxxxxxxxxxxxxxxx.html');
header('HTTP/1.1 301 Moved Permanently');
header('Status: 301 Moved Permanently');
exit();
}else {// envoi une variable au javascript qui la récupère et l'interpète
	$messagephp = 1;
}
...


Dans le javascript :


...
var affichmessphp = <?php echo $messagephp ?>

	 if(affichmessphp == 1) {
	   	alert("Cette adresse n'existe pas");
	   	document.formdejainscrit.ch_dejainscrit.focus();
	   	return false;
	  }
...


J'ai mon message javascript qui apparaît bien, néanmoins, il reste un petit bug. Si on test le champ 1 ou plusieurs fois d'affilé, la première fois rien ne s'affiche et ça me scroll le site en header. C'est étrange cet effet.

Avez-vous une idée ?

merci,