Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 29/09/2011, 17h44   #1
Invité de passage
 
Homme Dick Perron
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Dick Perron
Localisation : Canada

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 0
Points : 0
Par défaut passer une variable ARRAY dans post

Bonjour, j'essaie de passer un array dans un post depuis 2 jours. Je suis complètement bloqué... À l'aide!
J'essaie de faire un formulaire dans lequel des enseignants entrent des données (résultat, commentaire, etc.) sur une liste d'élève et le tout doit être entré dans une BDD SQL.

Voici mon code.

Code :
1
2
3
4
<?php
...
    if (isset($_POST['submit2'])) 
        {
C'est là que j'ai un problème

Code :
1
2
3
4
5
6
7
           $rq = "
                   INSERT INTO octobre (id_eleve, id_enseignant, matiere, commentaire, resultat, nom_enseignant, nom_eleve, groupe) 
                   VALUES ($id_eleve, $id_enseignant, $id_groupe,$commentaire, $resultat, $nom_enseignant, $nom_eleve, $groupe)";
            $result = @mysql_query ($rq) or die (mysql_error());
            mysql_close();
     }
?>
Mon formulaire commence ici! Je l'envoie dans le fichier, mais je pourrais l'envoyer à un autre si c'est mieux

Code :
1
2
3
4
5
6
7
8
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
 
    <p class = "Section">Communication d'octobre</p>
    <fieldset>
 
 
<?php  
      include ('connexion au serveur.php');
je fais afficher la liste des élèves pour lesquels on rempli le formulaire

Code :
1
2
3
4
5
6
7
8
     $rq = " SELECT $username.id_eleve, id_matiere, liste_eleves.nom, liste_eleves.id_eleve  
            FROM $username
            INNER JOIN liste_eleves ON $username.id_eleve=liste_eleves.id_eleve
            WHERE id_matiere='$id_groupe'
            ORDER BY liste_eleves.nom
           ";
    $result = mysql_query ($rq);
   echo "<br>";
entête du tableau
Code :
1
2
3
4
5
6
7
8
    echo "<font face=Arial size=2>
        <table align='left' cellspacing='2' cellpadding='2'>
            <tr>
              <td align='left'><b>Nom de l'élève</b></td>
              <td align='left'><b>Résultat</b></td>
              <td align='left'><b>Commentaires</b></td>
              <td align='left'><b>Choix de réponses!</b></td>
            </tr></font>";
Formulaire à remplir
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
  while ($ligne = mysql_fetch_array($result, MYSQL_NUM))
        {       
            $nom_eleve=$ligne[2];
            $groupe=$ligne[1];    
            $id_eleve=$ligne[3];    
 
            echo '<td align="left" valign="top">'.$nom_eleve.'</td>
                  <td align="left" valign="top"><input type="text" name="resultat" size="3" maxlength = "3"/><br></td>
                  <td align="left"><textarea name="commentaire"rows="8" cols="50"></textarea></td>';
 
            include ('connexion au serveur.php');
            $sql2 = 
                "
                SELECT commentaire 
                FROM table_commentaires 
                ORDER BY positif DESC, commentaire ASC
                ";
 
            $req2 = mysql_query($sql2) or die('Erreur SQL !<br><font size="2">'.$sql2.'<br>'.mysql_error());  
                echo '<td align="left" valign="top"><SELECT name="commentaire">'; 
                echo '<OPTION selected></OPTION>'; 
                while($data2 = mysql_fetch_row($req2))  
                   {
                     $commentaire=$data2[0]; 
                     echo '<OPTION value="'.$commentaire.'">'.$commentaire.'</OPTION>';
                   }  
                echo '</SELECT></td></tr>';
Là j'essaie d'envoyer les données saisies à l'autre partie de mon fichier qui traite les données ... je pourrais aussi l'envoyer dans un autre fichier

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         $entree = array('nom'=>'$nom_eleve', 'nom'=>'$groupe','nom'=>'$id_eleve','nom'=>'$resultat','nom'=>'$commentaire_texte','nom'=>'$commentaire_choix');
 
        }
 
    echo '</table>'; 
    mysql_close(); 
 
 
?>
 
    </fieldset>
    <div align="center">
    <input type="submit" name="submit2" value="Valider les commentaires" />
    </div>
    </form>
dickperron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 18h45   #2
Invité de passage
 
Homme Dick Perron
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Dick Perron
Localisation : Canada

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 0
Points : 0
En passant pour voir de quoi a l'air le formulaire...

http://absences.csmcn.qc.ca/image.tiff
dickperron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 19h00   #3
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
Pour passer des infos que tu as déjà à un autre script, deux possibilités : les mettre dans une session ou faire des champs supplémentaires dans ton formulaire (avec une forte préférence pour la 1ere solution)
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 19h23   #4
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
Y'en a des choses sympas dans ce code...
As-tu tout simplement essayé de faire
juste avant d'exécuter la requête d'Insert ?
Et même d'afficher la requête SQL que tu exécutes...
Tu verras qu'elle a une drole de tête.

Vu ton code, $commentaires, est un tableau. Comment espères qu'il s'affiche quand tu le mets directement dans une chaine de caractères ?

Quand tu auras réussi à faire marcher ça, je te conseille de te pencher sur les points suivants :

Je suppose que ton script "connexion au serveur.php" te permet d'initialiser la connexion à ta base de données. Pourquoi alors l'inclure plusieurs fois (autant qu'il y a d'élèves apparemment), car il est dans une boucle while.

Dans un formulaire HTML, quand on veut passer des tableaux et que l'on fait les choses proprement, on met [] à la fin des noms des variables.
Exemple :
Code :
1
2
 
<input type="text" name="commentaire[]" />
Comme ça on récupère vraiment toujours un tableau derrière en PHP.

Enfin, on ne sait jamais ce qu'on pourrait récupérer dans des variables fournies par l'utilisateur... Il vaut donc en général tout vérifier. Ton code est vraiment pas sécurisé, des petits malins pourraient presque réussir à détruire ta base de données en tentant quelques injections SQL...
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/10/2011, 06h46   #5
Invité de passage
 
Homme Dick Perron
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Dick Perron
Localisation : Canada

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 0
Points : 0
Par défaut où j'en suis...

J'ai corrigé beaucoup de trucs à mon script. J'ai fait un script plus simple pour tester avant d'intégrer dans le vrai script et j'ai un petit questionnement qui m'embête.

Pourquoi cela marche-t-il :

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
43
44
45
<?PHP
if (isset($_POST['submit2']))
	{
		if ( isset( $_POST['entree'] ) )
		{
    		echo '<table>';
 
    		$entree=$_POST['entree'];
    		foreach ($entree
    		as $ligne )
    			{
        			echo '<tr>';
        			echo '  <td>', $ligne['commentaire'], '</td>';
        			echo '  <td>', $ligne['resultat'], '</td>';
        			echo '</tr>';
    			}
    		echo '</table>';
		}
 
exit();
break;
}
 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<?php
 
//for ($i=1;$i<=3;$i++)
{
	echo"$i";
	echo	'<tr>
  			commentaire<td><input name="entree[0][commentaire]" type="text" size="5" /></td>
  			resultat<td><input name="entree[0][resultat]" type="text"  size="5" /></td></br>
  			commentaire<td><input name="entree[1][commentaire]" type="text" size="5" /></td>
  			resultat<td><input name="entree[1][resultat]" type="text"  size="5" /></td></br>
			</tr>';
}
 
 
?>
</fieldset>
<div align="center">
<input type="submit" name="submit2" value="Valider les commentaires" />
</div>
</form>
Et pas ça. Ça donne juste la dernière entrée.

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
<?PHP
if (isset($_POST['submit2']))
        {
                if ( isset( $_POST['entree'] ) )
                {
                echo '<table>';
                foreach ( $_POST['entree'] as $ligne )
                        {
                                echo '<tr>';
                                echo '  <td>', $ligne['commentaire'], '</td>';
                                echo '  <td>', $ligne['resultat'], '</td>';
                                echo '</tr>';
                        }
                echo '</table>';
                }
 
exit();
break;
}
 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<?php
 
for ($i=1;$i<=3;$i++)
{
        echo"$i";
        echo    '<tr>
                        commentaire<td><input name="entree[$i][commentaire]" type="text" size="5" /></td>
                        resultat<td><input name="entree[$i][resultat]" type="text"  size="5" /></td></br>
                        </tr>';
}
?>
</fieldset>
<div align="center">
<input type="submit" name="submit2" value="Valider les commentaires" />
</div>
</form>
dickperron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 20h11   #6
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
On y voit déjà plus clair c'est sûr !

En fait ton problème (dans un cas comme dans l'autre) vient de l'attribut "name" que tu donnes à ton input.

Ce que tu devrais faire, c'est côté PHP, récupérer un tableau de valeurs, dans ce style là :
Code :
1
2
3
4
5
6
 
$commentaires = array(
 0 => 'comm1',
 1 => 'comm2',
 2 => 'comm3'
);
Dans le formulaire HTML, il ne faut pas mettre quoi que ce soit entre les crochets.
Ecris juste :
Code :
1
2
 
<input type="text" name="commentaires[]" />
Et tu récupéreras dans tous les cas un tableau comme montré aussi côté PHP.

Tu ne peux pas (à ma connaissance), récupérer directement un tableau à plusieurs dimensions (comme c'est ce que tu sembles vouloir faire dans ton code).
En revanche, tu peux récupérer plusieurs tableaux à 1 dimension...
Bon courage.
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 23h32   #7
Membre éclairé
 
Avatar de firehist
 
Homme Benjamin Longearet
Intégrateur Web Freelance
Inscription : février 2008
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Benjamin Longearet
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2008
Messages : 153
Points : 357
Points : 357
Envoyer un message via Skype™ à firehist
Je n'ai pas tout lu, mais si tu veux passer un tableau PHP d'une page à l'autre avec un formulaire POST c'est possible.

Il te suffit de faire:
Code :
1
2
 
<input type="hidden" name="TON_NOM" value="<?php echo serialize($ton_array) ?>" />
Tu récupérera une valeur dans l'autre page et tu effectue l'opération inverse:
Code :
1
2
 
print_r(unserialize($_POST['TON_NOM']));
Je suis désolé si je suis à côté. Je lirai à nouveau le post demain.

Bon dév'
__________________
Ingénieur Web Freelance - Firehist Studio
Profil Viadeo Benjamin Longearet
Geekos.fr : Blog technique sur les technologies du Web
---
Citation:
De l'innovation nait la solution et inversement
firehist est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h58.


 
 
 
 
Partenaires

Hébergement Web