Sélection multiple dans un formulaire et php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sélection multiple dans un formulaire et php

par Cyrano » 20 sept. 2005, 18:06

Utilise donc le bouton [php] quand tu mets du code : j'ai corrigé, mais c'est lassant. Tu trouve pas ça plus facile à lire commme ça ? :evil:

Insertion multiple dans une table MysQL (la parade)

par Marc GD » 20 sept. 2005, 16:47

On dirait que la boucle for se termine avant d'avoir effectué la requete.
Ne faut-il pas intégre à la boucle justement l'exécution de la requete sinon, seul la derniere valeur de la boucle sera prise en compte?

moi, j'ai fais un truc du genre avec Dreamweaver
//nombre de lignes souhaitées. Récupéré depuis un formulaire juste avant
$nb_rec=$_POST['nombredelignes'];

//boucle pour l'insertion multiple dans la même table
for ($i = 0; $i < $nb_rec; $i++)
{
    //là j'ai redéfini les noms des variables de formulaire où on a rentré les données à insérer.
    $variable1="code".$i;
    $variable2="nom".$i;
    $variable3="pnom".$i;
    //on n'enregistre que si variable2 (nom) n'est pas vide ou égale à 0 car dans mon cas, le code est une variable cachée incrémentée par mysql donc vide dans le formulaire
    if (!empty($_POST[$variable2]))
    {
          $insertSQL = sprintf("INSERT INTO test (code, nom, pnom) VALUES (%s, %s, %s)",
                           GetSQLValueString($_POST[$variable1], "int"),
                           GetSQLValueString($_POST[$variable2], "text"),
                           GetSQLValueString($_POST[$variable3], "text"));

        mysql_select_db($database_marccnx, $marccnx);
        $Result1 = mysql_query($insertSQL, $marccnx) or die(mysql_error());
    }
}
}

par Xenon_54 » 26 août 2005, 19:16

Bonjour,
C'est de la manipulation de tableaux. Si tu as un tableau indexé, les valeurs sont dans $tableau[0], $tableau[1], $tableau[2], etc.. DOnc tu peux pointer les éléments et les insérer les uns après les autres dans une boucle en construisant une requête dynamiquement : en utilisant un pointeur qui s'incrémente à chaque tour du type for()
Ainsi:
<?php
//...
/* On compte les éléments qu'on doit insérer */
$nb = count($tableau);

/* On initialise le début d'une requête SQL */
$sql = "INSERT INTO TABLE (champ_1) VALUES ";

On initialise une boucle
for($i = 0; $i < $nb; $i++)
{
    $sql .= "('". $tableau[$i] ."')";
    $sql .= $i < ($nb - 1) ? ", " : null;
}

/* Maintenant la requête est prête et on peut l'exécuter */
mysql_connect($host, $admin, $mdp);
// .. etc...
?>
Bien vu, j'avais jamais vu cette syntaxe et pourtant elle fonctionne.

Donc à noter.

par Cyrano » 26 août 2005, 07:47

Exactement, c'est une version raccourcie de ceci:
if($i < ($nb - 1))
{
    $sql .=  ", ";
}

par Invité » 26 août 2005, 00:25

Merci bcp pour ta réponse super rapide ;) T'es toujours là pour aider les autres et c'est un réel plaisir :D
Si je comprends bien, cette ligne :

Code : Tout sélectionner

$sql .= $i < ($nb - 1) ? ", " : null;
... sert à mettre une virgule SI il reste des valeurs à insérer mais SINON SI il ne reste rien ALORS ne rien mettre... C'est ça en gros ?? (je sais pas si je me suis bien exprimer lol)

Encore un Grand merci.
Sincèremement,
Tom.

par Cyrano » 25 août 2005, 21:41

C'est de la manipulation de tableaux. Si tu as un tableau indexé, les valeurs sont dans $tableau[0], $tableau[1], $tableau[2], etc.. DOnc tu peux pointer les éléments et les insérer les uns après les autres dans une boucle en construisant une requête dynamiquement : en utilisant un pointeur qui s'incrémente à chaque tour du type for()
Ainsi:
<?php
//...
/* On compte les éléments qu'on doit insérer */
$nb = count($tableau);

/* On initialise le début d'une requête SQL */
$sql = "INSERT INTO TABLE (champ_1) VALUES ";

On initialise une boucle
for($i = 0; $i < $nb; $i++)
{
    $sql .= "('". $tableau[$i] ."')";
    $sql .= $i < ($nb - 1) ? ", " : null;
}

/* Maintenant la requête est prête et on peut l'exécuter */
mysql_connect($host, $admin, $mdp);
// .. etc...
?>

par TomX » 25 août 2005, 21:30

Oui mais comment faire si après qu'on ait récupéré ces valeurs, on souhaite les insérer dans notre BDD de la manière suivante :
INSERTION NUMÉRO 1 => VALEUR SÉLECTIONNÉE 1
INSERTION NUMÉRO 2 => VALEUR SÉLECTIONNÉE 2
INSERTION NUMÉRO 3 => VALEUR SÉLECTIONNÉE 3
...

[Une insertion pour chaque valeur sélectionnée]

INSERT INTO mabdd(valeur) VALUES("$valeur1")
INSERT INTO mabdd(valeur) VALUES("$valeur2")
INSERT INTO mabdd(valeur) VALUES("$valeur3")
...



J'ai réfléchi longuement cet aprèm' (pendant que je travaillais à mon job d'été, lol !) mais j'ai pas trouvé comment faire...
Merci d'avance si qqn peut m'aider. :wink:

par etycia » 20 août 2005, 23:36

si tu lui dit mavariable =1 puis =2 alors le 1 est remplacé par le 2 donc normal qu'il ne garde que la derniere données, il faut que tu utilise un tabeau.
Il faut que tu mettes dans ton SELECT : nom=mavariable[].

par Xenon_54 » 20 août 2005, 21:26

Bonjour,

De plus, la FAQ de PHPFrance propose déjà un élément de réponse:
http://www.phpfrance.com/forums/voir_sujet-5220.php

par Cyrano » 20 août 2005, 17:35

Tu as print_r et aussi var_dump(), par exemple pour savoir ce qui arrive dans la variable $_POST, tu peux faire :
<pre>
<?php
var_dump($_POST);
?>
</pre>
Très pratique en débuggage.

par chessjc » 20 août 2005, 17:32

merci cyrano

je suis autodidacte et débutant donc je galère et mes questions sont... mais ca commence à venir...

en fait je ne connaissais pas print_r() donc après moultes recherches au moins je récupère mes données.

par Cyrano » 20 août 2005, 16:36

Ajoute des crochets [ ] au nom de ton select (name="nom_champ[]") tu récupèreras un tableau indexé

Sélection multiple dans un formulaire et php

par chessjc » 20 août 2005, 16:32

bonjour à tous

j'ai encore une question que je pense extrèmement basique :

j'ai un formulaire avec un <SELECT MULTIPLE nom=mavariable

html me renvoit la réponse c donc de la forme

truc.php?mavariable=1&mavariable=2&mavariable=3

et quand je veux récupérer tout ca
avec $_REQUEST['mavariable'] cela ne garde que la dernière valeur...
je me doute qu'il y a une histoire de tableau mais je ne trouve pas...

merci d'avance