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 :

update multiple checkbox [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 update multiple checkbox
    Bonjour j'ai un soucis pour l'update de multiple checkbox

    voici le code php et en dessous le code HMTL

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?PHP
    require'header.php';
     
     
    $nom_update = filter_input(INPUT_POST, 'nom_update');
    $type = filter_input(INPUT_POST, 'type');
    $sex = filter_input(INPUT_POST, 'sex');
    $jour = filter_input(INPUT_POST, 'jour');
    $mois = filter_input(INPUT_POST, 'mois');
    $annee = filter_input(INPUT_POST, 'annee');
    $tail = filter_input(INPUT_POST, 'tail');
    $poid = filter_input(INPUT_POST, 'poid');
    $signe = filter_input(INPUT_POST, 'signe');
    $ethni = filter_input(INPUT_POST, 'ethni');
    $yeux = filter_input(INPUT_POST, 'yeux');
    $cheveux = filter_input(INPUT_POST, 'cheveux');
    $sil = filter_input(INPUT_POST, 'sil');
    $fum = filter_input(INPUT_POST, 'fum');
     
    $nom = filter_input(INPUT_GET, 'token');
    $ID = filter_input(INPUT_GET, 'token_update');
     
     
     
     
    	        $requete = $connection->prepare('SELECT * FROM membre_plus WHERE ID=:ID');  
                $requete->execute(array(':ID'=> $ID));
                $resultat = $requete->fetchAll();       
                $nb_result = count($resultat);	  
    	        if ($nb_result == 1){
     
    			if(isset($_POST['choix'])){
    	        $choix ='';
    	        for ($i=0;$i<count($_POST['choix']);$i++){
    	        $choix .= $_POST['choix'][$i];
    	        }		   
     
    			foreach($_POST['choix'] as $explore){	
                $compte_plus = ('UPDATE membre_plus SET ID=:ID
    			                                        type=:type, 
    			                                        jour=:jour, 
    													mois=:mois, 
    													annee=:annee,
    													sex=:sex,
    													tail=:tail,
    													poid=:poid,
    													signe=:signe,
    													ethni=:ethni,
    													yeux=:yeux,
    													cheveux=:cheveux,
    													sil=:sil,
    													fum=:fum,
    													choix=:choix  WHERE ID=:ID');
     
     
     
     
                $req = $connection->prepare($compte_plus);			
                $req->execute(array(':ID'=> $ID,':type'=>$type,':sex'=>$sex,':jour'=>$jour,':mois'=>$mois,
    								':annee'=>$annee,':tail'=>$tail,':poid'=>$poid,
    								':signe'=>$signe,':ethni'=>$ethni,':yeux'=>$yeux,':cheveux'=>$cheveux,
    								':sil'=>$sil,':fum'=>$fum,':choix'=>str_replace(':','',$explore)));
     
    			}
     
                $compte_online = ('UPDATE online_site SET type=:type WHERE pseudo_site=:nom');	
    			$req = $connection->prepare($compte_online);			
                $req->execute(array(':nom'=> $nom_update,
    				                ':type'=>$type));
     
                $compte_membre = ('UPDATE membres SET type=:type WHERE pseudo=:nom');	
    			$req = $connection->prepare($compte_membre);			
                $req->execute(array(':nom'=> $nom_update,
    				                ':type'=>$type));
     
    		header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/m_profil.php?token=".$_SESSION['login']."");
    		exit();
     
     
    }
    else{
    	echo 'Sélectionner un choix!';
    }				
     
    	    }else{   /* Le pseudo  */
            $message_in = 'Soucis de connexion, contacter Webmaster.';
    	    }
     
               $compte  = $connection->prepare('SELECT * FROM membre_plus WHERE nom=:nom');
               $compte->execute(array(':nom'=>$nom));
               while($result = $compte->fetch(PDO::FETCH_OBJ)){	
     
    ?>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          <table width="100%">
      <tr>
        <td width="25%"><input type="checkbox" name="choix[]" value="resto chinois">&nbsp;resto chinois</td>
        <td width="25%"><input type="checkbox" name="choix[]" value="resto italiens">&nbsp;resto italiens</td>
        <td width="25%"><input type="checkbox" name="choix[]" value="resto français">&nbsp;resto français</td>
        <td width="25%"><input type="checkbox" name="choix[]" value="resto oriental">&nbsp;resto oriental</td>
      </tr>
      <tr>
        <td><input type="checkbox" name="choix[]" value="pêchel">&nbsp;pêche</td>
        <td><input type="checkbox" name="choix[]" value="karaté">&nbsp;karaté</td>
        <td><input type="checkbox" name="choix[]" value="judo">&nbsp;judo</td>
        <td><input type="checkbox" name="choix[]" value="tennis">&nbsp;tennis</td>
      </tr>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Et la question est.....

  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
    Bonsoir j'essaye de réalisée un update des choix mais je coince j'ai une erreur dans l'update des choix ?

    le reste des données sans soucis une petite aide, un guidage pour réalisé cela serais sympa.

    Merci

  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
    Et quelle est l'erreur que tu obtiens ?

    Quand même tu peux déjà améliorer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_POST['choix'])){
    	        $choix ='';
    	        for ($i=0;$i<count($_POST['choix']);$i++){
    	        $choix .= $_POST['choix'][$i];
    	        }
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_POST['choix'])){
       $choix = implode(';', $_POST['choix']);
    }
    Je me suis permis de mettre un point virgule comme séparateur pour tes choix.

    Ça c'est pour l'aspect syntaxe PHP pure.
    Pour l'aspect base de données, avoir une colonne contenant une liste de valeurs ce n'est pas une bonne méthode : ajoute une table listant tous les choix de chaque utilisateur (une ligne par choix).

    Si tu fais ça (une ligne par choix), il faut bien faire une boucle foreach() comme tu l'as écris. Par contre le "prepare" va avant la boucle : on ne répète pas la prepation pour chaque valeur.
    Si tu ne fais pas ça (tous les choix dans la table des membres), il n'y a pas de boucle foreach()
    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
    sabotage dans le checkbox pour l'update avec le select je fais comme ici en dessous et avec le checkbox stp?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option <?php if($result->type == 'Femme')  echo 'selected';?> value="Femme">Femme</option>

  6. #6
    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
    Sabotage voici l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td width="25%"><input type="checkbox" name="choix[]"  value="resto chinois" <?php  if($result->choix == 'resto chinois') { echo "checked";} else {echo "";} ?>>resto chinois</td>

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'type='Femme', jour='13', ' à la ligne 2' in C:\Program Files\EasyPHP-5.3.8.1\www\source\m_profil.php:60 Stack trace: #0 C:\Program Files\EasyPHP-5.3.8.1\www\source\m_profil.php(60): PDOStatement->execute(Array) #1 {main} thrown in C:\Program Files\EasyPHP-5.3.8.1\www\source\m_profil.php on line 60

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le bout de code n'a pas de rapport avec le message d'erreur.

    Remplace dans la requête.
    ... SET ID=:ID ...
    Par
    ... SET ...

  8. #8
    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 je pense avoir résolut une soucis maintenant j'ai un autre.

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\Program Files\EasyPHP-5.3.8.1\www\source\m_profil.php:66 Stack trace: #0 C:\Program Files\EasyPHP-5.3.8.1\www\source\m_profil.php(66): PDOStatement->execute(Array) #1 {main} thrown in C:\Program Files\EasyPHP-5.3.8.1\www\source\m_profil.php on line 66

  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
    l'erreur est résolue il me reste un soucis je n'ai qu'un choix dans la table alors que j'ai cocher la totalité ?

    une idée

  10. #10
    Invité
    Invité(e)
    Par défaut
    L'idée*, c'est déjà de nous MONTRER (au minimum) TON code !

    Et quand tu as un message d'erreur :
    • tu le MONTRES en ENTIER
    • tu montres la(les) lignes concernées


    Merci.




    * MERCI de faire un EFFORT pour fournir les infos nécessaires avant de demander niaisement "Une idée?...."** !!
    ** Désolé, ça me met de mauvaise humeur...

  11. #11
    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
    Voilà le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tab_choix = array();		  
               $compte  = $connection->prepare('SELECT * FROM membre_plus WHERE nom=:nom');
               $compte->execute(array(':nom'=>$nom));
               while($result = $compte->fetch(PDO::FETCH_OBJ)){	
           $tab_choix[] = $result->choix;
           $list_choix = (!empty($tab_choix))? implode(', ',$tab_choix) : '';

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <td width="25%"><input type="checkbox" name="choix[]" value="resto italiens" <?php  if($list_choix == 'resto italiens') { echo "checked";}?>>resto italiens</td>
        <td width="25%"><input type="checkbox" name="choix[]" value="resto chinois" <?php  if($list_choix == 'resto chinois') { echo "checked";}?>>resto chinois</td>
    >

  12. #12
    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
    Comme je t'ai dis, la structure lineaire est une impasse.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    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 fait des tests le script passe jusqu'au bouton submit qui ce trouve a la fin les donnée passe mais l'update ne ce fait plus.

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <?PHP
    require'header.php';
     
    if(isset($_POST['submit'])){
    $nom_update = filter_input(INPUT_POST, 'nom_update');
    $type = filter_input(INPUT_POST, 'type');
    $sex = filter_input(INPUT_POST, 'sex');
    $jour = filter_input(INPUT_POST, 'jour');
    $mois = filter_input(INPUT_POST, 'mois');
    $annee = filter_input(INPUT_POST, 'annee');
    $tail = filter_input(INPUT_POST, 'tail');
    $poid = filter_input(INPUT_POST, 'poid');
    $signe = filter_input(INPUT_POST, 'signe');
    $ethni = filter_input(INPUT_POST, 'ethni');
    $yeux = filter_input(INPUT_POST, 'yeux');
    $cheveux = filter_input(INPUT_POST, 'cheveux');
    $sil = filter_input(INPUT_POST, 'sil');
    $fum = filter_input(INPUT_POST, 'fum');
    $detail_p = filter_input(INPUT_POST, 'detail_p');
    $ID = filter_input(INPUT_POST, 'token_update');
     
     if(!empty($_POST['choix'])){
       $choix = implode('&nbsp;-&nbsp;', $_POST['choix']);
     
     
     
    echo $nom_update;
    echo $tail;
    echo $sil;
    echo $signe;
    echo $fum;
    echo $choix;
     
     
     
     
                $compte_plus = ('UPDATE membre_plus SET 
                                                        type=:type, 
                                                        jour=:jour, 
                                                        mois=:mois, 
                                                        annee=:annee,
                                                        sex=:sex,
                                                        tail=:tail,
                                                        poid=:poid,
                                                        signe=:signe,
                                                        ethni=:ethni,
                                                        yeux=:yeux,
                                                        cheveux=:cheveux,
                                                        sil=:sil,
                                                        fum=:fum,
                                                        choix=:choix,
                                                        detail_p=:detail-p  WHERE ID=:ID');
     
     
     
                $req_plus = $connection->prepare($compte_plus);			
                $req_plus->execute(array(':ID'=> $ID,':type'=>$type,
                              ':sex'=>$sex,':jour'=>$jour,
                    ':mois'=>$mois,':annee'=>$annee,
                    ':tail'=>$tail,':poid'=>$poid,
                    ':signe'=>$signe,':ethni'=>$ethni,
                    ':yeux'=>$yeux,':cheveux'=>$cheveux,
                    ':sil'=>$sil,':fum'=>$fum,
                    ':choix'=>$choix,
                    ':detail_p'=>$detail_p)); // ici l'erreur
     
     
                $compte_online = ('UPDATE online_site SET type=:type WHERE pseudo_site=:nom');	
                $req = $connection->prepare($compte_online);			
                $req->execute(array(':nom'=> $nom_update,':type'=>$type));
     
                $compte_membre = ('UPDATE membres SET type=:type WHERE pseudo=:nom');	
                $req = $connection->prepare($compte_membre);			
                $req->execute(array(':nom'=> $nom_update,':type'=>$type));
     
        header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/m_profil.php?token=".$_SESSION['login']."");
        exit();	
     }
     
            }else{   
            $message = 'Si vous changé votre profik cocher un choix au moins.';
    	    }    
     
    function Age($date_naissance){
        $arr1 = explode('/', $date_naissance);
        $arr2 = explode('/', date('d/m/Y'));		
        if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0])))
        return $arr2[2] - $arr1[2];
        return ($arr2[2] - $arr1[2] - 1) + 1;
    }
     
    		   $tab_choix = array();		  
               $compte  = $connection->prepare('SELECT * FROM membre_plus WHERE nom=:nom');
               $compte->execute(array(':nom'=>@$_GET['token']));
               while($result = $compte->fetch(PDO::FETCH_OBJ)){	
    		   $tab_choix[] = $result->choix;
    		   $list_choix = (!empty($tab_choix))? implode('&nbsp;-&nbsp;',$tab_choix) : '';	   	
     
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Update multiples et PHP
    Par nath-0-0 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/04/2006, 12h48
  2. update multiple dans une meme colonne
    Par debdev dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/01/2006, 21h46
  3. Update multiple [8i]
    Par Endymion222 dans le forum Oracle
    Réponses: 3
    Dernier message: 10/01/2006, 09h46
  4. UPDATE multiples : un seul pris en compte
    Par balti dans le forum Requêtes
    Réponses: 7
    Dernier message: 29/12/2005, 12h02
  5. Réponses: 3
    Dernier message: 25/01/2005, 12h31

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