IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

passer une variable ARRAY dans post


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Points : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    ...
        if (isset($_POST['submit2'])) 
            {
    C'est là que j'ai un problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En passant pour voir de quoi a l'air le formulaire...

    http://absences.csmcn.qc.ca/image.tiff

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Points : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  6. #6
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Membre actif Avatar de firehist
    Homme Profil pro
    Intégrateur Web Freelance
    Inscrit en
    Février 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2008
    Messages : 151
    Points : 214
    Points
    214
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'

Discussions similaires

  1. Comment passer une variable PHP dans une Alert
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 25/01/2009, 18h53
  2. Passer une variable à javascript dans XML
    Par klod67 dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 19/06/2007, 09h46
  3. [XSLT]passer une variable js dans une instruction xsl
    Par ounours dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 12/04/2007, 18h39
  4. Réponses: 3
    Dernier message: 26/06/2006, 13h48
  5. [Tableaux] passer une variable php dans une url
    Par griese dans le forum Langage
    Réponses: 27
    Dernier message: 12/06/2006, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo