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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    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 confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  3. #3
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    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 confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    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
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Par défaut Question candide
    A quoi correspond le 1?

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    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
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    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
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    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";
    ?>

+ 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