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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    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
    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
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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
    Membre éprouvé
    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
    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
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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
    Membre éprouvé
    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
    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 émérite

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    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.

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