IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Insertion de plusieurs valeurs dans un même champ de MySQL


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Insertion de plusieurs valeurs dans un même champ de MySQL
    Bonjour,

    En suivant l'exemple du livre "Introduction à MySQL et PHP" de Philippe Rigaux, j'ai créé un formulaire d'insertion de films dans une table de MySQL nommée FilmComplet. Chaque film pouvant appartenir à plusieurs genres, le formulaire contient une checkbox avec name='genre[]', le champ correspondant de la table MySQL est de type "SET" et le script PHP lancé depuis le formulaire (repris du livre) contient le morceau de code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    //Préparation de la chaîne pour l'insertion
    $chaine_genre = ""; $separateur = "";
    for ($i = 0 ; $i < count($genre) ; $i++)
    	{
    	$chaine_genre = $separateur . $genre[$i];
    	$separateur = ",";
    	}
     
    echo "Genres : $chaine_genre<br/>";
    echo "Résumé = $resume<br/>\n";
    echo "Mis en scène par $prenom $nom\n";
     
    // Connexion à la base et création de la commande SQL
    if (isSet($_POST['inserer']))
    	$requete = "INSERT INTO FilmComplet (titre, annee, prenom_realisateur, nom_realisateur, annee_naissance, pays, genre, resume)
    				VALUES ('$titre', $annee, '$prenom', '$nom', $annee_naissance, '$pays', '$chaine_genre', '$resume') ";
    Quand je demande un affichage de toute la variable $_POST par "echo print_r($_POST);", je vois bien que le tableau des genres sélectionnés dans le formulaire est passé dans la variable mais quand j'affiche l'enregistrement de la table dans PHP MyAdmin, il n'y a aucune valeur dans le champ genre alors que toutes les valeurs des autres champs de l'enregistrement sont bien passées dans la table, elles !

    Quelqu'un peut-il m'aider à comprendre pourquoi le champ "genre" de ma table MySQL ne reçoit pas le tableau des genres sélectionnés dans le formulaire et passés dans la variable *_POST ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je suppose que c'est plutot $_POST['genre'] que tu veux utiliser :

    Tu as la fonction implode pour réaliser faire ta chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine_genre = implode(',' , $_POST['genre']);

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Ca marche !
    Merci pour ta réponse, Sabotage.

    En relisant encore mon code avant d'essayer la solution que tu me proposes, j'ai retrouvé 2 erreurs (une qu'on ne voit pas dans le bout de code collé : oubli d'un _ derrière un POST ; une autre qui est de mettre un . devant le = lors de l'affectation de $chaine_genre). Je ne comprends pas bien à quoi sert ce point devant le = mais avec ça, ça marche !

    Le code devient donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    <?php
     
    // On appelle le fichier des fonctions php qui permettra ici de se connecter à la BD FilmComplet
    include("fonctions.php");
     
    //Récupération des variables
    $titre = $_POST['titre'];
    $annee = $_POST['annee'];
    $pays = $_POST['pays'];
    $prenom = $_POST['prenom'];
    $nom = $_POST['nom'];
    $annee_naissance = $_POST['annee_naissance'];
    $resume = $_POST['resume'];
     
    // On se prémunit contre une absence de saisie de genre(s)
    if (!isSet($_POST['genre']))
    	$genre = array();
    else
    	$genre = $_POST['genre'];
     
    	echo "<hr/><h2>\n";
     
    //Test du type de mise à jour effectué
    if (isSet($_POST['inserer']))
    	echo "Insertion du film $titre";
    else if (isSet($_POST['modifier']))
    	echo "Modification du film $titre";
    else if (isSet($_POST['supprimer']))
    	echo "Suppression du film $titre";
     
    	echo "</h2><hr/>\n";
     
    //Affichage des données du formulaire
     
    echo "Titre : $titre <br/> 
    	Année : $annee <br/>
    	Pays : $pays <br/>\n";
     
    //Préparation de la chaîne pour l'insertion
    $chaine_genre = ""; $separateur = "";
    for ($i = 0 ; $i < count($genre) ; $i++)
    	{
    	$chaine_genre .= $separateur . $genre[$i];
    	$separateur = ",";
    	}
     
    echo "Genres : $chaine_genre<br/>";
    echo "Résumé = $resume<br/>\n";
    echo "Mis en scène par $prenom $nom\n";
     
    // Connexion à la base et création de la commande SQL
    if (isSet($_POST['inserer']))
    	$requete = "INSERT INTO FilmComplet (titre, annee, prenom_realisateur, nom_realisateur, annee_naissance, pays, genre, resume)
    				VALUES ('$titre', $annee, '$prenom', '$nom', $annee_naissance, '$pays', '$chaine_genre', '$resume') ";
    if (isSet($_POST['modifier']))
    	$requete = "UPDATE FilmComplet SET annee=$annee, prenom_realisateur='$prenom', nom_realisateur='$nom', 
    				annee_naissance=$annee_naissance, pays='$pays', genre='$chaine_genre', resume='$resume'
    				WHERE titre='$titre' ";
    if (isSet($_POST['supprimer']))
    	$requete = "DELETE FROM FilmComplet WHERE titre='$titre' ";
     
    // On se connecte à la base FilmComplet via une fonction du fichier fonctions.php
    connectFilmComplet();
     
    // Exécution de la commande SQL
    mysql_query ($requete) or die ('Erreur SQL !'.$requete.'<br/>'.mysql_error());
     
    //On ferme la connexion
    mysql_close();
     
    ?>
    Cela ne m'empêchera pas d'essayer la solution que tu me proposes, Sabotage, et qui d'ailleurs me semble beaucoup plus concise (je ne dois pas créer la variable intermédiaire $genre pour la de réception des valeurs de $_POST['genre'] dans ce cas, c'est bien ça ?

    J'essaie tout à l'heure...

    Merci encore.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Petite correction de mon message précédent
    Oups, c'est "oubli d'un _ devant un POST" (ou "derrière le $") que je voulais écrire et non "derrière un POST", évidemment !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Génial cette fonction "implode"...
    je viens d'essayer et ça marche au poil !

    Merci Sabotage ; finalement j'ai bien fait de ne retrouver mes erreurs de code qu'après avoir posté mon message !

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton ecriture avec le point etait bonne en elle même.

    .= fait une concatenation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $var = "a";
    $var .= "b";
    // $var vaut "ab"

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Ok, compris...
    je vois maintenant à quoi sert le point devant le = : à chaque itération, la variable chaîne est allongée d'un nouveau maillon ",$genre[i]" alors que sans le point chaque nouveau maillon viendrait écraser le précédent dans la variable et in fine on n'aurait plus que ",dernière valeur du tableau $genre".

    Merci pour ton éclairage, Sabotage.

    Cela dit, ici, un "implode" le fait aussi bien et de manière plus concise, mais j'imagine que ce ".=' me servira ailleurs 1 de ces 4...

Discussions similaires

  1. [MySQL] enregistrer plusieurs valeurs dans un même champ
    Par xKryckx dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/03/2015, 14h37
  2. Plusieurs valeurs dans un même champ
    Par fidecourt dans le forum Outils
    Réponses: 2
    Dernier message: 30/01/2013, 00h03
  3. [AC-2010] saisir plusieurs valeurs dans un même champ
    Par pbpb76 dans le forum Access
    Réponses: 1
    Dernier message: 17/03/2011, 10h34
  4. Plusieurs valeurs dans un même champ
    Par cambio dans le forum Modélisation
    Réponses: 3
    Dernier message: 20/11/2009, 11h31
  5. [A-03]plusieurs valeurs dans le même champ
    Par eldjuju dans le forum IHM
    Réponses: 1
    Dernier message: 12/03/2009, 17h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo