Aide PHP, MySQL, Form

Résolu
dalma101 Messages postés 51 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 13 août 2008 - 3 mars 2008 à 10:58
nellsy Messages postés 7 Date d'inscription mercredi 11 avril 2001 Statut Membre Dernière intervention 27 juin 2009 - 4 mars 2008 à 12:23
Bonjour,
J'ai un petit souci PHP, MySQL, Formulaires. Explication du contexte : je refonds une une appli PHP de gestion de collection DVD (Ajout, Modification, Suppression, Affichage de fiches DVD voire plus tard Statisques, Impression de jaquettes,...).

Explications :
Jusqu'à présent j'avais une table unique avec des champs fixes (Titre, Résumé, 12 acteurs max., 15 genres max., idem origines, 3 critiques max.,...). J'ai modifié ma base pour être plus évolutif : 1 Table info film (Index film, Titre, Résumé, Public, Note, Réalisateur,...), 1 Table Genre (Index genre, libellé genre), 1 Table film-genre (n lignes par film, index film, index genre), idem pour les origines, 1 Table acteurs (n ligne par film, index film, nom acteur), idem critiques.

Exemples :
Table fiche
-----------------------------
1, SPIDERMAN, -10 ans, 5, ...
2, LES 4 FANTASTIQUES, Tout public, 4, ...

Table genre (listing des genres)
------------------------------
1, Fantastique
2, Comédie
3, Science-fiction
...

Table fiche-genre (lien film/genre)
--------------------------------
1, 1
1, 3
2, 1
2, 2
...

Table acteurs (lien film/acteur)
-----------------------------
1, Kirsten DUNST
1, Willem DEFOE
1, Tobey MCGUIRE
2, Jessica ALBA
2, ...




Mon problème :




Mon souci vient du fait qu'avant je n'avais qu'un nombre fixe et limité de champs à renseigner sur 1 seule table => formulaire limité et 1 seule requête via le formulaire. Cela fonctionnait.

Maintenant, je génère automatiquement mon formulaire (notamment pour les genres/origines, je vais voir en base le listing des genres/origines et je génère autant de checkbox que nécessaire). Je veux aussi pouvoir ajouter autant d'acteur que nécessaire (exemple de saisie dans textbox => ajouter => affichage du nom + nouvelle textbox de saisie).

Ma question :
Comment générer un formulaire automatiquement mon formulaire pour pouvoir récupérer les champs (textbox, checkbox) dans ma page de traitement pour les enregistrer en base ? Est-ce que je peux générer un tableau pour récupérer les valeurs des checkbox pour les genres par exemple (lesquels sont cochés par exemple ?) et les transmettre à mon fichier de traitement PHP ?

Je cherche une solution simple (ou pas) et tout idée est la bienvenue. Si c'est pas clair (c'est vrai que ça fait un petit moment que je suis dessus donc pour moi ça l'est), les questions sont aussi les bienvenues .

Merci d'avance pour toute aide apportée...

7 réponses

MasterCent Messages postés 83 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 14 décembre 2011 1
3 mars 2008 à 12:14
Ceci t'inspirera peut-être :

<?php
  // l'inversion $value $key est voulue ! due au checkBox 
  while ( list ( $value , $key ) = each ( $_POST ) )
     echo ( "$key = $value
" ) ;
 
?>
   <form method="POST" action="">
     <label>Horreur</label>
     <label>SF</label>
     <label>Romance</label>
    
   
  </form>
3
MasterCent Messages postés 83 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 14 décembre 2011 1
3 mars 2008 à 11:35
Salut,
et surtout bienvenue dans le multi dimensionnel !

Ton problème est en fait l'interfaçage des relations NN. par exemple dans ton cas : trois tables T_FILMS - T_x  - T_GENRES , avec T_x une table qui croise les films et les genres.

Si tu es à l'aise avec tes cases à cocher, tu pourrais d'abord inviter l'utilisateur à choisir un film ( variable session) , puis afficher un tableau des genres, sur base d'une requete de type "left join". car il faut afficher tous les genres, même sont qui ne sont pas associés au film.SELECT T_X.id , T_GENRES.nom from T_x left join T_GENRES on T_X.genreId T_GENRE.id where T_x.filmId '$idDuFilm' (c'est un exemple !!! non testé )

Ensuite, lors de la récupération du $_POST, il faut parcourir les cases, supprimer les non cochées et inserrer les fraichement cochées, en faisant attention qu'une case cochée ne veut pas dire qu'il faut réécrire une relation existante !!!

Si la piste t'interresses, conseils :
- vois si tu es capable d'écrire une requete SQL telle que présentée
- est il possible de traiter toutes les cases à cocher ( et de determiner les nouvelles % existantes )

Bon boulot.

(Et puis un jour, le tout en Ajax :-)
0
dalma101 Messages postés 51 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 13 août 2008
3 mars 2008 à 11:55
Salut, merci pour la rapidité.

Je ne suis pas vraiment à l'aise avec les requêtes SQL complexes (quoique je dois m'y mettre à cause du boulot) mais je vais me pencher sur la question.

Mais si j'ai bien compris ta réponse, ce n'est pas trop la génération du formulaire qui me pose problème car j'ai un tout beau formulaire d'ajout qui s'affiche (avec toutes les cases à cocher, etc...).

Mon véritable problème est de récupérer les "value" des checkbox généreées automatiquement pour pouvoir insérer mon film en base. Comment faire dans mon fichier de traitement pour dire genre1 coché, genre2 coché, genre3 décoché, etc... ? En gros comment faire pour générer un "name" unique et itératif sur un checkbox et de récupérer leurs valeurs lors du POST ?

De plus, je ne vois pas comment inviter l'utilisateur à choisir un film, car c'est un formulaire d'ajout ??? Le film n'existe donc pas encore...

Sinon pour AJAX, je ne sais pas si j'ai vraiment le temps de m'y mettre bien que j'en ai déjà entendu parler et que ça semble convenir pour certains de mes soucis...

Merci quand même.
0
dalma101 Messages postés 51 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 13 août 2008
3 mars 2008 à 13:45
Bonjour,

En fait ta réponse ne m'inspirait pas jusqu'à trouver une solution un peu plus clair mais de même genre (désolé...).

Pour mon formulaire :





<form method="POST" action="BDDEcrire.php">
    

genre[]
" value="1" unchecked>Fantastique
    
genre[]
" value="2" unchecked>Comédie
    
genre[]
" value="3" unchecked>Science-fiction
    

</form>







Pour mon BDDecrire.php :
foreach($_GET['genre'] as $idGenre)
{
    //requete SQL pour insérer en base
}

Merci quand même pour ton aide...suivi d'un petit résolu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nellsy Messages postés 7 Date d'inscription mercredi 11 avril 2001 Statut Membre Dernière intervention 27 juin 2009
4 mars 2008 à 11:14
Si j'étais toi, plutot que de faire une entrée à chaque fois je ferais un seul champ acteur par exemple que tu séparerais par un symbole...

Lors de ton foreach tu incrémente une variable:












$ton_info="";








foreach($_GET['genre'] as $idGenre)
{
    $ton_info.= ";".$valeur;
}

// Et sortie de ton foreach tu insère la variable dans la base





//requete SQL pour insérer en base la variable $ton_info


Ensuite lors de l'affichage tu n'as plus qu'a faire un bête explode() pour récupérer et afficher tes données.
Ca évite des requêtes inutiles je trouve...

Après ce n'est peut-être pas la meilleure méthode...
0
dalma101 Messages postés 51 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 13 août 2008
4 mars 2008 à 11:53
Bonjour,
c'est ce que je faisais avant mais je ne trouvais pas simple d'utilisation, notemment pour des requêtes du genre "Tout les films ayant pour genre comédie" où là maintenant, 1 requête sur la table film_genre pour tous les films avec idgenre x, ou pour sortir des stats sur genres, origines, acteurs...

Je m'emmerde par contre bcp pour les mises à jour de fiches mais bon...

Je préfère "pour ma part" cela pour avoir des requêtes simples et peu de traitement php...

Mais ce n'est que mon avis...

Merci quand même
0
nellsy Messages postés 7 Date d'inscription mercredi 11 avril 2001 Statut Membre Dernière intervention 27 juin 2009
4 mars 2008 à 12:23
Tu peux toujours effectuer tes recherches avec des %$nomacteur% ou %$genrefilm% lors de ta selection sur tes champs...

Mais c'ets une solution comme une autre, si la tienne te convient :-P
0
Rejoignez-nous