GlouGlou Posté 3 Août 2006 Posté 3 Août 2006 Bonjour, J'ai installé une popup en layer sur ma page d'accueil. Ce layer accueil un formulaire de sondage. Quand on clique sur le bouton envoyer, comme tout bon formulaire, il remplit son office. Sauf que je voudrais en plus que la visibilité du layer passe en hidden ou none lors de la validation du form. Pour ce faire, j'ai mis: onClick="closemenu();return(false)" dans le code du bouton d'envoi ... et là, le formulaire n'est plus envoyé bien que mon layer disparaisse. Comment m'en sortir ? Merci d'avance de votre aide.
captain_torche Posté 3 Août 2006 Posté 3 Août 2006 Lorsque tu valides ton formulaire, la page est rechargée. Il te suffit de mettre, lors de l'insertion des données dans ta base, une valeur de cookie (par exemple), que tu vérifierais avant l'affichage de la div, pour ne pas l'afficher une seconde fois. PS : tu travailles avec dream ?
GlouGlou Posté 3 Août 2006 Auteur Posté 3 Août 2006 oui, je travaille avec dream. C'est une bonne idée en théorie, mais concretement: le pb c'est aussi le bout de javascript que je ne sais pas trop manipuler sauf dans la circonstance onclick .
captain_torche Posté 3 Août 2006 Posté 3 Août 2006 Comment fais-tu, actuellement, pour traiter les données de ton formulaire ?
GlouGlou Posté 3 Août 2006 Auteur Posté 3 Août 2006 Dans dream, j'ai créé mon form et j'utilise le comportement d'update des datas. La partie form marche bien, saufque je choisis entre l'envoi du form ou la disparition du layer qui l'accueil.
captain_torche Posté 3 Août 2006 Posté 3 Août 2006 Mais comment sont enregistrées les données du formulaire ? Et où ?
GlouGlou Posté 3 Août 2006 Auteur Posté 3 Août 2006 Dans la base mysql. Le form : <form action="<?php echo $editFormAction; ?>" id="form1" name="form1" method="POST"> et en haut de page: <?php require_once('Connections/galeries.php'); ?><?phpfunction GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue;}$editFormAction = $_SERVER['PHP_SELF'];if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);}if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {$vote=GetSQLValueString($_POST['radiobutton'], "int");if ($vote==1) $votants= GetSQLValueString($_POST['val1'], "int"); else $votants= GetSQLValueString($_POST['val2'], "int");$votants= $votants+1;$objetold= GetSQLValueString($_POST['raison'], "text");if ($vote==1) $lavaleur=$objetold;else { $objetnew= GetSQLValueString($_POST['objet'], "text"); $lavaleur= $objetnew.$objetold;}$updateSQL = sprintf("UPDATE sondage SET votants=$votants, autres=$lavaleur WHERE id_sondage=%s", GetSQLValueString($_POST['radiobutton'], "int")); mysql_select_db($database_galeries, $galeries); $Result1 = mysql_query($updateSQL, $galeries) or die(mysql_error());}?> Le javascript pour masquer le layer: function closemenu() { if(document.getElementById) document.getElementById("sondage").style.visibility = 'hidden'; } Voili !
captain_torche Posté 3 Août 2006 Posté 3 Août 2006 Donc, c'est le PHP qui gérera l'ajout de cookie : après la dernière ligne ($Result1), ajoute : setcookie('formulaire', '1'); Cela va créer un cookie nommé 'formulaire', dont la valeur est 1. Comme on ne précise pas de temps de validité, il sera valide toute la session (jusqu'à ce que l'utilisateur ferme son navigateur). Ajoute ensuite, de manière à entourer ton layer, le code suivant : <?phpif(!isset($_COOKIE['formulaire'])) {?>Ici, le code de ton layer<?php}?> Cela n'affiche le layer (et le formulaire associé) que si le cookie n'existe pas. Donc, une fois qu'on a validé le formulaire, il ne réapparaîtra plus.
GlouGlou Posté 3 Août 2006 Auteur Posté 3 Août 2006 Je viens de tester. La page se comporte comme si elle ne se rechargeait pas et donc le layer reste affiché. Et pourtant, elle se recharge effectivement ... arf !! Par contre, si pars de cette page et je reviens, le layer a bien disparu, donc le test de cookie fonctionne la seconde fois. Le problème est donc maintenant dans l'ordre d'execution des instructions pour arriver au but...
captain_torche Posté 3 Août 2006 Posté 3 Août 2006 Bon, on va faire du bidouillage Au tout debut de ton code php, ajoute : $form_valide = false; juste après setcookie, ajoute : setcookie('formulaire', '1');$form_valide = true; remplace la ligne testant la présence du cookie par : if(!isset($_COOKIE['formulaire']) || !$form_valide) {
GlouGlou Posté 3 Août 2006 Auteur Posté 3 Août 2006 Je te remercie beaucoup de ton aide rapide ! Mais là encore, ça passe pas: le problème viens sans doute de l'enchainement du code, aussi, je te met ici toute la page (un peu néttoyée quand même ) ;-) <?php require_once('Connections/galeries.php'); ?><?php$form_valide = false;function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue;}$editFormAction = $_SERVER['PHP_SELF'];if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);}if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {$vote=GetSQLValueString($_POST['radiobutton'], "int");if ($vote==1) $votants= GetSQLValueString($_POST['val1'], "int"); else $votants= GetSQLValueString($_POST['val2'], "int");$votants= $votants+1;$objetold= GetSQLValueString($_POST['raison'], "text");if ($vote==1) $lavaleur=$objetold;else { $objetnew= GetSQLValueString($_POST['objet'], "text"); $lavaleur= $objetnew.$objetold;}$updateSQL = sprintf("UPDATE sondage SET votants=$votants, autres=$lavaleur WHERE id_sondage=%s", GetSQLValueString($_POST['radiobutton'], "int")); mysql_select_db($database_galeries, $galeries); $Result1 = mysql_query($updateSQL, $galeries) or die(mysql_error());setcookie('formulaire', '1');$form_valide = true;}?><? session_start(); if (!isset($_SESSION["cart"])) {$_SESSION["cart"] = NULL;} $itemcount = count($_SESSION["cart"]);?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Titre</title><link href="newstyle.css" rel="stylesheet" type="text/css"><script type="text/javascript" src="general.js"></script><script language="JavaScript" type="text/JavaScript">function closemenu() { if(document.getElementById) document.getElementById("sondage").style.visibility = 'hidden'; } <!--function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}}//--></script></head><body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="MM_preloadImages('ima/etoile1.gif')"><? $page="index";?><?php if(!isset($_COOKIE['formulaire']) || !$form_valide) {?><div id="sondage"><a href="#" onClick="closemenu();return(false)"><img src="ima/close.gif" width="22" height="21" border="0" /></a> <h5>Votre opinion compte !</h5> <?mysql_select_db($database_galeries, $galeries);$query_Recordset1 = "SELECT sondage.votants FROM sondage WHERE sondage.id_sondage=1";$Recordset1 = mysql_query($query_Recordset1, $galeries) or die(mysql_error());$row_Recordset1 = mysql_fetch_assoc($Recordset1);$totalRows_Recordset1 = mysql_num_rows($Recordset1);mysql_select_db($database_galeries, $galeries);$query_Recordset2 = "SELECT sondage.votants, sondage.autres FROM sondage WHERE sondage.id_sondage=2";$Recordset2 = mysql_query($query_Recordset2, $galeries) or die(mysql_error());$row_Recordset2 = mysql_fetch_assoc($Recordset2);$totalRows_Recordset2 = mysql_num_rows($Recordset2);?> <form action="<?php echo $editFormAction; ?>" id="form1" name="form1" method="POST"> <label> <input type="radio" name="radiobutton" value="1" /><input name="val1" type="hidden" value="<?php echo $row_Recordset1['votants']; ?>" /> C'est ce que je recherche !</label><br/><label> <input type="radio" name="radiobutton" value="2" /><input name="val2" type="hidden" value="<?php echo $row_Recordset2['votants']; ?>" /> Ce n'est <b>pas du tout</b> l'objet de ma recherche ...</label> <br /> <br /> <label class="saisie2">Si vous n'êtes pas au bon endroit, quel est l'objet de votre recherche: <input name="objet" type="text" class="saisie"/> <input name="raison" type="hidden" value="<?php echo $row_Recordset2['autres']; ?>" /> </label> <label><input type="hidden" name="MM_update" value="form1" > <input type="submit" name="Submit" value="Envoyer ma réponse" class="envoi"/> </label></form></div><?php}?><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="3" class="textnormrose"> <?php include("entete.inc.php");?></td> </tr> <tr> <td width="230" valign="top"> <?php include("menugauche.inc.php");?> </td> <td width="20" valign="top"><img src="ima/1.gif"></td> <td valign="top"> <?php include("accueil.inc.php");?> </td> </tr> <tr> <td height="19" colspan="3" class="textnormrose"> <?php include("pied.inc.php");?></td> </tr></table></body></html><?phpmysql_free_result($Recordset1);mysql_free_result($Recordset2);?>
captain_torche Posté 3 Août 2006 Posté 3 Août 2006 Au temps pour moi : Remplace la ligne par : if(!isset($_COOKIE['formulaire']) && !$form_valide) {
GlouGlou Posté 3 Août 2006 Auteur Posté 3 Août 2006 Captain Torche, je te dois GRAND MERCI ! ça marche au poil. Merci, merci, merci
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant