8791 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

J'ai un formulaire de checkbox qui se trouve sur toutes les pages de mon site, les checkbox cochées par l'utilisateur le reste lors de la soumission du formulaire mais pas lorsqu'on recharge la page ou lorsque l'on clique sur un lien, le but étant de pouvoir modifier les choix à tout moment. J'ai essayé en utilisant une session mais je n'arrive pas à m'en servir, comment doit se présenter une telle session?

Merci de votre aide...

Ludo

Voici le formulaire que j'utilise:

<? error_reporting(E_ALL ^ E_NOTICE);
if($_POST["mon_champ"]) { ?>
   Vous avez choisi comme option -
   <b>
   <?
   for ($i = 0; $i < count($_POST["mon_champ"]); $i++)
      echo $_POST["mon_champ"][$i]." - ";
   ?>
   </b><br><br>
<? } 

function test($choix) {
   for ($i = 0; $i < count($_POST["mon_champ"]); $i++)
      if($choix==$_POST["mon_champ"][$i])
         return true;
}
?>

<FORM method="POST">
   <input type="checkbox" name="mon_champ[]"
      <? if(test("1")) echo "CHECKED"; ?>
      value="1">Option 1<br>
   <input type="checkbox" name="mon_champ[]"
      <? if(test("2")) echo "CHECKED"; ?>
      value="2">Option 2<br>
   <input type="checkbox" name="mon_champ[]"
      <? if(test("3")) echo "CHECKED"; ?>
      value="3">Option 3<br>
   <input type="Submit" value="OK">
</FORM>
Bonjour,

Oui une variable de session peut être une bonne solution. Elle se déclare en haut de ta page avec :


<?php
session_start();
?>


Puis s'utilise avec cette syntaxe :

<?php
$_SESSION['ma_var']=$ma_var;
?>

Ainsi tu pourras récupérer tes variables d'une page à l'autre sans les transférer, cependant cela demande une grande prudence dans la gestion de celles-ci. Ne pas oublier de supprimer ou vider tes variables de session, lors d'un INSERT ou UPDATE sql par exemple.

zaz
Modifié par zzzazzz (03 Dec 2007 - 11:17)
zzzazzz a écrit :
Ne pas oublier de supprimer ou vider tes variables de session, lors d'un INSERT ou UPDATE sql par exemple.
Tiens ! Pourquoi ça Smiley hein ?

Tu pourrais développer STP ?
Bien en ce qui concerne des éléments de formulaires, personnellement je vide les variables de session qui ont servi lors d'un passage Insert update ou delete. Quitte à recharger la variable de session via un select. Pour 2 raisons, si la variable n'a plus à servir, elle n'a plus à être dans la session. Et aussi pour éviter d'éventuels "parasitages" sur d'autres pages. N'étant pas un pro php, j'essaye de clarifier au moins ce que je peux contrôler Smiley smile Cela vous va comme explication ?
merci, j'ai bien essayé les sessions de cette façon et plusieurs autres façon mais sans succès, comment elle se présenterai avec mon formulaire?

on m'a conseillé de faire comme ça :


<?php
$_SESSION['choix']=implode(',',$_POST['mon_champ']);
//$_SESSION['choix'] contient donc par exemple "1,3"
?>
//Ensuite tu utilises strpos()
<input type="checkbox" name="mon_champ[]"
<? if(strpos($_SESSION['choix'],"2")===true) echo 'checked="CHECKED"'; ?>
value="2">Option 2<br>Option 2<br>


Cela n'a pas fonctinné, vous en pensez quoi?
zzzazzz a écrit :
Cela vous va comme explication ?
Oui, oui ! Personnellement je résume ça par "toujours savoir ce que l'on est en train de faire" Smiley biggol .

Sinon le test if (strpos(...) === true) ne peut pas fonctionner car celui-ci renvoie soit false soit une positition (numérique) de la chaîne de caractère trouvée Smiley cligne .

Un petit test :

page1.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Test session et formulaire - page 1 -</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="post" action="page2.php">
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"1") !== false) echo 'checked="checked"'; ?> value="1">Option 1<br>
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"2") !== false) echo 'checked="checked"'; ?> value="2">Option 2<br>
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"3") !== false) echo 'checked="checked"'; ?> value="3">Option 3<br>
	<input type="submit" value="OK">
</form>
</body>
</html>

page2.php
<?php
session_start();
$_SESSION['choix']='';
if (!empty($_POST)) {
	$_SESSION['choix'] = implode(',',$_POST['mon_champ']);
}
//print_r($_POST);
//echo "<br />session choix : ".$_SESSION['choix']."<br />";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Test session et formulaire - page 2 -</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<a href="page1.php">Retourner à la page 1</a>
</body>
</html>

A+ Smiley smile
Merci Heyoan et zzzazzz,

j'ai essayé, mais toujours le même problème, tout est bien transmis lors de la soumission du formulaire mais dès que je change de page les valeurs ne sont pas conservées... Smiley confus
Sclormu a écrit :
j'ai essayé, mais toujours le même problème, tout est bien transmis lors de la soumission du formulaire mais dès que je change de page les valeurs ne sont pas conservées... Smiley confus
Euh... tu as essayé avec page1.php et page2.php Smiley rolleyes ?

A tout hasard, les cookies sont bien activés ?
Sorry, le test avec avec page1.php et page2.php fonctionne... Smiley confus

Donc normalement je devrais pouvoir l'intégrer à mon formulaire...

Merci beaucoup... Smiley ravi

A+

Ludo...
Bon, en faite c'est la pagination qui me pose problème, ta méthode fonctionne parfaitement sauf lorque je clique sur un lien de la pagination qui me provoque l'erreur suivante:

Warning: implode() [function.implode]: Bad arguments


Je ne comprend pas pourquoi cela ne fonctionne pas avec les numéros de pagination?
Sclormu a écrit :
Je ne comprend pas pourquoi cela ne fonctionne pas avec les numéros de pagination?
Qu'est-ce que tu essayes de faire exactement ?
Bonjour'

J'ai un formulaire de recherche muliticritere sur ma page d'accueil (index.php) qui envoie les résultats de recherche sur une une autre page (recherche.php) qui comporte le même formulaire pour pouvoir modifier les critères de recherche, c'est pour cela que je souhaite conserver les checkbox cochées par l'utilisateur pour qu'il puisse les modifier. jusque là ta méthode fonctionne mais j'ai également sur la page recherche.php des numéros de pagination qui permet de voir les résultats suivant (comme sur ce forum...). Donc mon problème c'est quand je clique sur page suivante les checkbox cochées ne le sont plus. Smiley decu

En tout cas merci du temps que vous m'avez consacré...
Sclormu a écrit :
Donc mon problème c'est quand je clique sur page suivante les checkbox cochées ne le sont plus. Smiley decu
Et bien je suppose que c'est parce que tu reste sur la même page (page2.php dans mon test) qui commence par $_SESSION['choix']=''; Smiley cligne

Donc une autre solution :

page1.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Test session et formulaire - page 1 -</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="post" action="sav_checkbox.php">
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"1") !== false) echo 'checked="checked"'; ?> value="1" />Option 1<br />
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"2") !== false) echo 'checked="checked"'; ?> value="2" />Option 2<br />
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"3") !== false) echo 'checked="checked"'; ?> value="3" />Option 3<br />
	<input type="hidden" name="page_retour" value="page2.php" />
	<input type="submit" value="OK" />
</form>
</body>
</html>


page2.php
<?php
session_start();
$next = (isset($_GET['next'])) ? $_GET['next'] : 0;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Test session et formulaire - page 2 -</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<?php
if ($next > 0) echo "<p>Vous êtes sur la page $next.</p>";
?>
<form method="post" action="sav_checkbox.php">
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"1") !== false) echo 'checked="checked"'; ?> value="1" />Option 1<br />
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"2") !== false) echo 'checked="checked"'; ?> value="2" />Option 2<br />
	<input type="checkbox" name="mon_champ[]" <?php if(strpos($_SESSION['choix'],"3") !== false) echo 'checked="checked"'; ?> value="3" />Option 3<br />
	<input type="hidden" name="page_retour" value="page2.php" />
	<input type="submit" value="OK" />
</form>
<br />
<?php 
for ($n = 1; $n <= 3; $n++) {
	if ($n == $next) {
		echo "$n ";
	} else {
		echo "<a href=\"?next=$n\">$n</a> ";
	}
}
?>
<br /><br />
<a href="page1.php">Retourner à la page de lancement</a>
</body>
</html>


sav_checkbox.php
<?php
session_start();
$_SESSION['choix']='';
if (!empty($_POST['mon_champ'])) {
	$_SESSION['choix'] = implode(',',$_POST['mon_champ']);
}

$pages_retour = array('page1.php', 'page2.php'); // liste des pages retour possibles
$page_retour = (isset($_POST['page_retour'])) ? $_POST['page_retour'] : '';
if(in_array($page_retour, $pages_retour, true)) {
	header("Location: $page_retour");
	exit;
} else {
	header("Location: page2.php"); // valeur par défaut
	exit;
}
?>

A+
Ouhla! ça se complique Smiley cligne ...

En tout cas le test fonctionne nickel...Maintenant je vais essayer de l'intégrer dans mon formulaire... Merci Heyoan... Smiley ravi
Bonjour,

Je me suis remis au travail, j'ai mis en place la solution proposé par Heyoan (merci encore). Donc le formulaire est envoyé sur la page sav_checkbox.php qui redirige vers page2.php, les checkbox sont bien conservées mais je n'ai plus aucun résultat de recherche (recherche dans bdd). Y'a t-il autre chose à inclure sur la page sav_checkbox.php pour que la recherche soit bien effectué?
Salut Sclormu Smiley cligne ,

Le plus simple serait de montrer le code de ta page recherche.php (notamment la partie qui effectue la recherche Smiley langue ).

A+
Bonjour Heyoan, voici un bout de code de la page recherche.php

if(!empty($_GET['searchtype']))
{
	$tabsearchtype = explode(",", $_GET['searchtype']);
	$listsearchtype = "";
	$fsearchtype = 1;
	

	foreach($tabsearchtype as $searchtype)
	{

		if($fsearchtype){$listsearchtype .= "'".trim($searchtype)."'"; $fsearchtype = 0;}

		else{$listsearchtype .= ",'".trim($searchtype)."'";}
	}
	

	$whereReq .= "searchtype IN(".$listsearchtype.") ";
	$fLig = 0;
}


la requete:

$sel = "SELECT *, date_format(date_annonce, '%d/%m/%Y') as date_annonce FROM $tables WHERE $whereReq ORDER BY prix ASC LIMIT ".$start.",".$nb_results_p_page;
Si, comme je le suppose, $_GET['searchtype'] correspond à la liste de choix, il "suffit" de faire dans la page2.php (ta page recherche.php)
<?php
session_start();
$next = (isset($_GET['next'])) ? $_GET['next'] : 0;
if(!empty($_SESSION['choix']))
{
	$tabsearchtype = explode(",", $_SESSION['choix']);
	$listsearchtype = "";
	$fsearchtype = 1;
	foreach($tabsearchtype as $searchtype)
	{
		if($fsearchtype){$listsearchtype .= "'".trim($searchtype)."'"; $fsearchtype = 0;}
		else{$listsearchtype .= ",'".trim($searchtype)."'";}
	}
	$whereReq .= "searchtype IN(".$listsearchtype.") ";
	$fLig = 0;
}
?>
En gros, de remplacer $_GET['searchtype'] par $_SESSION['choix'] Smiley cligne .

Si ça ne suffit pas, donnes le code complet de ta page index et de ta page recherche Smiley rolleyes ...

A+
a écrit :
En gros, de remplacer $_GET['searchtype'] par $_SESSION['choix']


c'étai bien ça Smiley ravi

A présent les numéros de pagination conservent bien les checkbox mais ne conserve pas le résultat de la recherche Smiley decu

Dans le code ci dessous j'ai essayé de remplacer $_GET['searchtype'] par $_SESSION['searchtype'] mais cela ne fonctionne pas...


// affichage des numéros de page
for($i = $courant - $avant; $i <= $courant + $apres; $i++)
{
     // page courante
     if($i == $courant)
        echo '<span class="current">' . $i . '</span>';
     else
        echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '?searchtype='.$_GET['searchtype'].'&searchpieces='.$_GET['searchpieces'].'&searchsecteur='.$_GET['searchsecteur'].'&page=' . $i . '">' . $i . '</a>';
}


En tous cas ça avance bien... merci Heyoan
Houla je vais trop vite

c'est pas

$_GET['searchtype'] par $_SESSION['searchtype']


mais

$_GET['searchtype'] par $_SESSION['choix']


Merci Heyoan, tu as résolu mon problème (un de mes problèmes Smiley cligne )

A+ et merci Smiley baiser
Pages :