Page 1 sur 2

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

Posté : 04 août 2005, 22:29
par noan59
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 ???

Posté : 04 août 2005, 22:35
par Cyrano
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 ?

Posté : 04 août 2005, 22:42
par ouckileou
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";

Pour résumer

Posté : 04 août 2005, 23:26
par noan59
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();

Posté : 04 août 2005, 23:29
par Cyrano
Tu as oublié les crochets:

Code : Tout sélectionner

<select name="entreprise[]" size="3" multiple>

Posté : 04 août 2005, 23:52
par ouckileou
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

On avance... TKS

Posté : 04 août 2005, 23:54
par noan59
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]

Posté : 04 août 2005, 23:58
par ouckileou
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

Non je percute toujours pas Dslé

Posté : 05 août 2005, 00:16
par noan59
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 !

OUps

Posté : 05 août 2005, 00:20
par noan59
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

Posté : 05 août 2005, 00:21
par ouckileou
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 ;)

OK

Posté : 05 août 2005, 00:33
par noan59
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.

au fait

Posté : 05 août 2005, 00:34
par noan59
PS : j'ai retiré le . du $total. (ça me semblait une erreur de frappe, non ?) sinon ça me mettait une erreur

Posté : 05 août 2005, 00:38
par ouckileou
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

j'essaie

Posté : 05 août 2005, 00:47
par noan59
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;
?>