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 :

INSERT de choix multiples en pdo


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut INSERT de choix multiples en pdo
    Bonjour, j'ai d'insérer les données choix en une ligne dans ma base de donnée déjà une chose et les re sortir en un tableau


    idA pseudo sexe choix jours annonce
    11 webmaster H maison 1423738852 salut
    10 webmaster H appartement 1423738852 salut
    9 webmaster H flat 1423738852 salut

    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
    <?php 
    include'sources/config1.php';
     
     
    if(isset($_POST['Submit'])){
     
     
    $pseudo=addslashes($_POST['pseudo']);
    $jours=addslashes($_POST['jours']);
    $annonce=addslashes($_POST['annonce']);
    $sexe_m=addslashes($_POST['sexe']);
     
     
     
     
    				 if($_POST['Submit'] == TRUE){
     
    				 foreach($_POST['choix'] as $liste){
     
                     $add_annonce=array(':pseudo'=> $pseudo,
    								    ':sexe'=> $sexe_m,
    				                    ':choix'=> $liste,
    				                    ':jours'=> $jours,
    				                    ':annonce'=> $annonce);	
     
                     $values= join(', ',array_keys($add_annonce));
                     $req=$connection->prepare( 'INSERT INTO annonce ('.str_replace(':','',$values).') VALUES('.$values.')' );
                     $req->execute($add_annonce);	
    				 }
     
    	  echo' <script>
          $(document).ready(function() {
          $("#dialog").dialog({
    	  modal: true,
    	  opacity: 0.9,		 
    	  minWidth: 400 ,
    	  height: 120,
    	  position: [480,350],	                      
    	  });
          });
          setTimeout( function() { 
    	  window.location.href = ("http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/membre.php?idm='.$_SESSION['idm'].'");
          }, 15000 );
          </script>';
    	  echo'<div id="dialog" style="display:none;font-size:10px;" title="Réussi"><img src="images/1.gif" width="24" height="24" border="0"><br />
    	  <center><b>Votre annonce est inserée!!!!<br/>';echo $sexe_m; echo'&nbsp;&nbsp;';echo $pseudo;echo'&nbsp;&nbsp;';echo $jours; echo'&nbsp;&nbsp;';echo $liste; echo'&nbsp;&nbsp;';echo $annonce; echo'</b></center></div>';	
     
    	  include'pieds.php';
          }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
          }else {
    	   echo' <script>
          $(document).ready(function() {
          $("#dialog").dialog({
    	  modal: true,
    	  opacity: 0.9,		 
    	  minWidth: 400 ,
    	  height: 120,
    	  position: [480,350],	                      
    	  });
          });
          setTimeout( function() { 
    	  window.location.href = ("http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/add_annonce.php?idm='.$_SESSION['idm'].'");
          }, 5000 );
          </script>';
    	  echo'<div id="dialog" style="display:none;font-size:10px;" title="Erreur inscription"><img src="images/1.gif" width="24" height="24" border="0"><br />
    	  <center><b>Une erreur à l\'inscription <br/> veuillez recommencez!!!!<br/></b></center></div>';
    	  include'pieds.php';
          }	
     
    ?>

  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
    Et quel est ton problème ?

    Au passage quand même : présente correctement ton code et soit logique ; par exemple ta ligne 16 est redondante avec ta ligne 5.
    Egalement tes addslashes ne servent à rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonjour merci du conseil pour la redondance, en quelques mots j'aimerais ajouter les choix avec un implode et avoir une seule entrée dans la base de données.

    Le seul souci j'ai fait plein de test avec implode et à chaque fois je me plante

    Merci;

    La redondance est retiré

  4. #4
    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
    Tu peux etre plus precis que "plante" ?
    Au passage quand meme, ce que tu veux faire n'est pas conforme à une base de données relationnelle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Dans l'insert sur le idA disons 1 avoir sur le champ choix appartement,maison,flat en une seule insertion et pas avoir plusieurs idA un avec maison, etc...

  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
    Je ne vois pas ta difficulté pour utiliser implode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $add_annonce=array(':pseudo'=> $pseudo,
    					            ':sexe'=> $sexe_m,
    				                    ':choix'=> implode(',', $liste),
    				                    ':jours'=> $jours,
    				                    ':annonce'=> $annonce);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    bonjour cela ne s'enregistre pas dans la base comme cela

  8. #8
    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
    Il manque la ligne entière ou seulement la colonne ?
    Tu as activé les erreurs PDO ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonsoir il manque la ligne entière rien dans la base de donnée avec l'implode les erreur comment cela stp?

  10. #10
    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
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par speedylol Voir le message
    Bonjour, j'ai d'insérer les données choix en une ligne dans ma base de donnée déjà une chose et les re sortir en un tableau
    Je tire mon chapeau à sabotage , qui semble avoir compris cette phrase du premier coup.

    Cela dit...... speedylol, peux-tu montrer :
    • le bout de formulaire avec les checkbox "choix" ? (ou radio ?)
    • ce que renvoie var_dump['choix'] (quand tu testes le formulaire)
    • et echo implode(',', $liste); ?
    • comment est défini le champ "choix" dans ta table (en base de données) ? VARCHAR ? ... ?
    • la requête SQL ?

    Bref, le minimum nécessaire et suffisant pour trouver la luciole.
    Dernière modification par Invité ; 16/03/2015 à 02h38.

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonjour j'ai trouvé une solutions la cela s'insérer bien dans la base de donnée mais en décroissance, je coche trois checkbox, j'ai une ligne avec les trois cases données, la seconde avec deux données , et la dernière avec une seule donnée, pour la même insertion?.

    Il reste à trouver comment faire une seule insertion et non pas trois quand j'ai cocher trois checkbox.

    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
    				 //Préparation de la chaîne pour l'insertion
                     $chaine_liste = ""; $separateur = "";
                     for ($i = 0 ; $i < count($liste) ; $i++)
    	             {
    	             $chaine_liste .= $separateur . $liste[$i];
    	             $separateur = ",";
     
     
     
                     $add_annonce=array(':pseudo'=> $pseudo,
    								    ':sexe'=> $sexe_m,
    				                    ':choix'=> $chaine_liste,
    				                    ':jours'=> $jours,
    				                    ':annonce'=> $annonce);	
     
                     $values= join(', ',array_keys($add_annonce));
                     $req=$connection->prepare( 'INSERT INTO annonce ('.str_replace(':','',$values).') VALUES('.$values.')' );
                     $req->execute($add_annonce);	
    				}

  13. #13
    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
    si tu mets un INSERT dans une boucle, tu auras forcement une insertion à chaque tour de boucle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonjour merci de tes réponse, je vois pas avec l' insert stp? serait tu m'éclairè ?

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    La phrase la plus importante dans les réponses données par sabotage est quand même celle-ci :
    Au passage quand meme, ce que tu veux faire n'est pas conforme à une base de données relationnelle.
    Vouloir stocker tous les choix d'un utilisateur sur une seule ligne, c'est anti-BDD relationnelle !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Invité
    Invité(e)
    Par défaut
    1/
    Citation Envoyé par speedylol Voir le message
    ... je vois pas avec l' insert stp?...
    Si tu indentais correctement ton code, tu te rendrais compte que ta requête "INSERT....." est DANS la boucle for(....).

    2/ C'est bizarre, j'ai l'impression que tu utilises des fonctions sans savoir à quoi elle servent....
    Pour info : join() est un alias de implode().

    3/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	$chaine_liste = implode( ',', $liste );
     
    	$add_annonce=array(':pseudo'=> $pseudo,
    		':sexe'=> $sexe_m,
    		':choix'=> $chaine_liste,
    		':jours'=> $jours,
    		':annonce'=> $annonce);	
     
    	$values= implode(', ',array_keys($add_annonce));
    	$req=$connection->prepare( 'INSERT INTO annonce ('.str_replace(':','',$values).') VALUES('.$values.')' );
    	$req->execute($add_annonce);
    @CinePhil et sabotage

    Moi aussi je suis anti-relationnel !
    Et alors ??

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonjour jreaux62 merci de ta réponse pour le join() je savais pas, j'explore le PDO aussi encore quelque lacune.

  18. #18
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    bonjour jreaux62 voilà je viens encore de faire le test je coche 4 données et dans l'insertion j'ai quatre ligne alors je devrais avoir une seule insertion et quatre données dans le champs choix

  19. #19
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et bien gardez vos quatre lignes ; c'est bien mieux comme ça, du point de vue BDDR !

    Premier principe des bases de données relationnelles : chaque donnée doit être atomique. Stocker tous les choix de l'utilisateur dans une seule colonne pour une seule ligne de la table, c'est mal !

    En plus, vu la nature de vos choix, si vous avez 10 000 utilisateurs, vous allez stocker des milliers de fois 'maison', 'appartement' et 'flat' ou je ne sais quoi d'autre.
    Faites une table des choix et une table associative entre les utilisateurs et les choix.

    Règle de gestion :
    Un utilisateur peut faire plusieurs choix et un choix peut être fait par plusieurs utilisateurs.

    MCD :
    utilisateur -0,n----faire----0,n- choix

    Tables :
    te_utilisateur_uti (uti_id...)
    te_choix_chx (chx_id, chx_libelle...)
    tj_uti_faire_chx_ufc (ufc_id_utilisateur, ufc_id_choix...)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  20. #20
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonjour, voilà j'ai écouté est cela est beaucoup mieux merci à toi.

    Reste la sortie avec explode ;-) .

    Bàt

    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
                $add_annonce=array(':pseudo'=> $pseudo,
    						      ':sexe'=> $sexe_m,
    				                      ':jours'=> $jours,
    				                      ':annonce'=> $annonce);	
     
    	        $values = join(', ',array_keys($add_annonce));
    	        $req=$connection->prepare( 'INSERT INTO annonce ('.str_replace(':','',$values).') VALUES('.$values.')' );
    	        $req->execute($add_annonce);
    		$idA = $connection->lastInsertId();
     
    	      foreach($_POST['choix'] as $liste){  				 
                  $add_annonce_choix=array(':idA'=> $idA,
    						       ':choix'=> $liste,
    						       ':jours'=> $jours);	
     
    	    $value_choix = implode(', ',array_keys($add_annonce_choix));
                $smt=$connection->prepare( 'INSERT INTO choix_annonce ('.str_replace(':','',$value_choix).') VALUES('.$value_choix.')');
                $smt->execute($add_annonce_choix);				
    	    }

Discussions similaires

  1. [MySQL] Liste déroulante choix multiples + insertion MYSQL
    Par snorky94 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/07/2012, 10h10
  2. [PDO] insertion multiple avec PDO
    Par kate59 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/07/2011, 17h32
  3. [MySQL] choix multiple case a coché et insertion dans la base
    Par sooprano dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/03/2010, 16h57
  4. Insertion d'icône dans un choix multiple
    Par groupe51 dans le forum Java ME
    Réponses: 4
    Dernier message: 12/01/2007, 10h41
  5. formulaire choix multiple
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/02/2003, 18h59

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