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 :

Requete avec checkbox


Sujet :

PHP & Base de données

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Requete avec checkbox
    Bonjour,

    J'ai un formulaire avec des listes, case à cocher, etc. Et mon problème et quand je sélectionne plusieurs case à cocher, on me dit que je n'ai pas de résultats correspondant au critères sélectionnés. Ce que je voudrais et que j'arrive pas à faire c'est de mettre des parenthèses pour cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if ((isset($_POST['enCours'])==true) && $_POST["enCours"]!="")
    {
    	helper_sql($requete_where, 'stage.dateDebut','<=', $date);
    	helper_sql($requete_where, 'stage.dateFin','>=', $date);
    }
    Et mettre des OR entre les cases à cocher

    Voici ma requête
    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
    $requete_select = "SELECT
    	numStage,
    	stage.libelle AS libelleStage,
    	DATE_FORMAT(dateDebut,'%d/%m/%Y') AS dateDebut,
    	DATE_FORMAT(dateFin,'%d/%m/%Y') AS dateFin,
    	theme.libelle AS themeStage,
    	DATE_FORMAT(dateLimite,'%d/%m/%Y') dateLimite,
    	nbMax,
    	specialite.libelle AS libelleSpe
    FROM stage
    	INNER JOIN theme ON stage.id_Theme = theme.id
            INNER JOIN specialite ON stage.id_Specialite = specialite.id
            LEFT OUTER JOIN inscrire ON inscrire.numStage_Stage = stage.numStage
    	LEFT OUTER JOIN personnel ON personnel.id = inscrire.id_Personnel ";
    $requete_where = "";
    if ((isset($_POST['passe'])==true) && $_POST["passe"]!="")
    	helper_sql($requete_where, 'stage.dateFin','<', $date);
    if ((isset($_POST['aVenir'])==true) && $_POST["aVenir"]!="")
    	helper_sql($requete_where, 'stage.dateDebut','>', $date);
    if ((isset($_POST['enCours'])==true) && $_POST["enCours"]!="")
    {
    	helper_sql($requete_where, 'stage.dateDebut','<=', $date);
    	helper_sql($requete_where, 'stage.dateFin','>=', $date);
    }
    if(isset($_POST["themeStage"]) && $_POST["themeStage"]!="")
    	helper_sql($requete_where, 'theme.id', '=', $_POST["themeStage"]);
    if(isset($_POST["nomPrenomVisiteur"]) && $_POST["nomPrenomVisiteur"]!="")
    	helper_sql($requete_where, 'inscrire.id_Personnel', '=', $_POST["nomPrenomVisiteur"]);
    if(isset($_POST["dateDebut"]) && $_POST["dateDebut"]!="")
    {
    	$dateDebut = conversionDateFrançaisVersMySql($_POST["dateDebut"]); 
    	helper_sql($requete_where, 'stage.dateDebut', '=',$dateDebut);
    }
    if(isset($_POST["dateFin"]) && $_POST["dateFin"]!="")
    {
    	$dateFin = conversionDateFrançaisVersMySql($_POST["dateFin"]); 
    	helper_sql($requete_where, 'stage.dateFin','=', $dateFin);
    }
    $requete = $requete_select.' '.$requete_where. 'ORDER BY stage.numStage';
    Ma fonction utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Fonction qui permet de vérifier s'il s'agit du premier critère sélectionné ou non
    function helper_sql(&$sql_where, $champ, $connecteur, $valeur){
        if($sql_where != "")
    	$sql_where .= " AND";
        else
    	$sql_where .= " WHERE";
     
        $sql_where .= " ".$champ. " ".$connecteur."'".mysql_escape_string($valeur). "'";
    }
    un echo de ma requête avec une valeur sélectionnée dans une liste et deux case à coché sélectionnées
    2013-07-02SELECT numStage, stage.libelle AS libelleStage, DATE_FORMAT(dateDebut,'%d/%m/%Y') AS dateDebut, DATE_FORMAT(dateFin,'%d/%m/%Y') AS dateFin, theme.libelle AS themeStage, DATE_FORMAT(dateLimite,'%d/%m/%Y') dateLimite, nbMax, specialite.libelle AS libelleSpe FROM stage INNER JOIN theme ON stage.id_Theme = theme.id INNER JOIN specialite ON stage.id_Specialite = specialite.id LEFT OUTER JOIN inscrire ON inscrire.numStage_Stage = stage.numStage LEFT OUTER JOIN personnel ON personnel.id = inscrire.id_Personnel WHERE stage.dateFin <'2013-07-02' AND stage.dateDebut <='2013-07-02' AND stage.dateFin >='2013-07-02' AND theme.id ='2'ORDER BY stage.numStage
    il faudrait qu'il y ai des parenthèses là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stage.dateDebut <='2013-07-02' AND stage.dateFin >='2013-07-02'
    et un or :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE stage.dateFin <'2013-07-02' OR (stage.dateDebut <='2013-07-02' AND stage.dateFin >='2013-07-02')
    Merci de votre aide

  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
    Il faut que tu enrichisses ta fonction helper_sql pour gérer ces cas.
    Ca peut être simplement l'ajout d'un paramètre pour un caractère initial, pour un caractère final et pour la condition AND/OR.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ta fonction helper_sql n'est pas adaptée pour. C'est une fonction perso ou tu l'as récupérée quelque part ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    On me l'a donnée et j'ai déjà rajouté un paramètre, mais là je vois pas comment faire pour rajouter autre chose

  5. #5
    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 manques d'imagination :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function helper_sql(&$sql_where, $champ, $connecteur, $valeur, $initialcar = ''){
        if($sql_where != "")
    	$sql_where .= " AND";
        else
    	$sql_where .= " WHERE";
     
        $sql_where .= " ".$initialcar . $champ. " ".$connecteur."'".mysql_escape_string($valeur). "'";
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    helper_sql($requete_where, 'stage.dateDebut','<=', $date, '(');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Version tordue (je suis qu'il y a plus simple pour faire pareil )
    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
    function helper_sql(&$sql_where, $champ, $connecteur, $valeur, $operateur = 'AND' ){
        if($sql_where != "") {
            $sql_where .= " AND";
        } else {
            $sql_where .= " WHERE";
        }
        if (is_array($champ) && is_array($valeur) && is_array($connecteur)) {
            $criteres = array();
            foreach ($champ as $k => $ch) {
                $val = $valeur[$k];
                $conc = $connecteur[$k];
                $criteres[] = " ".$ch. " ".$conc."'".mysql_escape_string($val). "'";            
            }
            $sql_where .= ' ( '.implode(' '.$operateur.' ', $criteres).' ) ';
        } else {
            $sql_where .= " ".$champ. " ".$connecteur."'".mysql_escape_string($valeur). "'";
        }
    }
    Et pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ((isset($_POST['enCours'])==true) && $_POST["enCours"]!="")
    {
        helper_sql($requete_where, array('stage.dateDebut', 'stage.dateFin'), array('<=', '>='), array($date, $date), 'OR');
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Sa va pas:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (stage.dateDebut <='2013-07-02' AND ) stage.dateFin >='2013-07-02'

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    moi je te dirais de commencer par comprendre ce que tu fais, et d'arrêter dès maintenant de prendre des scripts pour les quels tu ne passera pas plus de 5 mn... Ce qui me gène à dire cela, c'est que le script que tu utilise est peut être sympa... voilà, tu n'a pas le temps... mais je veux dire fait autre chose... c'est pas ton truc quoi... lol.
    Conception / Dev

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    c juste la fonction qu'on m'a donné. Le script je l'ai fais tout seul

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    et en plus, c'est toi qui a fait le "gros" du script.... méaculpa, mais je reste positionné pareil, cad tu n'a pas pris 5 mn pour te mettre a la place de ce bug dans ton script: ché pas respire; lol
    Conception / Dev

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Celira j'ai pris la fonction que tu ma proposer en changeant un truc mais j'ai pas ce que je veux:
    stage.dateDebut >'2013-07-02' AND ( stage.dateDebut <='2013-07-02' AND stage.dateFin >='2013-07-02' )
    Avant la parenthèse je veux pas un AND mais un OR

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ben tu ajoutes encore un paramètre pour gérer l'opérateur au début.
    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
    function helper_sql(&$sql_where, $champ, $connecteur, $valeur, $operateur = 'AND', $operateurGroupe = 'AND' ){
        if($sql_where != "") {
            $sql_where .= " ".$operateur;
        } else {
            $sql_where .= " WHERE";
        }
        if (is_array($champ) && is_array($valeur) && is_array($connecteur)) {
            $criteres = array();
            foreach ($champ as $k => $ch) {
                $val = $valeur[$k];
                $conc = $connecteur[$k];
                $criteres[] = " ".$ch. " ".$conc."'".mysql_escape_string($val). "'";            
            }
            $sql_where .= ' ( '.implode(' '.$operateurGroupe.' ', $criteres).' ) ';
        } else {
            $sql_where .= " ".$champ. " ".$connecteur."'".mysql_escape_string($valeur). "'";
        }
    }
    A appeler avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    helper_sql($requete_where, array('stage.dateDebut', 'stage.dateFin'), array('<=', '>='), array($date, $date), 'AND', 'OR');
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Sa fonctionne que si j'ai que deux case à cocher aussi, si j'en ai une troisième, j'aoute un autre paramètre?

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    par exemple,
    si je sélectionne un thème et que je coche mes trois cases il doit me retourner forcément un enregistrement car j'ai un stage avec se thème dans ma base et là il me retourne rien
    voilà la fin de la requete:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE theme.id ='2' AND stage.dateFin <'2013-07-04' AND stage.dateDebut >'2013-07-04' AND ( stage.dateDebut <='2013-07-04' AND stage.dateFin >='2013-07-04' ) ORDER BY stage.numStage

    et je voudrai sa:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE theme.id ='2' AND (stage.dateFin <'2013-07-04' OR stage.dateDebut >'2013-07-04' OR( stage.dateDebut <='2013-07-04' AND stage.dateFin >='2013-07-04' )) ORDER BY stage.numStage

  15. #15
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bon à ce stade, il faut se rendre à l'évidence : on essaie de vider la Mer Caspienne avec une cuillère.
    Ta fonction est faite pour enchaine les conditions, pas pour les imbriquer. Ma bidouille a permis d'ajouter un niveau d'imbrication, mais là tu as besoin de 2 niveaux d'imbrication.

    Donc, soit tu modifies la fonction pour qu'elle gère plusieurs niveaux d'imbrication (mais je n'ai pas vraiment d'idée sur comment faire), soit tu la réécris pour la rendre récursive...

    Autre possibilité : écrire la requête d'une autre façon...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je vois pa trop comment réécrire la requete

  17. #17
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Moi non plus, désolée.

    Tu peux toujours laisser tomber la fonction, et construire la requête à la main...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  18. #18
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai déjà essayer et je vois pas comment
    il faut que je face tout les cas possible?

  19. #19
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (stage.dateFin <'2013-07-04' OR stage.dateDebut >'2013-07-04' OR( stage.dateDebut <='2013-07-04' AND stage.dateFin >='2013-07-04' ))
    quel est le sens de cette requête ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je souhaite obtenir les stages dont soit la date de fin est inférieure à celle d'aujourd'hui ou bien la date de début est supérieure à celle d'aujourd'hui ou bien que le stage soit en cours

    par exemple, je peux sélectionner un stage dans ma liste et cocher deux cases

Discussions similaires

  1. Problème avec checkbox pour une requete
    Par tyjez dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 22/09/2013, 20h20
  2. [MySQL] Probleme requete avec checkbox
    Par casper77 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/04/2011, 14h26
  3. requete SQL dynamique avec checkbox
    Par Mickael Scofild dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 29/08/2007, 15h00
  4. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  5. Requete avec des décimales
    Par Sandrine75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/06/2003, 10h18

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