[PHP]Passer deux variables dans un formulaire

Résolu
Taz -  
 Taz -
Bonjour à tous et toutes,
Je rencontre actuellement un problème dans le développement de mon site.
En effet, je cherche à afficher des pages d'un manga, triées par tomes.
Et j'aimerais passer directement d'un tome à un autre, grâce à une liste déroulante.
Mais je ne parviens pas à passer les paramètres "tome" et "page" avec la même liste déroulante, ne serait-ce que pour retrouver la page courante.

Voilà mon code :

<?php
$tome = $_GET['tome'];
$page = $_GET['page'];
?>

<form method="post" action="read.php">
	<p>Aller vers :</p>
	<select name="tome">
		<option value="<?php echo $tome.'&amp;page='.$page;?>">--Page courante--</option>';
	</select>	
	<input type="submit" value="OK" />
</form>

Si la page est la page 2 du tome 1, je m'attends donc à recevoir une adresse de la forme "read.php?tome=1&page=2", mais rien ne passe en paramètre, et le var_dump m'indique que $tome et $page contiennent NULL...

Quelqu'un peut-il m'aider ???
Merci d'avance ^^
A voir également:

6 réponses

Xil Messages postés 350 Date d'inscription   Statut Membre Dernière intervention   257
 
tu peux séparer tes données par un séparateur au choix ('-', '_' , ':' , ';' , ',' ,...), un caractère que tu sais ne pas être présent ni dans tes noms de tome, ni dans tes noms de page.
exemple: coté html
<option value="<?php echo $tome.'_'.$page;?>">

Coté php, tu pourra faire un
$tmp = explode('_',$_POST['tome']);
$tome = $tmp[0];
$page = $tmp[1];


/!\ Ne pas oublier la sécurité !
https://www.php.net/strip_tags
1
rescue Messages postés 1039 Date d'inscription   Statut Contributeur Dernière intervention   136
 
Bonjour,

As tu essayé un GET ?

Dans <form method="get" action="read.php">

@+
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

<form method="post" action="read.php">

Si tu mets "method=POST", il faut récupérer tes variables avec $_POST["tome"] et $_POST["page"].
Si tu veux utiliser $_GET, alors il faut mettre method="GET".

Par ailleurs, ton utilisation de value est extrêmement déconseillée ! Et un navigateur normal transformera les entités HTML de sorte qu'elles n'apparaissent pas dans l'URL telles quelles. Tu n'auras pas deux variables, mais une seule qui contiendra par exemple "4&page=2".

Les deux solutions possibles sont soit de mettre deux champs de saisie, un pour le tome un pour la page, soit de concaténer les deux dans une seule variable, par exemple en mettant value="<?php echo "$tome;$page"; ?>", qu'il faudra en sortie traiter par un explode(";",$_GET['tome']);

Xavier
0
Taz
 
Oui, pardon, j'avais mis un get, mais dans mon recopiage, je me suis précipité.
Et le problème avec le get est celui que Xavier énonce, à savoir qu'il m'intrprète "1&page=2" comme la valeur de $post.

Je vais essayer avec un explode ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain42
 
D'accord la solution de Xil , mais moi je mettrai un caractère qui ne risque pas d'être présent dans le nom du tome ou de la page or _ risque d'y être

mets plutôt | (Alt Gr+touche 6) à la place de _

et GET ne résoudra rien, c'est la valeur de value="..." du la liste qui est envoyé, donc il faut travailler la dessus.

Pour ton name de liste mets autre chose que 'tome', il risque d'y avoir confusion avec la variable $ tome

en résumé:

<?php
$tome = $_GET['tome'];
$page = $_GET['page'];
?>

<form method="post" action="read.php">
	<p>Aller vers :</p>
	<select name="choix">
		<option value="<?php echo $tome.'|'.$page;?>">--Page courante--</option>
	</select>	
	<input type="submit" value="OK" />
</form>

et dans la page qui récupère:
<?php
$tmp = explode('|',$_POST['choix']);
$tome = $tmp[0];
$page = $tmp[1];
?>


tu as un '; qui traine après </option>

@lain
0
Taz
 
Yeaaaaaah ! Ca marche enfin, après quelques retouches. (:P)
Merci à tous pour votre aide ^^

PS : @lain, j'vais remarqué le ';, mais j'ai c/c trop vite "^^
0