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 :

recherche multi critère [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut recherche multi critère
    Bonsoir,

    je continu a faire evoluer mon code et après une requete entre deux dates,
    je cherche maintenant a faire une requete multi-critère, mais forcément ca marche pas.

    je vous donne mon code, je ne demande pas la solution mais si vous pourriez m dire si je me plante complétement ou si je suis en bonne voie et puis biensur vous pouvez apporter vos correction lol

    merci
    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
     
    <?php
     
    // Variable pour date result
    htmlspecialchars(stripcslashes($debut1 = $_POST['fielddate_1b'])); 
    htmlspecialchars(stripcslashes($fin1 = $_POST['fielddate_1c']));
     
    include("./config.inc.php");
    mysql_connect($db_host,$db_user,$db_pass) or die ('connexion impossible');
    mysql_select_db($db_name) or die ('connexion impossible');
    // Variable pour requete mysql
     
    $debut = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['fielddate_1b'])));
    $fin = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['fielddate_1c'])));
    $field_search_1 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['field_search_1'])));
    $field_search_2 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['field_search_2'])));
    $field_search_3 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['field_search_3'])));
     
    // intialisation date fr -> us
    	$date = "$debut";
    	// formatage
    	list($jour, $mois, $annee) = explode("/", $date);
    		// affichage
    	$debut = $annee . '-' . $mois . '-' . $jour ;
     
    	// intialisation date fr -> us
    	$date = "$fin";
    	// formatage
    	list($jour, $mois, $annee) = explode("/", $date);
    		// affichage
    	$fin = $annee . '-' . $mois . '-' . $jour ;
     
     
    $fields = array('field_search_1', 'field_search_2', 'field_search_3') ; // Champs <form>/BdD 
    $requete = "SELECT * FROM regie WHERE 1 = 1 BETWEEN '$debut' AND '$fin' ORDER BY field_1 ASC" ; 
    foreach ( $fields AS $field ) { 
        IF ( isset($_GET[$field]) && $_GET[$field] !== '' ) { // IGNORE les champs vides 
            $requete .= " AND $field = '{$_GET[$field]}'" ; 
        } 
    } 
    echo $requete ;
     
    mysql_query("SET NAMES 'utf8'");
    // $requete = mysql_query("SELECT * FROM regie WHERE field_1 BETWEEN '$debut' AND '$fin' ORDER BY field_1 ASC") or die (mysql_error());
    echo "<h2>Résultat</h2><br />";
    echo "<center><h3>Voici les résultats pour la période du : $debut1 au $fin1</h3></center>";
    echo "<br /><br />";
    echo "<table cellpadding='0' cellspacing='0'>";
    echo "<tr class='tdexport'><td>Par</td><td>Versé le</td><td>Dans l'espace</td><td>Nature du versement</td><td>Civilité</td><td>Prénom</td><td>Nom</td><td>Montant</td><td>En</td><td>Commentaires</td></tr>";
     
    while($data = mysql_fetch_array($requete))
     
        {
             echo '<tr><td>'.$data['field_0'].'</td><td style="text-align:center;">'.date("d/m/Y", strtotime($data['field_1'])).'</td><td>'.$data['field_2'].'</td><td>'.$data['field_3'].'</td><td>'.$data['field_4'].'</td><td>'.$data['field_5'].'</td><td>'.$data['field_6'].'</td><td style="text-align:right;">'.$data['field_7'].'</td><td style="text-align:center;">'.$data['field_8'].'</td><td>'.$data['field_9'].'</td></tr>';
    	}
    echo "</table><br />";
    echo "<center><a href='index.php?page=3'>Retour à la recherche</a></center>";
     
    ?>

  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
    Attention tu utilises les mêmes variables pour plusieurs choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $debut = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['fielddate_1b'])));
    $debut = $annee . '-' . $mois . '-' . $jour ;
    Tu t'es melangé entre $_POST et $_GET.

    Il ne faut pas htmlspecialchars() tes données dans la base, donc pas non plus tes valeurs dans la recherche.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut
    Bonjour, me revoila

    Je pense que j'avance mais y encore des soucis.

    J'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete = mysql_query("SELECT * FROM regie WHERE (field_2 like '".$_POST['field_search_1']."' or field_3 like '".$_POST['field_search_2']."' or field_8 like '".$_POST['field_search_3']."') BETWEEN '$debuta' AND '$fina' ORDER BY field_1 ASC") or die (mysql_error());
    mais ca marche a l'envers au lieu de me donner ce que je recherche il me les exclu.

    alors j'ai fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete = mysql_query("SELECT * FROM regie WHERE (field_2 '".$_POST['field_search_1']."' or field_3 '".$_POST['field_search_2']."' or field_8 '".$_POST['field_search_3']."') BETWEEN '$debuta' AND '$fina' ORDER BY field_1 ASC") or die (mysql_error());
    mais il m'affiche cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de syntaxe prés de ''' or field_3 '' or field_8 '') BETWEEN '2010-01-01' AND '2010-01-31' ORDER BY f' à la ligne 1
    je comprends bien qu'il y a une erreur de syntaxe mais je trouve pas.

    un peu d'aide ? merci

  4. #4
    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 as oublié les =
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut
    Oki merci

    voila le code sans erreur d'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = mysql_query("SELECT * FROM regie WHERE (field_2 = '".$_POST['field_search_1']."' or field_3 = '".$_POST['field_search_2']."' or field_8 = '".$_POST['field_search_3']."' and field_1 BETWEEN '$debuta' AND '$fina')ORDER BY field_1 ASC") or die (mysql_error());
    mais bon ca me donne pas encore vraiment ce que je veux parce que
    je suis obligé de renseigné au moins un critère en plus de la période
    et si je mets
    ca ne prends en compte que la période.

    y aurai t'il un moyen dans la requete sql de dire and ou or

    ou est ce que je dois faire en php un truc du genre avec que des or

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ((isset($_POST['motclef1'])) && empty($_POST['motclef2'])) // Si motclef1 uniquement
    	{
    	$sql = mysql_query($sql1) or die('Erreur de requete '.mysql_error());
    	}

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

Discussions similaires

  1. [MySQL] Recherche multi-critères ou un seul
    Par jack1234 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/12/2005, 08h56
  2. Recherche multi-critères
    Par PAUL87 dans le forum Access
    Réponses: 66
    Dernier message: 13/12/2005, 12h12
  3. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 19h33
  4. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 11h00
  5. Procédure stockée: recherche multi-critères
    Par biroule dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 01/09/2004, 16h02

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