Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/02/2011, 01h18   #1
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Par défaut Input type text dans une boucle

Bonjour,

Une requete me renvoie 4 champs :Annee, Num, Debut, Fin
Num est le n° de semaine, Debut est le jour du début de la semaine et Fin le jour de la fin de la semaine.

Avec une boucle je crée un tableau dans lequel j'indique dans chaque cellule le 1er et le dernier jour de la semaine et je place un input type text.

J'ai 2 problèmes sur lesquels je bute depuis un bon moment :
1) Je n'arrive pas à récupérer la valeur entrée dans les input text,
2) la 1ère ligne du tableau ne prend pas la hauteur que je défini.

Note : je n'ai pas encore traité le cas des checkbox
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<form name="semestre1" method="$_POST" action="index.php?page=acces">
<p align="center">Cliquer <a href="#">ICI</a> pour afficher le 2 ème semestre</p>
<table border="0"cellspacing="10">
<?php
 
if (isset($_POST['prix_semaine']))	$semaine=$_POST['prix_semaine'];
else $semaine = "";
 
require ('connect.php');
$year = date('Y');
$sql = mysql_query("SELECT * FROM semaines1 WHERE Annee = $year LIMIT 0, 26");
$nb_lignes = mysql_num_rows($sql);
for ($i=0; $i<$nb_lignes; $i++){
	$id_semaine = mysql_result($sql,$i,"Num");
	//traitement de la date de début
	$debut = mysql_result($sql,$i,"Debut");
	list($anneeD, $moisD, $jourD) = explode('-', $debut);
	if ($jourD < 10)	$jourD=substr($jourD,1, 1);
	$DateDebut = $jourD.'/'.$moisD;
 
	//traitement de la date de fin
	$fin = mysql_result($sql,$i,"Fin");
	list($anneeF, $moisF, $jourF) = explode('-', $fin);
	if ($jourF < 10)	$jourF=substr($jourF,1, 1);
	$DateFin = $jourF.'/'.$moisF;
	if ($moisD == $moisF)	$DateDebut = $jourD;
	if ($i != 0 && $i % 4 == 0){
		echo '</tr><tr height="50px">';
		echo "<td align='center' class='interieur'>&nbsp;du $DateDebut au $DateFin <br />&nbsp;
			<input type='text' name='prix_semaine$id_semaine' value='$semaine' style='width:70px' class='input'> 
		        <input type='checkbox' name='Disponibilte[]' value='$id_semaine' ></td>";
	}
	else {
		echo "<td align='center' class='interieur'>&nbsp;du $DateDebut au $DateFin <br />&nbsp;
			<input type='text' name='prix_semaine$id_semaine' value='$semaine' style='width:70px' class='input'>
		        <input type='checkbox' name='Disponibilte[]' value='$id_semaine'></td>";
	}
}
?>
</tr></table>
<input type="submit" name="sem1" value="Valider">
</form>
Je n'ai mis qu'un $semaine tour tester
Merci d'avance pour l'aide
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 09h27   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu n'as pas de champs qui s'appelle prix_semaine puisque tu as ajouté un numéro au bout.

Il vaut mieux utiliser une notation en tableau :
Code :
name='prix_semaine[$id_semaine]'
et recuperer ainsi toutes les valeurs dans le tableau $_POST['prix_semaine']

Par ailleurs tes informations dans la table sont redondantes : avec une date de debut par exemple, tu retrouves le numero de la semaine et le dernier jour de la semaine.

Tes méthodes de lecture de la base sont également inadaptés : il faut utiliser une boucle while et mysql_fetch_assoc comme indiqué dans la doc :
http://php.net/manual/fr/function.mysql-fetch-assoc.php
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 11h41   #3
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
En prenant les choses dans l'ordre :
Citation:
Envoyé par sabotage Voir le message
Code :
name='prix_semaine[$id_semaine]'
et recuperer ainsi toutes les valeurs dans le tableau $_POST['prix_semaine']
ce que j'ai fais :
Code :
1
2
3
4
5
6
7
8
9
10
if (isset($_POST['prix_semaine']))	$semaine=$_POST['prix_semaine'];
else $semaine = "";
 
if (isset($_POST['prix_semaine'])){
    for ($i = 0, $c = count($_POST['prix_semaine']); $i < $c; $i++) {
        $semaine = "" . $_POST['prix_semaine'][$i] . "";
    }
}
 
<input type='text' name='prix_semaine[$id_semaine]' value='$semaine' style='width:70px' class='input'>
Rien n'est retourné !!
Citation:
Envoyé par sabotage Voir le message
tes informations dans la table sont redondantes
J'ai pris cette solution préconisée par Antoun car j'ai plusieurs années dans ma table

Pour la méthode de lecture de la base, la boucle for me permet de créer une nouvelle ligne tous les 4 enregistrements, mais je regarderai la méthode while.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 13h34   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Pour parcourir un tableau, utilise foreach().
Pour debuguer le contenu d'un tableau, utilise var_dump() ou print_r()
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 17h23   #5
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Citation:
Envoyé par sabotage Voir le message
Pour parcourir un tableau, utilise foreach().
Pour debuguer le contenu d'un tableau, utilise var_dump() ou print_r()
J'ai regardé var_dump() et prin_r() mais j'ai du mal à comprendre et à adapter à mon code
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 17h28   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Ca sert juste à debuguer :
Code :
var_dump($_POST['prix_semaine']);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 19h12   #7
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
J'ai donc aplliqué var_dump() ici
Code :
1
2
3
4
5
6
7
if (isset($_POST['prix_semaine'])){
    for ($i = 0, $c = count($_POST['prix_semaine']); $i < $c; $i++) {
        $semaine = "" . $_POST['prix_semaine'][$i] . "";
	var_dump($_POST['prix_semaine']);
    }
}
else{ $semaine = "";}
j'ai limité à 2 mes enregistrements pour y voir plus clair.
j'ai saisi 300 et 15 dans chacun des input text et j'ai le message suivant :
Code :
1
2
Notice: Undefined offset: 0 in C:\Weblocal\Sites\Vias\affiche_cal.php on line 21
array(2) { [1]=> string(3) "300" [2]=> string(2) "15" } array(2) { [1]=> string(3) "300" [2]=> string(2) "15" }
J'ai beau essayer de modifier mon code j'ai toujours une erreur
Il faudra aussi que je regarde la boucle foreach car je ne l'ai jamais utilisée.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 19h44   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je me repete : il faut utiliser foreach() pour parcourir un tableau.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 20h17   #9
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
J'ai utilisé foreach comme cela :
Code :
1
2
3
4
5
6
if (isset($_POST['prix_semaine'])){
	foreach($_POST['prix_semaine'] as $index=>$valeur){
		$semaine=$valeur;
		var_dump($_POST['prix_semaine']);
	}
}
var_dump() affiche :
Code :
array(2) { [1]=> string(3) "300" [2]=> string(2) "15" } array(2) { [1]=> string(3) "300" [2]=> string(2) "15" }
les 2 input text on 15 comme valeur!!
Je continue de chercher, mais la solution serait la bienvenue, d'autant que je n'ai pas encore attaqué les checkbox qui sont construits eux aussi avec une boucle.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 21h59   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu as un input qui vaut 300 et un input qui vaut 15.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 22h19   #11
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Non les 2 ont 15 comme valeur, alors que j'ai entré 300 dans dans un et 15 dans l'autre.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 23h50   #12
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
slt,

pour la hauteur de ta 1ere ligne c'est du au fait que tu n'as pas de balise <tr> au debut, si tu regarde ton code tu verras que pour $i == 0 tu commences par <td>...voila pourquoi.

Dans ta balise form, pour l'attribut method c'est "post" et pas "$_POST" qui est la variable (le tableau de variable...).
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 23h58   #13
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
de plus dans ta boucle foreach tu écrases la variable $semaine, tu ne récupèreras pas les données saisies dans chaque input de cette manière...
recrées un tableau pour les récupérer.
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 00h17   #14
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Citation:
Envoyé par vorace Voir le message
slt,

pour la hauteur de ta 1ere ligne c'est du au fait que tu n'as pas de balise <tr> au debut, si tu regarde ton code tu verras que pour $i == 0 tu commences par <td>...voila pourquoi
Dans ta balise form, pour l'attribut method c'est "post" et pas "$_POST" qui est la variable (le tableau de variable...).
Merci d'avoir lu tout mon code. J'avais effectivement ces 2 problèmes que j'ai corrigés

Citation:
Envoyé par vorace Voir le message
recrées un tableau pour les récupérer
Comme j'ai dis je n'ai jamais utilisé les input text avec des tableaux. Comment je recré un tableau pour récupérer les valeurs.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 00h18   #15
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
dans ton input : value="$semaine[$id_semaine]" mais avant test son existence...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 00h20   #16
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
dans ton code, si j'ai bien compris : si le formulaire à été soumis, t'affiche les inputs avec les valeurs qui ont été saisis avant que le formulaire n'ait été soumis, c'est bien ca?
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 00h30   #17
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Comme j'ai fait plusieurs modifs depuis hier, je joins le fichier

Merci de regarder car à force j'ai les yeux qui se croisent
Fichiers attachés
Type de fichier : php affiche_cal.php (3,1 Ko, 1 affichages)
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 00h38   #18
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
juste pour savoir, la page que t'as joint s'appelle bien affiche_cal.php et la page qui traite le formulaire "action" est index.php?

il faut que tu m'aides à t'aider...
si les deux pages sont différentes, la partie de code sur $_POST['prix_semaine'] et tout le reste ne sert a rien puisque c'est sur que $_POST n'existe pas...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 10h42   #19
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Dans la page index.php j'ai un menu qui contient :
Code :
1
2
3
4
5
<a href="index.php?page=acces">Accès</a>
....
<?php
...
case 'acces': include ('affiche_cal.php');break;
et dans la page affiche_cal.php :
Code :
<form name="semestre1" method="POST" action="index.php?page=acces">
J'ai d'autres input text qui ne sont pas dans la boucle et je récupère bien les valeurs entrées. Donc pas de problème de ce coté là
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 00h18   #20
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
D'abord merci du temps pris pour regarder.

Je viens de faire le test et voilà le résultat.
Dès que j'arrive sur la page affiche_cal.php j'ai le message suivant :
Code :
1
2
3
 
Notice: Undefined index: 1 in C:\Weblocal\Sites\Vias\affiche_cal.php on line 66
Notice: Undefined index: 2 in C:\Weblocal\Sites\Vias\affiche_cal.php on line 66
La ligne est
Code :
<input type='text' name='prix_semaine[$id_semaine]' value='$semaine[$id_semaine]' style='width:70px' class='input'>
C'est la ligne qui se trouve dans le else de la boucle. C'est un peu bizare, la première est exacrement la même.

Malgré cela les valeurs saisies s'affichent bien après de la soumission.

Par contre les cases cochées ne restent pas cochées.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h31.


 
 
 
 
Partenaires

Hébergement Web