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

Langage PHP Discussion :

[Tableaux] Problème de foreach avec des checkboxes


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut [Tableaux] Problème de foreach avec des checkboxes
    Bonsoir a tous(te),
    J'ai un probleme avec des checkbox qui je suis sur est tres facile a resoudre pour quelqu'un qui s'y connait un minimum, voila j'ai des checkbox declarees de cette facon:

    declaration des checkbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <input name="typeperf[]" type="checkbox" id="typeperf" value="Performer"> 
        <input name="typeperf[]" type="checkbox" id="typeperf" value="Panel"> 
        <input name="typeperf[]" type="checkbox" id="typeperf" value="Workshop">
    j'annonce ensuite un array()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $typeperf = array('Performer','Panel','Workshop');
    et mon probleme vient ensuite pour le reste avec un foreach pour chaque checkbox qui est cense rejoindre une fonction if ,le probleme vient du fait que je sais pas quoi declarer a l'interieur de mon foreach:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     foreach($_POST['typeperf'] as $typeperf {if...})
    Quelqu'un de tres sympathique pourrait il repondre a ce cas d'ecole s'il vous plait?

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    tu dois faire quelles opérations pour chaques cases à cocher ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    En fait mon programme lance une recherche dans une base de donnees,donc si je coche une case et que j'appuie sur le bouton recherche il va me chercher les informations correspondantes.L'ennui c'est que si je coche plusieurs cases il ne fait pas la recherche pour chaque:
    Pour chaque case a cochees il faut qu'il verifie en plus cette condition(qui correspond en fait a mettre en lien plusieurs autres zones de recherches comme des menus de selection) :
    if(ISSET($_POST['typeperf'])&&$_POST['typeperf']!='')
    {if($and) $where = $where.' AND ';
    $where = $where.' pr.TypePerf="'.$_POST['typeperf'].'"';
    $and=true;}

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    si par exemple tu coches les cases "Performer" et "Panel"
    tu auras ça dans $_POST['typeperf'] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array('Performer', 'Panel')
    donc pour construire ta requete, tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requete  = "SELECT *";
    $requete .= " FROM Table";
    $requete .= " WHERE 1";
     
    foreach($_POST['typeperf'] as $typeperf) {
        $valeurSQL = addslashes($typeperf); // pour protéger les données si quelqu'un essaye de pirater ta page
        $requete .= " AND pr.TypePerf = '$valeurSQL'";
    }
    et à la fin tu obtiendra la requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM Table
    WHERE 1
    AND pr.TypePerf = 'Performer'
    AND pr.TypePerf = 'Panel'

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Question candide
    A quoi correspond le 1?

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    c'est juste pour contruire la requete avec les AND
    en fait "WHERE 1 AND a AND b AND c" fait la même chose que "WHERE a AND b AND c" mais dans le 2me cas il faut faire un test dans la boucle pour commencer par "WHERE" à la place de "AND"

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Merci
    Merci pour le temps que tu m'a consacre mais je n'arrive pas a comprendre tout ce qui est marque, en fait je ne comprends pas la logique php car j'ai appris le php par experience avec quelqu'un a mes cotes et non par des cours(que je n'ai malheureusement pas le temps de suivre) en principe quelqu'un devrait me depanner,si il trouve la solution je me ferais un plaisir de l'ecrire et d'indiquer que cette discussion est resolue,dans tout les cas un grand merci pour tes aides et conseils, bonne journee

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Je pensais que certains de mes collegues m'auraient aide pour ce probleme de checkbox mais finalement personne n'est competent la ou je travaille,donc je m'excuse pour avoir coupe la discussion la derniere fois et pour avoir abandonne si facilement.
    Du coup je me suis replonge dans les checkbox et ai esseye d'applique tes conseils l'ennui c'est que je n'y arrive toujours pas, j'ai mis en rouge les changements que j'ai effectue et les codes que tu m'as conseille d'insere,mais on me met le message d'erreur :"
    Warning: Invalid argument supplied for foreach() "
    Peux tu m'aider encore une fois s'il te plait?
    Ce probleme de checkbox est le dernier a resoudre pour terminer mon programme.
    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
        <input name="typeperf[]" type="checkbox" id="typeperf" value="Performer"> 
        <input name="typeperf[]" type="checkbox" id="typeperf" value="Panel"> 
        <input name="typeperf[]" type="checkbox" id="typeperf" value="Workshop">
    
    <?php
    
    array('Performer', 'Panel','Workshop');
    $where = 'WHERE';
    $and=false; //au départ aucun type d'information n'a été détécté
    if(ISSET($_POST['perfname'])&&$_POST['perfname']!='') 
        {$where = $where.'  pr.PerfName="'.$_POST['perfname'].'"';
        $and=true;}
    if(ISSET($_POST['typeperf'])&&$_POST['typeperf']!='') 
        foreach($_POST['typeperf'] as $typeperf)
        {if($and) $where = $where.' AND '; //Si il y a déjà une recherche de faite auparavant, j'ajoute un AND
        $where = $where.'  pr.TypePerf="'.$_POST['typeperf'].'"';
        $and=true;}
    if(ISSET($_POST['perfcodename'])&&$_POST['perfcodename']!='') 
        {if($and) $where = $where.' AND ';
        $where = $where.'  pr.PerfCodeName="'.$_POST['perfcodename'].'"';
        $and=true;}
    if(ISSET($_POST['date'])&&$_POST['date']!='') 
        {if($and) $where = $where.' AND ';
        $where = $where.'  pf.Date="'.$_POST['date'].'"';
        $and=true;}
    if(ISSET($_POST['start'])&&$_POST['start']!='') 
        {if($and) $where = $where.' AND ';
        $where = $where.'  pf.Start="'.$_POST['start'].'"';
        $and=true;}
    if(ISSET($_POST['end'])&&$_POST['end']!='') 
        {if($and) $where = $where.' AND ';
        $where = $where.'  pf.End="'.$_POST['end'].'"';
        $and=true;}
    if(ISSET($_POST['stage'])&&$_POST['stage']!='') 
        {if($and) $where = $where.' AND ';
        $where = $where.'  pl.Stage="'.$_POST['stage'].'"';
        $and=true;}    
    if(ISSET($_POST['locstage'])&&$_POST['locstage']!='') 
        {if($and) $where = $where.' AND ';
        $where = $where.'  pl.LocStage="'.$_POST['locstage'].'"';
        $and=true;}
    if($and!=true) $where = $where.' 1';
    $requete  = "SELECT *";
    $requete .= " FROM Table";
    $requete .= " WHERE 1";
        
    foreach($_POST['typeperf'] as $typeperf) {
        $valeurSQL = addslashes($typeperf); // pour protéger les données si quelqu'un essaye de pirater ta page
        $requete .= " AND pr.TypePerf = '$valeurSQL'";
    }
    $q = 'SELECT pr.*,
    TIME_FORMAT(pf.Start, \'%h:%i %p\') AS start_12,
    TIME_FORMAT(pf.End, \'%h:%i %p\') AS end_12,
    pf.*,
    pl.*
    FROM performer AS pr
    INNER JOIN performance AS pf ON pr.IDPerf=pf.IDPerf
    INNER JOIN place AS pl ON pl.CodeStage=pf.CodeStage '.$where;
    echo $_POST['perfname'];
    
    $r = mysql_query($q);
    while ($row=mysql_fetch_array($r)){
        $idperf = $row[IDPerf];
        $perfname = $row[PerfName];
        $typeperf = $row[TypePerf];
        print "<td>$typeperf</td>\n";
    ?>

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    il manque la parenthèse fermante à ton "while" tout en bas du code

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Merci grace a tes conseils et ceux d'un autre internaute j'ai pu bien avance sur ce probleme de checkbox,l'ennui c'est que je suis confronte a un nouveau probleme de syntaxe
    maintenant quand je lance une recherche et que je coche mes cases "Typeperf" il va me chercher toutes les informations qui ont des "Performer" et des "Panel"(si ces deux cases ont ete cochees)c'est a dire qu'il ne me sort aucune information,c'est pourquoi j'ai change le AND par un OR(qui m'affiche les informations voulus) mais du coup il ne me fait plus la liaison avec les autres champs de recherches,par exemple si je lui dis va me chercher les informations qui ont des Performer et des Panel et qui jouent a telle date il va me chercher les informations qui ont des panel a toutes les dates et des performer a la date entree,en gros il ne me fait pas:
    - (Panel AND Date) OR (Performer AND Date)
    mais me fait
    - Panel OR Performer AND Date et du coup ne me prend plus entierement en compte la date peux tu me dire comment faut il faire?
    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
     array('Performer', 'Panel','Workshop'); 
    $where = 'WHERE'; 
    $and=false; //au départ aucun type d'information n'a été détécté 
    if(ISSET($_POST['perfname'])&&$_POST['perfname']!='')  
         {$where = $where.'  pr.PerfName="'.$_POST['perfname'].'"'; 
         $and=true;} 
          if(isset($_POST['typeperf']) AND is_array($_POST['typeperf'])) 
           { 
                   foreach($_POST['typeperf'] AS $valeur) 
                  { 
    if(ISSET($_POST['typeperf'])&&$_POST['typeperf']!='')  
         {if($and) $where = $where.' OR '; //C'est ici qu'il y a probleme j'ai change le AND par un OR 
         $where = $where.'  pr.TypePerf="'.$valeur.'"'; 
         $and=true;}}} 
    if(ISSET($_POST['perfcodename'])&&$_POST['perfcodename']!='')  
         {if($and) $where = $where.' AND '; 
         $where = $where.'  pr.PerfCodeName="'.$_POST['perfcodename'].'"'; 
         $and=true;} 
    if(ISSET($_POST['date'])&&$_POST['date']!='')  
         {if($and) $where = $where.' AND '; 
         $where = $where.'  pf.Date="'.$_POST['date'].'"'; 
         $and=true;} 
    

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Programme fini
    J'ai finalement termine mon programme,un grand merci a tous ceux qui ont pris de leur temps pour m'aider et ont contribue a creer mon programme.
    Merci

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

Discussions similaires

  1. [WD14] Problème d'accès natif avec des checkboxes
    Par Baboulinet_ dans le forum WinDev
    Réponses: 8
    Dernier message: 04/02/2013, 09h05
  2. Problème de gcnew avec des tableaux
    Par tank86 dans le forum C++/CLI
    Réponses: 3
    Dernier message: 04/11/2010, 23h13
  3. Problème avec des checkbox
    Par breizh44 dans le forum Débuter
    Réponses: 14
    Dernier message: 27/05/2009, 18h54
  4. Problème en mémoire avec des tableaux
    Par dword2add dans le forum C++
    Réponses: 3
    Dernier message: 11/11/2007, 13h36
  5. Problème simple avec des checkbox
    Par nanor21 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 00h26

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