Page 1 sur 1

impossible de faire apparaitre n lignes

Posté : 21 août 2011, 11:47
par Boro64
Bonjour
Voici mon problème:
Je cherche à faire apparaitre un nombre de ligne "n" dans un formulaire. Ce choix "n" vient après avoir choisi un nombre "i" de section. Pour ce choix "i", pas de problème. Mais lorsque j'entre un nombre de lignes "n", je n'arrive pas à faire apparaître la quantité souhaitée.
Voici à quoi j'arrive:
echo '  Choisissez le nombre de section à afficher: <select name="nbr_section">
<option value=" '.$nbr_section.' ">'.$nbr_section.'</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>

';

echo '<input type="submit" name="go" value="afficher les sections" /><br />';

if (isset($_POST['go']))//si le bouton submit du choix de nombre de section est soumit
	{			//on affiche le nombre de section demandée 
	for ($i=1; $i<=$nbr_section; $i++){
		echo $i.'
		<label>Nom de la section: </label><input type="text" name=" '.$i.'-nom_section" value="" />
		<input type="hidden" name=" nbr_section" value=" '.$nbr_section.' " />
 Choisissez le nombre de plat pour la section: <input type="text" name=" '.$i.'-nbr_plat" value="" /><br /><br />';
																}
	echo '<input type="submit" name="zou" value="afficher la quantité de ligne souhaitée" /><br /><br />';
}
	if (isset($_POST['zou']))
	{


		for ($i=1; $i<=$nbr_section; $i++){
		echo $i.'
		<label>Nom de la section: </label><input type="text" name=" '.$i.'-nom_section" value="'.$nom_section.'" /><br />';



	for ($n=1; $n<=$i.'nbr_plat'; $n++){
		echo $n.'		<label>Nom du plat: </label><input type="text" name=" '.$n.'-nom_plat." value=" '.$nom_plat.' " />
		<label>Prix du plat: </label><input type="text" name=" '.$n.'-prix_plat" value="" /><br />';
															}	
															echo '<hr />';
																	}
	
	}
Le résultat obtenu, disons pour 3 sections, c'est :
1ere section = 1 ligne affichée pour2 ou 3 ou 10, c'est pareil
2eme section = 2 lignes affichées pour2 ou 3 ou 10, c'est pareil
3eme section = 3 lignes affichées pour2 ou 3 ou 10, c'est pareil
etc.
etc.
Peut être parce qu'il fait chaud, ou que cela fait trop de temps que je suis dessus, mais je ne comprends pas où est mon erreur... :oops:

Merci d'avance pour votre aide, votre avis, vos conseils

[Edit]: petite précision, je ne passe pas par une bdd

Re: impossible de faire apparaitre n lignes

Posté : 21 août 2011, 13:48
par moogli
$nbr_section n'existe pas mais $_GET['nbr_section'] ;)

@+

Re: impossible de faire apparaitre n lignes

Posté : 21 août 2011, 15:03
par Boro64
Bonjour moogli

Heu... si, si: $nbr_section existe bel et bien, mais effectivement j'ai omis ce code où je récupère les variables transmises (en _POST):
$nbr_section = $_POST['nbr_section'];
$nbr_plat = $_POST['$i-nbr_plat'];
$nom_section = $_POST['$i-nom_section'];
$nom_plat = $_POST['$n-nom_plat'];
$prix_plat = $_POST['prix_plat'];
$titre = $_POST['titre'];
Lorsque je fais:
if($_SERVER['REQUEST_METHOD']=='POST') { 
    echo '<pre>'; 
    print_r($_POST); 
    echo '</pre>'; 

}
j'ai bien les infos transmises:
Array
(
    [titre] => 
    [nbr_section] =>  2 
    [1-nom_section] => test 1
    [1-nbr_plat] => 2
    [2-nom_section] => test 2
    [2-nbr_plat] => 3
)
Du coup, je ne vois pourquoi si la $nbr_section est bien interprétée, les $nbr_plat ne le sont pas....Une idée?
Merci

Re: impossible de faire apparaitre n lignes

Posté : 21 août 2011, 15:27
par sirakawa
Ce qui me plairait, c'est de savoir si tout ce code est dans le même fichier ou s'il est réparti entre plusieurs.
Par ailleurs, je vois des références à des $_POST dont on se demande d'où ils sortent ($_POST['zou'] par exemple), des input en-dehors de <form...></form>.
Peut-etre, comme Craeme Allwright, confonds-je un chapeau avec une vieille casserole...

Re: impossible de faire apparaitre n lignes

Posté : 21 août 2011, 15:34
par Boro64
Salut sirakawa

Alors oui, tout est dans le même fichier, je n'ai sélectionné que la partie concernée par mon "problème", mais tu as sans doute raison, au temps avoir toutes billes...que voici:
<form method="post">

<?php 
//déclaration des variables utilisées 
$nbr_section = $_POST['nbr_section'];
$nbr_plat = $_POST['$i-nbr_plat'];
$nom_section = $_POST['$i-nom_section'];
$nom_plat = $_POST['$n-nom_plat'];
$prix_plat = $_POST['prix_plat'];
$titre = $_POST['titre'];


		echo '<label>Titre:</label><textarea rows="1" cols="30" name="titre">'.$titre.'</textarea><br /><br />';

echo '  Choisissez le nombre de section à afficher: <select name="nbr_section">
<option value=" '.$nbr_section.' ">'.$nbr_section.'</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>

';

echo '<input type="submit" name="go" value="afficher les sections" /><br />';

if (isset($_POST['go']))//si le bouton submit du choix de nombre de section est soumit
	{			//on affiche le nombre de section demandée 
	for ($i=1; $i<=$nbr_section; $i++){
		echo $i.'
		<label>Nom de la section: </label><input type="text" name=" '.$i.'-nom_section" value="" />
		<input type="hidden" name=" nbr_section" value=" '.$nbr_section.' " />
 Choisissez le nombre de plat pour la section: <input type="text" name=" '.$i.'-nbr_plat" value="" /><br /><br />';
																}
	echo '<input type="submit" name="zou" value="afficher la quantité de ligne souhaitée" /><br /><br />';
}
	if (isset($_POST['zou']))
	{
	$enleve_fin = array_pop($_POST);

		for ($i=1; $i<=$nbr_section; $i++){
		echo $i.'
		<label>Nom de la section: </label><input type="text" name=" '.$i.'-nom_section" value="'.$nom_section.'" /><br />';



	for ($n=1; $n<=$i.'nbr_plat'; $n++){
		echo $n.'		<label>Nom du plat: </label><input type="text" name=" '.$n.'-nom_plat." value=" '.$nom_plat.' " />
		<label>Prix du plat: </label><input type="text" name=" '.$n.'-prix_plat" value="" /><br />';
															}	
															echo '<hr />';
																	}
	
	}





?>

</form>
NB: Graeme Allwright...non?

Re: impossible de faire apparaitre n lignes

Posté : 21 août 2011, 18:16
par sirakawa
Oui mais il ne pourrait plus Crémer tout droit... Mais tu as absolument raison.
je t'envoies juste la partie modifiée à mon goût
<form method="post">
<?php
print_r($_POST);
//déclaration des variables utilisées
// j'ai rajouté des isset() parce que,sans celà le script crache des erreurs au lancement...
$nbr_section =  isset( $_POST['nbr_section']) ? $_POST['nbr_section'] : 3;
$nbr_plat = isset ($_POST['$i-nbr_plat']) ? $_POST['$i-nbr_plat']:1;
$nom_section = isset( $_POST['$i-nom_section']) ?  $_POST['$i-nom_section']: "";
$nom_plat = isset($_POST['$n-nom_plat']) ? $_POST['$n-nom_plat'] : "";
$prix_plat = isset($_POST['prix_plat']) ? $_POST['prix_plat']: 1;
$titre = isset($_POST['titre']) ? $_POST['titre']: "";
// autre conception du select, pour éviter le doubla affichage de la valeur choisie.
$selecteur_section = "<select  name= 'nbr_section'>";
for ($i = 0; $i <=9; $i++)
{
	if ($i == $nbr_section)
	{
		$selecteur_section .= "<option selected = 'selected'>$i</option>";
	}
	else
	{
			$selecteur_section .= "<option >$i</option>";
	}
}
$selecteur_section .= "</select>";
echo '<label>Titre:</label><textarea rows="1" cols="30" name="titre">'.$titre.'</textarea><br /><br />';
echo '  Choisissez le nombre de sections à afficher:'. $selecteur_section;
echo '<input type="submit" name="go" value="afficher les sections" /><br />';

Re: impossible de faire apparaitre n lignes

Posté : 21 août 2011, 22:13
par Boro64
Bonsoir
Ok, merci sirakawa
Malheureusement ça ne règle pas mon problème de récupération de la quantité demandé pour les lignes "nbr_plats". (les $nbr_plats)
En fait, en y réfléchissant, je n'arrive pas à récupérer l'info dans $_POST.
Il me faudrait parcourir (foreach?) le array, mais je bute sur la récupération des lignes..
Toute idée est la bienvenue

Re: impossible de faire apparaitre n lignes

Posté : 22 août 2011, 08:11
par sirakawa
J'ai rajouté le isset() sans regarder la suite...

Code : Tout sélectionner

$nbr_plat = isset ($_POST['$i-nbr_plat']) ? $_POST['$i-nbr_plat']:1;
Quand tu récupères des POST; soit tu mets une constante entre quotes, soit une variable sans quotes...
exemple :
<input ... name ="nom"... /> ==> $identifiant = $_POST['nom']; ou $champ = "nom"; $identifiant = $_POST[$champ];
Mais dans $_POST['$i-nbr_plat'], du fait des quotes, '$i-nbr_plat' est lu tel quel, et ce post n'existant pas, tu te retrouves avec la valeur 1
Ce nombre de plats dépend du numéro de la section; donc il faut le récupérer dans la boucle des sections

Code : Tout sélectionner

<label>Nom de la section: </label><input type="text" name=" '.$i.'-nom_section" value="'.$nom_section.'" /><br />'; $nom= $i."-nbr_plat"; $nbr_plat = isset ($_POST[$nom]) ? $_POST[$nom]:1;
et du coup tu modifies ta boucle:

Code : Tout sélectionner

for ($n=1; $n<=$nbr_plat; $n++){
Il existe une solution passant par un tableau:
$nbr_plat = isset ($_POST['nbr_plat']) ? $_POST['nbr_plat']:1; // sera un tableau au deuxième tour; au premier c'est un entier dont on ne sert pas
...
 Choisissez le nombre de plat pour la section: <input type="text" name="nbr_plat[]" value="" /><br /><br />'; // les [] indiquent qu'on passe un tableau de valeurs. Àla récupération, il sera indicé à partir de 0
...
$nbr_plats =  $nbr_plat[$i-1];
for ($n=1; $n<=$nbr_plats; $n++){

Re: impossible de faire apparaitre n lignes

Posté : 22 août 2011, 13:11
par Boro64
Sirakawa un immense merci à toi ! :agenouille:
Non seulement j'ai (enfin! :mrgreen: ) compris mes erreurs, mais cela fonctionne à merveille! De même, je récupère les noms au sein de tableaux du type:
$nom_section = isset( $_POST['nom_section']) ?  $_POST['nom_section']: "";
		<label>Nom de la section: </label><input type="text" name="nom_section[]" value=" " />
		for ($i=1; $i<=$nbr_section; $i++){
$noms = $nom_section[$i-1];
		echo $i.'
		<label>Nom de la section: </label><input type="text" name=" '.$noms.' " value=" '.$noms.' " /><br />';
Quant aux quotes dans $_POST['$quelquechose']...là c'est carrément la honte :oops:

Merci pour ton aide (précieuse!), et si un jour tu passes dans la région, je paie les tournées !