[RESOLU] Selection multiple + explode + stockage SQL

Petit nouveau ! | 3 Messages

04 août 2014, 12:34

Bonjour à tous,

Je suis confronté à un petit soucis et j'ai donc grandement besoin de vous ! :D

Voilà, j'ai une liste de personnalité dans un select multiple, chaque personnalité a un ou plusieurs métier(s). J'affiche l'id de la personnalité et de son métier comme ceci

Code : Tout sélectionner

<option value='[id_perso]+[id_metier]'>George Delajungle</option>
Ce qui me donne par exemple : value="22+1".

Le soucis est que je sais pas trop comment faire mon explode pour d'un coté garder juste les id_perso et de l’autre les id_métier (foreach ? Selection pair/impair dans le tableau ?)

Je stock ensuite dans une table films_perso_metier, l'id du film, l'id du personnage et l'id du métier (Le tout afin de faire une jointure entre les tables films, personnalite et metier)

Concernant la requête SQL je fais un truc du genre :

Je stock mon film > je récup l'id du film (lastInsertId) > je stock les infos concernant les persos à l'aide d'une boucle for

Code : Tout sélectionner

for($i=0;$i<count($perso);$i++) { $req = $bdd->prepare('INSERT INTO films_perso_metier(id_films, id_perso, id_metier) VALUES(:id_films, :id_perso, :id_metier)'); $req->execute(array( 'id_films' => $last_id, 'id_perso' => $perso[$i], 'id_metier' => $metier[$i] )); }
J'espère avoir été clair !

Merci d'avance à vous ! :)

ViPHP
xTG
ViPHP | 7331 Messages

04 août 2014, 13:16

Si je comprends bien tu souhaites récupérer deux array ?
$results = explode('+', $_POST['select_multiple']);
$perso = array();
$metier = array();
foreach($results as $value)
{
   $perso[] = $value[0];
   $metier[] = $value[1];
}
var_dump($perso);
var_dump($metier);

Petit nouveau ! | 3 Messages

04 août 2014, 16:13

C'est ça ! Mais du coup il va prendre que le 1er perso et le 1er métier la non? :o

(Enfin la en l’occurrence il me récup juste le dernier, logiquement je devrais avoir 4 persos là ^^')
array (size=2)
  0 => string '8' (length=1)
  1 => string '1' (length=1)

array (size=2)
  0 => string '' (length=0)
  1 => string '' (length=0)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 août 2014, 16:28

Pour pouvoir passer plusieurs valeurs sous un même nom/champ à php, il faut que le nom de ton select soit suivi de crochets :
<select name="select_multiple[]">

Le résultat reçu par php est alors un tableau que tu peux parcourir. Pour chaque valeur tu pourras ainsi exécuter l'explode et le traitement
foreach ($_POST['select_multiple'] as $selectMultiple) {
   $results = explode('+', $selectMultiple);
   ...
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

04 août 2014, 17:30

Ah mais oui ! Je l'avais fais mais je l'avais retiré !

Merci beaucoup à vous deux ! Tout fonctionne :)

Bonne journée à vous ! :)