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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Problème d'affichage des valeurs de mes cases a cocher


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut Problème d'affichage des valeurs de mes cases a cocher
    Salutations,
    via ce code je récupère mes valeurs de case a cocher
    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
     
    <?php 	
    	require_once('php/connexion.php');
     
    	$sql = "select preference from conducteurs where n_conducteur = 17";
    	$resultat = mysql_query($sql) or die(mysql_error());
    	while($rows = mysql_fetch_assoc($resultat)){
    	$preference = explode(',', $rows['preference']);
    	}
    	if (in_array('1',$preference)) echo"checked = 'checked'";
    	foreach ( $preference as $var){
    	?>
    	<input type="checkbox" name="checkbox[]" id="checkbox" value="<?php $var['preference'];?>"/><?php echo $var[ 'preference' ]; ?>
        <?php
    	}
    ?>
    le problème est que lors de l'affichage, j'affiche seulement le premier caractère du mot, et la deuxième case a cocher s'affiche vide, plus normalement ses cases doivent être cocher mais ils ne le sont pas, exemple

  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
    Stocker des valeurs multiples dans un meme champ, cela amene forcemment a des gymnastiques pour retraiter les données ; elles sont de plus globalement inexploitables.

    La vraie solution serait de revoir la facon dont est structurée ta base.

    Sinon, commence par controler ce que vaut $preference :
    Pour les cases cochés ca ne peut evidemment pas fonctionner puisque ton "checked" est ecrit avant les cases.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    Merci pour ta réponse, concernant le controle, j'ai déjà fais un teste et c'est correcte, il est afficher dans mon navigateur les valeurs de mes cases a cocher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => accepte_enfants [1] => accepte_femmes )
    donc j'ai modifier le code, et ce qui suit et le résultat:
    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
     
    <?php 	
    	require_once('php/connexion.php');
     
    	$sql = "select preference from conducteurs where n_conducteur = 17";
    	$resultat = mysql_query($sql) or die(mysql_error());
    	while($rows = mysql_fetch_assoc($resultat)){
    	$preference = print_r(explode(',', $rows['preference']));
    	}
    	foreach ( $preference as $var){
    ?>
    <input type="checkbox" name="preference" value="<?php $var['preference'];?>"  <?php if (in_array('1',$preference)) echo"checked = 'checked'"; ?> /> <?php echo $var[ 'preference' ]; ?> 
    <?php 
    	}
    ?>
    <?php
    avec cette erreur
    Warning: Invalid argument supplied for foreach() on line 9

  4. #4
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    J'ai cru comprendre que tu voulais des cases à cocher comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="checkbox[]" value="<?php echo $var;?>" <?php if (condition) echo 'checked="checked"'?>/><?php echo $var; ?>
    Remarque 1 : Tes préférences sont stockées dans $val (et non $val['preferences'].
    Remarque 2 : J'ai enlevé le id="checkbox", les id sont sensés être uniques.
    Remarque 3 : Je n'ai pas compris quelle était la condition pour qu'une case soit cochée, à toi de préciser.

    Pour afficher tes préférences (débugage) procède plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($rows = mysql_fetch_assoc($resultat)){
    	$preference = explode(',', $rows['preference']);
            print_r($preference);
    }
    Si ça peut t'aider...
    Fred

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    Voila, j'ai corrigé mes erreur, ci joint le code
    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
     
    <?php 	
    	require_once('php/connexion.php');
     
    	$sql = "select preference from conducteurs where n_conducteur = 17";
    	$resultat = mysql_query($sql) or die(mysql_error());
    	while($rows = mysql_fetch_assoc($resultat)){
    	$preference = explode(',', $rows['preference']);
    	}
    	foreach ( $preference as $var){
    ?>
    <input type="checkbox" name="preference" value="<?php $var;?>"  <?php if (in_array('1',$preference)) echo"checked = 'checked'"; ?> /> <?php echo $var; ?> 
    <?php 
    	}
    ?>
    reste un problème c'est celui des cases cochés, normalement ils doivent être cochées mais ils ne le sont pas!!

  6. #6
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Dans ton tableau $preference, tu as deux éléments :
    accepte_enfants et accepte_femmes.

    La condition que tu donnes pour qu'une case soit cochée est :
    si '1' est dans le tableau.
    Comme '1' n'est ni accepte_enfants ni accepte_femmes, tes cases ne sont pas cochées.

    Fred

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    d'accord je vois, et qu'est ce que vous suggérez comme solution?!

    peut être quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (in_array('accepte_fumeur, accepte_enfants',$preference))

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    Bon, je viens de éditer a nouveau ce script, ci joint le code:
    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
     
    <?php 	
    	require_once('php/connexion.php');
     
    	$sql = "select preference from conducteurs where n_conducteur = 17";
    	$resultat = mysql_query($sql) or die(mysql_error());
    	while($rows = mysql_fetch_assoc($resultat)){
    	$preference = explode(',', $rows['preference']);
    	}
    	foreach ( $preference as $var){
    ?>
    <input type="checkbox" name="preference" value="<?php $var;?>" checked = <?php if (in_array('1',$preference)) echo "checked";?> /> <?php echo $var; ?> 
    <?php 
    	}
    ?>
    et ça marche, j'ai mes cases qui sont cochées!!

  9. #9
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    C'est peut-être cela que tu veux faire ?
    Tu as une liste de préférences possibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $preferencesPossibles=array('accepte_fumeurs','accepte_enfants',...);
    Et pour toutes tes préférences, tu as une cases à cocher...
    qui est cochée si le conducteur a cette préférence
    qui n'est pas cochée sinon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ( $preferencesPossibles as $var){
    ?>
    <input type="checkbox" name="preference" value="<?php $var;?>"  <?php if (in_array($var,$preference)) echo"checked = 'checked'"; ?> /> <?php echo $var; ?> 
    <?php 
    }
    Fred

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par micetf Voir le message
    C'est peut-être cela que tu veux faire ?
    Tu as une liste de préférences possibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $preferencesPossibles=array('accepte_fumeurs','accepte_enfants',...);
    Et pour toutes tes préférences, tu as une cases à cocher...
    qui est cochée si le conducteur a cette préférence
    qui n'est pas cochée sinon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ( $preferencesPossibles as $var){
    ?>
    <input type="checkbox" name="preference" value="<?php $var;?>"  <?php if (in_array($var,$preference)) echo"checked = 'checked'"; ?> /> <?php echo $var; ?> 
    <?php 
    }
    Fred
    c'est juste, merci pour ton aide,mais il y a un problème au niveau des cases cochées, eh bien si un conducteur a inséré 2 préférences dans la table eh bien il y a juste une seule case qui est cochée, l'autre non
    code:
    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
     
    <?php 	
    	require_once('php/connexion.php');
     
    	$sql = "select preference from conducteurs where n_conducteur = 17";
    	$resultat = mysql_query($sql) or die(mysql_error());
    	while($rows = mysql_fetch_assoc($resultat)){
    	$preference = explode(',', $rows['preference']);
     
    	$preferencesPossibles=array('accepte_fumeur','accepte_animeaux','accepte_enfants', 'accepte_femmes', 'accepte_musique');
    }
    	foreach ( $preferencesPossibles as $var){
    ?>
    <input type="checkbox" name="preference" value="<?php $var;?>"  <?php if (in_array($var,$preference)) echo"checked = 'checked'"; ?> /> <?php echo $var; ?>  
    <?php 
    	}
    ?>

  11. #11
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    L'attribut name doit-être un tableau name="preference[]" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="preference[]" value="<?php $var;?>"  <?php if (in_array($var,$preference)) echo"checked = 'checked'"; ?> />
    Ou plutôt, c'est mieux que ce soit un tableau pour la récupération des infos.
    Mais cela ne changera pas ton problème de cases cochées ou non.

    Fred

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    oui, mais je vois pas pourquoi ça m'affiche toujours une seule case cochées, et l'autre case non sachant que le conducteur ayant le numéro 17 a inséré 2 préférences dans la table conducteurs?!

  13. #13
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    J'ai testé ton script et à priori tu devrais avoir deux cases cochées.
    SAUF si les valeurs (accepte_fumeurs,....) de tes préférences ne sont pas orthographiées de la même manière
    dans le champ preferences de ta table conducteur et
    dans ta table $preferencesPossibles.
    Fred

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form>
    <?php 	
    	$preference = array('accepte_enfants', 'accepte_femmes');
     
    	$preferencesPossibles=array('accepte_fumeur','accepte_animaux','accepte_enfants', 'accepte_femmes', 'accepte_musique');
     
    	foreach ( $preferencesPossibles as $var){
    ?>
    <input type="checkbox" name="preference[]" value="<?php echo $var;?>"  <?php if (in_array($var,$preference)) echo 'checked="checked"'; ?> /> 
    <?php echo $var; ?>  
    <?php 
    	}
    ?>
    </form>

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par micetf Voir le message
    J'ai testé ton script et à priori tu devrais avoir deux cases cochées.
    SAUF si les valeurs (accepte_fumeurs,....) de tes préférences ne sont pas orthographiées de la même manière
    dans le champ preferences de ta table conducteur et
    dans ta table $preferencesPossibles.
    Fred
    Non je crois pas, les mots sont bien orthographiées mais ça marche pas
    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
     
    --
    -- Structure de la table `conducteurs`
    --
     
    CREATE TABLE IF NOT EXISTS `conducteurs` (
      `n_conducteur` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `nom` varchar(15) NOT NULL,
      `prenom` varchar(15) NOT NULL,
      `adresse` varchar(45) NOT NULL,
      `age` int(3) NOT NULL,
      `email` varchar(45) NOT NULL,
      `tel` varchar(14) NOT NULL,
      `civilite` varchar(15) NOT NULL,
      `preference` varchar(255) NOT NULL,
      `n_assurance` int(10) NOT NULL,
      `matriculation` varchar(10) NOT NULL,
      `pseudo` varchar(255) NOT NULL,
      `mdp` varchar(10) NOT NULL,
      `nbr_passagers` int(10) unsigned NOT NULL,
      PRIMARY KEY (`n_conducteur`) USING BTREE
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;
     
    --
    -- Contenu de la table `conducteurs`
    --
     
    INSERT INTO `conducteurs` (`n_conducteur`, `nom`, `prenom`, `adresse`, `age`, `email`, `tel`, `civilite`, `preference`, `n_assurance`, `matriculation`, `pseudo`, `mdp`, `nbr_passagers`) VALUES
    (13, 'stiti', 'bochra', 'kouba', 25, 'bochra_stiti@yahoo.fr', '0663101220', 'Melle', 'accepte_enfants', 54453654, '36985214', 'bochra', 'otto', 4),
    (16, 'stiti', 'amine', 'kouba', 27, 'amine27@yahoo.fr', '0772486670', 'M', ' accepte_fumeur, accepte_enfants', 246451, '5121524', 'amine27', '123456', 4),
    (17, 'nano', 'nano', 'kouba', 25, 'aaa', '021456874', 'M', 'accepte_enfants, accepte_femmes', 2465454, '4545', 'nano', 'nano', 54546431);

  15. #15
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    sa y est ça marche pour le conducteur numéro 17, j'ai juste ajouté un espace après la virgule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $preference = explode(', ', $rows['preference']);
    mais ça marche pas pour le conducteur numéro 16 même si ce dernier a 2 préférence enregistrées dans la table
    je me demande pourquoi??

  16. #16
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Dans ta table, les valeurs du champ preferences ne doivent pas avoir d'espace :
    'accepte_enfants,accepte_femmes' au lieu de
    'accepte_enfants, accepte_femmes'.
    Fred

  17. #17
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par micetf Voir le message
    Dans ta table, les valeurs du champ preferences ne doivent pas avoir d'espace :
    'accepte_enfants,accepte_femmes' au lieu de
    'accepte_enfants, accepte_femmes'.
    Fred
    c'est juste, mais pourquoi ça marche pas pour le conducteur numéro 16??
    avez-vous une idée ??

  18. #18
    Membre régulier
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 71
    Points
    71
    Par défaut
    J'ai rectifié le code d'insertion, et j'ai mis a la place , résultat les valeurs des cases a cochées sont insérées sans espace comme tu as dis dans ton poste
    exemple: accepte_fumeur,accepte_enfants,accepte_musique
    . Mais lorsque j'affiche ces valeurs j'en ai que deux affiché:
    accepte_enfants et accepte_musique
    la premier valeur non!!
    je sais pas pourquoi??

  19. #19
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Le mieux est de supprimer tous les espaces que tu pourrais mettre autour de tes préférences parce que :

    Résultats de explode(',',$preferences)

    Quand $preferences=' accepte_enfants, accepte_femmes, accepte_fumeurs';
    " accepte_enfants"
    " accepte_femmes"
    " accepte_fumeurs"

    Quand $preferences='accepte_enfants, accepte_femmes, accepte_fumeurs';
    "accepte_enfants"
    " accepte_femmes"
    " accepte_fumeurs"

    Quand $preferences='accepte_enfants,accepte_femmes,accepte_fumeurs';
    "accepte_enfants"
    "accepte_femmes"
    "accepte_fumeurs"

    Et comme " accepte_enfants" != "accepte_enfants",
    si tu n'es pas assez vigilant sur l'utilisation des espaces,
    tu as évidemment des surprises.

    Fred

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2014, 16h01
  2. [Web Service] Problème d'affichage des valeurs renvoyées par un webservice
    Par informatique34 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 11/07/2011, 13h34
  3. Réponses: 11
    Dernier message: 14/03/2008, 16h45
  4. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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