Aller au contenu

probleme hidden layer/formulaire


GlouGlou

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 .

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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'); ?>
<?php
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());
}
?>

Le javascript pour masquer le layer:

function closemenu() 
{
if(document.getElementById)
document.getElementById("sondage").style.visibility = 'hidden';
}

Voili !

Lien vers le commentaire
Partager sur d’autres sites

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 :

<?php
if(!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.

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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) {

Lien vers le commentaire
Partager sur d’autres sites

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>
<?php
mysql_free_result($Recordset1);
mysql_free_result($Recordset2);
?>

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...