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 :

[SQL] Concaténer des requêtes SQL en PHP


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Points : 30
    Points
    30
    Par défaut [SQL] Concaténer des requêtes SQL en PHP
    Bonjour,

    Je suis en train de faire un site et il faut que je gère un formulaire de recherche selon 5 critères. Il faut que je fasse un fichier de requêtes SQL pour chercher les résultats de la recherche mais le problème c'est que si je fais les cas un par un le code va vraiment être lourd et long... Est-ce qu'il est possible de trouver un moyen pour concaténer des bout de requête sql? j'ai essayé mais je n'y arrive pas...
    Pourriez-vous m'en donner un exemple?

    Merci

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    contenu d'un tableau 2D, on ne connait ni l'echelle X, ni l'Y, ni la val dedans

    $typeX = 'heure';
    $typeY = 'ordinateur';
    $val = 'bug';
    $table = 'BUG_ORDI';

    $sql = "SELECT ".$typeX." as x, ".$typeY." as y, ".$val." as val
    FROM ".$table;

    va te retourner ici un tableau du nombre de bug au cours du temps pour chaque ordi.
    Un exemple comme un autre..
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  3. #3
    Membre régulier Avatar de carelha
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 168
    Points : 109
    Points
    109
    Par défaut
    j'ai un formulaire un peu comme toi, 3 champs de type liste avec entrée à sélectionner, et un champ libre mot clef.
    J'ai fait une requête du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       $sql = 'SELECT blab, alba, bla FROM table '; 
       if (isset($_SESSION['public'])&&($_SESSION['public'])!="#") 
       { 
         $sql .= ' AND  public = "'.$_SESSION['public'].'"'; 
       } 
       if (isset($_SESSION['lieu'])&&($_SESSION['lieu'])!="#") 
       { 
          $sql .= ' AND  lieu = "'.$_SESSION['lieu'].'"'; 
       } 
    // là c'est le mot clef-----------------------
       if (isset($_SESSION['mot'])&&($_SESSION['mot'])!="#") 
       { 
       $sql .= ' AND  (accontact LIKE "%'.strtolower($_SESSION['mot']).'%" OR description LIKE "%'.strtolower($_SESSION['mot']).'%" OR  lieu LIKE "%'.strtolower($_SESSION['mot']).'%" OR  dates LIKE "%'.strtolower($_SESSION['mot']).'%" OR  specifique LIKE "%'.strtolower($_SESSION['mot']).'%")';   }
       $sql .=' ORDER BY activite ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
    C'est ca qui te semble trop lourd ? tu as 5 champs libres ? Pourquoi pas un seul avec une seule recherche par motS clef ?
    En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

    un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Points : 30
    Points
    30
    Par défaut
    Voilà en fait le commencement de mon code :

    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
    <?
    require('fonction.inc'); 
    // Vérification que les variables du formulaires ne sont pas vides
    if(isset($_POST['marque']) && isset($_POST['modele']) && isset($_POST['vo_prix_vente_min']) && isset($_POST['vo_prix_vente_max']) && isset($_POST['energie'])){
    $marque = $_POST['marque'];
    $modele = $_POST['modele'];
    $vo_prix_vente_min = $_POST['vo_prix_vente_min'];
    $vo_prix_vente_max = $_POST['vo_prix_vente_max'];
    $energie = $_POST['energie'];
    //echo($marque.$modele.$vo_prix_vente_min.$vo_prix_vente_max.$energie);
    // Vérification que les variables affectées ne sont pas vides
        if(!empty($marque) && !empty($modele) && !empty($vo_prix_vente_min) && !empty($vo_prix_vente_max) && !empty($energie)){
      //tous les véhicules
      if( $marque== '(vide)' && $modele == '(vide)' && $vo_prix_vente_min== '(vide)' &&  $vo_prix_vente_max== '(vide)' && $energie == '(vide)')
      {
       $res= executer_requete("SELECT * FROM vehicule ORDER BY marque ASC");
       $num = mysql_num_rows($res);
      }
      //marque non vide
      if( $marque!= '(vide)' && $modele == '(vide)' && $vo_prix_vente_min== '(vide)' &&  $vo_prix_vente_max== '(vide)' && $energie == '(vide)')
      {
       $res= executer_requete("SELECT * FROM vehicule WHERE marque='$marque' ORDER BY modele ASC");
       $num = mysql_num_rows($res);
      }
    Donc j'ai commencé plusieurs cas, j'ai fait le fait que rien n'était saisi, et l'autre qu'il y avait juste la marque de saisi. Si je continue à faire tous les cas, je vais avoir une tonne de code.... Et je vois pas trop comment faire pour alléger

  5. #5
    Membre régulier Avatar de carelha
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 168
    Points : 109
    Points
    109
    Par défaut
    Et qqch du genre
    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
    $sql = 'SELECT marque, energie,  bla,  bla,  bal, FROM vehicule WHERE premiere condition; 
    // j'ai mis première condition car c'est le code que j'ai employé, et il explique les AND ensuite)
     if (isset($_SESSION['marque'])&&($_SESSION['marque'])!="")  
       { 
         $sql .= ' AND  marque = "'.$_SESSION['marque'].'"'; 
       } 
       if (isset($_SESSION['vo_prix_vente_min'])&&($_SESSION['vo_prix_vente_min'])!="")    { 
          $sql .= ' AND  ventemini = "'.$_SESSION['vo_prix_vente_min'].'"'; 
       } 
      if (isset($_SESSION['energie'])&&($_SESSION['energie'])!="")       { 
          $sql .= ' AND  energie = "'.$_SESSION['energie'].'"'; 
       } 
    $sql .=' ORDER BY activite' ;
     // on exécute la requête
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    et tu répètes if () {sql . } pour chaque critère. Comme ça on regarde à chaque fois si la variable est définie (!="") et si c'est le cas on la prend en compte.

    au passage, si après tu veux faire un affichage page par page des résultats, je te conseille de tout passer en variables de session.
    En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

    un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Points : 30
    Points
    30
    Par défaut
    Bon je suis en train de m'embrouiller complet... C'est quoi "première condition"? Et ensuite, là tu rentres direct "SELECT blabla WHERE" mais si ya pas de condition après, ça va planter parce qu'il ne devrait pas y avoir de where. Et si la première condition n'est pas bonne, les autres vont commencer par AND, donc ça va faire "WHERE AND", lol... Je comprends plus rien...
    Oui par contre je vais vouloir afficher pages par pages mais je sais pas comment on fait et ni pourquoi il faut mettre $_SESSION...

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    pour ta premiere condition tu peux eventuellement mettre une condition vraie qui rendrait la presence du where persistante genre :

    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  8. #8
    Membre régulier Avatar de carelha
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 168
    Points : 109
    Points
    109
    Par défaut
    je t'ai copié mon script dans lequel j'ai effectivement une première condition avec "WHERE" qui fait que j'ai des "And" ensuite.

    Le principe est d'ajouter à chaque fois un morceau de requête (sql .) Chaque nouveau morceau reprend un des champs du formulaire et vérifie si il a été rempli (!="") et si c'est le cas l'ajoute aux conditions à chercher.

    POur les variables de sessions,
    1. tu ouvres une session (ca aide... : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    session_start ();?>
    2 tu définis que $_SESSION = $_POST :par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $_SESSION['lieu'] = $_POST['lieu'] ;
    En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

    un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Points : 30
    Points
    30
    Par défaut
    Merci, j'ai mis 1 à la suite du WHERE et ça a marché. Maintenant il faut que j'affiche les résultats page par page et je ne sais pas du tout commment faire... Pourquoi il faut que je mette des variables de session?

  10. #10
    Membre régulier Avatar de carelha
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 168
    Points : 109
    Points
    109
    Par défaut
    si tu ne fais pas ca, les résultats seront affichés pour la page 1 mais aprés les variables seront "oubliées". C'est rageant. Enfin, c'est ce qui vient de m'arriver et c'est la solution qu'on m'a proposée sur ce forum, et ca fonctionne.
    En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

    un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";

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

Discussions similaires

  1. [PHP 5.3] Exécuter des requêtes SQL d'un fichier PHP périodiquement
    Par gsoub dans le forum Langage
    Réponses: 17
    Dernier message: 21/05/2012, 10h22
  2. requête sql : concaténation des champs dans tableau
    Par tvcinq dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/09/2010, 08h59
  3. Exécuter des requête SQL (avec ou sans PHP) dans javascript
    Par mir540 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2009, 10h03
  4. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

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