Recuperer des variables avec nom dynamiques dans un array

Eléphant du PHP | 58 Messages

23 mai 2009, 20:06

Bonjour,

voilà mon probleme :

J'ai une table MySql "travaux" avec differents champs (titres, url, date...)
a ces "travaux",je souhaite y lier plusieurs photos, mais sans nombre determiné.
J'ai donc creér un table "images" (id_travaux, titre, fichier...)

donc dans mon formulaire d'ajout de nouveaux travaux, je laisse la possibilité d'ajouter autant de "images" que l'utilisateur le souhaite. Je laisse la possibilité d'ajouter des champs supplementaires via javascript.
(j'ai utilisé le code de l'editeur-du-javascript suivant ).

donc mon javascript me creé 3 champs supplémentaires a chaque fois que l'utilisateur appuis sur "ajouter une page".
le nom des champs est :
- titre_1
- num_page_1
- fichier_1

si on ajoute une deuxieme photo ca sera :
- titre_2
- num_page_2
- fichier_2

etc.... (maximum 10)

bref, jusque la, ca va...

le probleme c'est quand je veux inserer tout ca en base de donnée (dans ma table "images") la je bloque.
Je vois bien un petit array() mais je n'arrive pas a savoir combien de "photos" sous ajoutées.
je suis obligé de faire des conditions sur un ajout potentiel de 10 photos, ce qui ne m'arrange pas du tout !!!

comment pourrais-je faire pour ajouter dans un tableau mes "images" ???
merci beaucoup d'avance !

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

24 mai 2009, 09:38

Si tu donnes le même nom sans les numéroter à tous tes champs d'un même type (titre, num_page et fichier), alors tu recevras côté php 3 tableaux indexés contenant dans l'ordre les informations relatives à chaque "image".

En gros, dans ton code html il te faut avoir :

Code : Tout sélectionner

Image n°1 : <input type="text" name="titre" /> <input type="text" name="num_page" /> <input type="file" name="fichier" /> Image n°2 : <input type="text" name="titre" /> <input type="text" name="num_page" /> <input type="file" name="fichier" /> ...
(En gros, il te faut modifier ton javascript pour virer le numéro dans le nom du champ)

A partir de là, lorsque l'utilisateur soumettra le formulaire, tu vas récupérer côté php 3 tableaux : $_POST['titre'], $_POST['num_page'] et $_POST['fichier'], sachant que le premier élément de chacun de ces tableaux correspond à la première image, le 2ème à la seconde etc.

Tu peux ainsi boucler sur l'un de ces tableaux et récupérer toutes les infos dont tu as besoin, sans avoir à supposer du nombre possible d'élément spécifié :
for ($i=0; $i<count($_POST['titre']; $i++) {
  // titre de l'image n°$i
  $tite = $_POST['titre'][$i];
  // page de l'image n°$i
  $numPage = $_POST['num_page'][$i];
  // copie le fichier de l'image n°$i
  move_uploaded_file($_FILES['fichier'][$i]["tmp_name"], ... );
  ...
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 1339 Messages

24 mai 2009, 23:43

Code : Tout sélectionner

<input type="text" name="titre" /> <input type="text" name="num_page" /> <input type="file" name="fichier" /> Image n°2 : <input type="text" name="titre" /> <input type="text" name="num_page" /> <input type="file" name="fichier" />
count($_POST['titre']) retournera 1 :) (Je crois)

Code : Tout sélectionner

<input type="text" name="titre[]" /> <input type="text" name="num_page[]" /> <input type="file" name="fichier[]" /> Image n°2 : <input type="text" name="titre[]" /> <input type="text" name="num_page[]" /> <input type="file" name="fichier[]" />
Retournera 2 :)
Bon sinon tu me fais un message privé et on se fait un TeamViewer

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

25 mai 2009, 00:36

Au temps pour moi !

Merci Elie, j'ai effectivement omit les crochets dans les noms des champs :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...