Menu déroulant à choix multiple: comment faire une variable

Eléphanteau du PHP | 12 Messages

04 août 2005, 22:29

Help !

Je débute en PHP (1 mois), et j'ai un pb avec un de mes formulaires : je n'arrive pas à récupérer sous forme de variable les réponses multiples de mon menu déroulant :

J'ai essayé de travailler sur la base du toto d'ouckeleou (récupérer les données à partir des cases à cocher) mais je n'arrive pas à transformer le résultat en variable ;'( Voici mon form

Code : Tout sélectionner

<form name="formulaire1" method="POST" action="script_enregistrement_multiple.php"> <select name="langage[]" size="3" multiple> <option>test1</option> <option>test2</option> <option>test3</option> </select> <input type="submit" name="Submit" value="Envoyer"> </form>
C'est important pour moi de l'avoir en variable car j'insère les résultats dans ma base SQL à l'aide d'une page php de traitement :
voici ce que propose ouckeleou pour afficher le résultat (bien entendu ce code n'est pas de moi...)
<?php
// vérifions que la variable a été transmise
$tabLangages = (isset($_POST['langage']))?$_POST['langage']:null;

echo "Voici les langages que vous avez choisi :<br>";
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
if (!empty($tabLangages)) {
    foreach($tabLangages as $cle => $valeur) {
        echo $cle.' : '.$valeur.'<br>';
    }
}
?>

Quelqu'un a-t-il une solution pour récupérer ce qui est affiché en variable pour que je l'intégre dans ma DB ???
Johann - Newbie PHP

Mammouth du PHP | 19672 Messages

04 août 2005, 22:35

Je viens de tester ton script, il fonctionne très bien: est-tu sûr que tu envoies les données vers le bon fichier de traitement ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 22:42

Je viens de tester ton script, il fonctionne très bien
bien sûr, c'est le mien 8)

peux-tu donner un exemple du format dans lequel tu souhaiterais avoir ces variables après traitement ?

tu voudrais stocker toutes les réponses dans une seule et même variable ?
ce serait cette ligne qu'il faudrait modifier :
 echo $cle.' : '.$valeur.'<br>';
pour ajouter une variable à une autre, utilise la concaténation :
$variable = "A";
$variable .= "B"; // --> concaténation avec le point
echo $variable; // $variable contient maintenant "AB";

Eléphanteau du PHP | 12 Messages

04 août 2005, 23:26

Je me suis sans doute mal exprimé :
Je fais un formulaire qui sera traité par mon script php qui l'enregistre dans ma BDD SQL

Voici mon véritable form :

Code : Tout sélectionner

<form action="ecriture_formulaire.php" method="post" target="_blank"> <select name="entreprise" size="3" multiple> <option>entreprise1</option> <option>entreprise2</option> <option>entreprise3</option> <option>entreprise4</option> </select> <input name="date" type="text" value="YYYYMMDD" size="8" /> <input name="sujet" type="text" size="9" /> <input name="remarques" type="text" size="9" /> <input type="submit" value="Envoyer" />
Je l'envoie donc vers ecriture_formulaire.php qui donne ça :

Le pb c'est que le script en tant que tel n'enregistre qu'une réponse de mon premier menu déroulant ("entreprise"), celui à réponses multiples ;'(
<? 
// je me connecte à ma DB
mysql_connect("localhost", "johann", "***");
mysql_select_db("***");

// je créé mes variables qui récupèrent les données de chaque champs
$acquisition1=$_POST['entreprise'];
$acquisition2=$_POST['date'];
$acquisition3=$_POST['sujet'];
$acquisition4=$_POST['remarques'];

// J'ajoute une entrée avec mysql_query en lui faisant chercher mes variables 
mysql_query("INSERT INTO *** (**, **, **...) VALUES ('','$acquisition1', '$acquisition2', '$acquisition3', '$acquisition4'");

mysql_close();
Johann - Newbie PHP

Mammouth du PHP | 19672 Messages

04 août 2005, 23:29

Tu as oublié les crochets:

Code : Tout sélectionner

<select name="entreprise[]" size="3" multiple>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 23:52

et si je sélectionne l'entreprise 1 et l'entreprise 2, est-ce que ça doit insérer deux lignes dans la base de données ?

à ce moment là il suffit de boucler comme je l'ai fait dans l'exemple, avec au lieu d'un echo la requête SQL

Eléphanteau du PHP | 12 Messages

04 août 2005, 23:54

J'ai rectifié mon copier coller : celui là est normalement OK

J'arrive à ça :

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Document sans titre</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <form action="script.php" method="post" target="_blank"> <select name="entreprise[]" size="3" multiple> <option>entreprise1</option> <option>entreprise2</option> <option>entreprise3</option> <option>entreprise4</option> </select> <input name="date" type="text" value="YYYYMMDD" size="8" /> <input name="sujet" type="text" size="9" /> <input name="remarques" type="text" size="9" /> <input type="submit" value="Envoyer" /> </form> </body> </html>
Si je prend le code proposé, ça me donne un affichage des réponses, moi ce qui m'intéresse c'est pas de l'afficher mais d'enregistrer les réponses dans une variable (concaténée)
<?php 
// vérifions que la variable a été transmise 
$tabLangages = (isset($_POST['entreprise']))?$_POST['entreprise']:null; 

echo "Voici les langages que vous avez choisi :<br>"; 
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées 
if (!empty($tabLangages)) { 
    foreach($tabLangages as $cle => $valeur) { 
        echo $cle.' : '.$valeur.'<br>'; 
    } 
} 
?> 
Ensuite quand ma variable sera enregistrée, je pourrai intégre le bout de code dans mon script d'enregistrement : (voir + haut, c le script pour le l'enregistrement SQL)[/php]
Johann - Newbie PHP

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 23:58

tu as essayé la piste que je t'ai laissé dans le mail ?

pour grouper les valeurs dans une seule variable il faut une variable qui va tout stocker, et rajouter à chaque fois les valeurs de chacune des autres variables
ceci se fait dans la boucle :
$total .= $valeur;
tu les sépares comme tu le sens, avec une virgule par exemple

Eléphanteau du PHP | 12 Messages

05 août 2005, 00:16

Je comprends qu'il faille concatener les variables et les séparer (ça je maîtrise à peu près)
Je ferai un code du style

$groupereponse = $rep1 . ' / ' . $rep2 ;

Mais ce que je ne comprends pas c comment concatener des variables que je ne vois pas ?

Comme je sui sun peu mongol j'ai fait ça suite à ta remarque :
<?php 
// vérifions que la variable a été transmise 
$tabLangages = (isset($_POST['entreprise']))?$_POST['entreprise']:null; 

echo "Voici les langages que vous avez choisi :<br>"; 
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées 
if (!empty($tabLangages)) { 
    foreach($tabLangages as $cle => $valeur) { 
        echo $cle.' : '.$valeur.'<br>'; 
		$total.= $valeur; 
    } 
} 
?> 
Ca peut te paraître bête mais je comprends vraiment pas comment concatener des variables qui n'ont pas encore de nom !
Johann - Newbie PHP

Eléphanteau du PHP | 12 Messages

05 août 2005, 00:20

Dslé j'avais pas vu ta remarque d'avant : non en fait ça m'intéresse pas d'avoir 2 lignes dans ma base : il me faut l'info ds une seule ligne, avec les autres champs ;'( Il me faut vraiment une ligne genre

Entreprise choisie------------ Nom ------- Remarque ----
Entreprise1/Entreprise2 --- Johann ---- No comment
Entreprise3/Entreprise1 --- Robert---- Non ça roule
Johann - Newbie PHP

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2005, 00:21

je ne comprend pas cette histoire de variable sans nom :lol:

elles ne sont pas sans nom, les valeurs sont stockées dans un tableau ($_POST['entreprises'])
et à chaque tour de boucle la valeur de la cellule est mise dans une variable $valeur
elle a donc un nom et tu en fais ce que tu veux


mais, as-tu essayé ce code de "mongol" comme tu dis ?
moi j'afficherai la variable $total après la boucle, ce n'est peut-être pas si "mongol" que ça ;)

Eléphanteau du PHP | 12 Messages

05 août 2005, 00:33

On est d'accord, je dis bien que c moi le mongol... ? Parce q je trouve ça cool de m'aider là dessus...

J'en suis là :
<?php 
// vérifions que la variable a été transmise 
$tabLangages = (isset($_POST['entreprise']))?$_POST['entreprise']:null; 

echo "Voici les langages que vous avez choisi :<br>"; 
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées 
if (!empty($tabLangages)) { 
    foreach($tabLangages as $cle => $valeur) { 
        echo $cle.' : '.$valeur.'<br>'; 
		$total= $valeur; 
    } 
} 
echo $total;
?> 
Et oh bonheur ça m'affiche ça :

Voici les langages que vous avez choisi :
0 : entreprise1
1 : entreprise2
2 : entreprise3
3 : entreprise4
entreprise4

Je comprends un peu mieux mais je suis tjrs incapable de le résoudre.
Johann - Newbie PHP

Eléphanteau du PHP | 12 Messages

05 août 2005, 00:34

PS : j'ai retiré le . du $total. (ça me semblait une erreur de frappe, non ?) sinon ça me mettait une erreur
Johann - Newbie PHP

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2005, 00:38

oui, j'avais bien compris que tu parlais de ton code comme un code nul, et si je te disais d'essayer c'est que ce n'était pas si "mongol"

sans ironie aucune

puisque le point que tu as enlevé était justement ce qui permettait de concaténer toutes les valeurs dans $total

cela mettait une erreur, mais surement pas à cause de ça

donc réessaye, regarde $total à la fin
et relis l'erreur pour voir d'où elle provient

Eléphanteau du PHP | 12 Messages

05 août 2005, 00:47

En fait c'est un

--> Parse error: parse error in c:\documents and settings\noakin\mes documents\tests_php\test_effacement\script.php on line 10

En ligne 10 c'est donc q g du mal nommer ma variable : pour moi le point c'est uniquement pour concatener, j'ai tord ? Est ce que je dois pas faire une manip du style je créé une variable par ligne de tableau (par réponse, quoi) avec un truc du style "++"

J'en suis là :
<?php 
// vérifions que la variable a été transmise 
$tabLangages = (isset($_POST['entreprise']))?$_POST['entreprise']:null; 

echo "Voici les langages que vous avez choisi :<br>"; 
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées 
if (!empty($tabLangages)) { 
    foreach($tabLangages as $cle => $valeur) { 
        echo $cle.' : '.$valeur.'<br>'; 
		$total. = $valeur; 
    } 
} 
echo $total;
?> 
Johann - Newbie PHP