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] insérer des variables php dans une requête sql


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut [SQL] insérer des variables php dans une requête sql
    Bonjour a tous,

    Donc je vous expose mon probleme, je travail sous WAMP5 (windows, apache, mysql, php5).

    Jai fais pas mal de forum et j'ai pas trouvé de reponse donc désolé si cette question a deja été posée.

    Je suis en train (d'essayée) de creer une interface en php, avec une base de données mysql, pour la gestion de clientel de ma société, donc j'ai reussi (non sans fierté j'avoue) a creer la partie remplissage de la base, et maintenant je bloque sur la partie consultation...

    Donc j'ai créée une feuille contenant des checbox, et des zones de texte, donc l'utilisateur doit pouvoir cocher plusieurs case et noter dans dans les zones de texte les critères de selection correspondant. Donc je n'ai plus d'erreures mais rien ne s'affiche

    En fait j'ai esseyai d'inserer les données contenu dans un tableau $tab[], dans ma requete, dans le where. je pense que ca vient de la parceque quand j'ecris une requete normale ca marche, et ça m'affiche les données...

    donc la je vois plus rien alors viens vous demander un peu d'aide parceque la je galère

    voici 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
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    <?php 
    $nom = $_POST['nom']; 
    $ville = $_POST['ville'];
    $cp = $_POST['cp'];
    $nomresp = $_POST['nomresp'];
    $genre = $_POST['genre'];
    $nomc = $_POST['nomc']; 
    $villec = $_POST['villec'];
    $cpc = $_POST['cpc'];
    $genrec = $_POST['genrec'];
    $nomrespc = $_POST['nomrespc'];
     
    $i = 0;
    $tab = array ();
     
    if(($nom) == 'on')
    {$tab[i] = "nom = '$nomc'" ;
    i==i+1;
    exit();}
     
      if(($ville) == 'on')
          {if( i==0)
          {$tab[i] = "ville = '$villec'";
          exit();}
      $tab[i] = "and ville =  '$villec'" ;
      i==i+1;
      exit();}
     
        if(($cp) =='on')
          {if( i==0)
          {$tab[i] = "cp = '$cpc'";
          exit();}
         $tab[i] = "and cp = '$cpc' " ;
        i==i+1;
        exit();}
     
          if(($nomresp) == 'on')
           { if( i==0)
          {$tab[i] = "nomresponsable = '$nomrespc'";
          exit();}
           $tab[i] = "and nomresponsable = '$nomrespc'" ;
          i==i+1;
          exit();}
     
            if(($genre) == 'on')
              {if( i==0)
          {$tab[i] = "genre = '$genrec'";
          exit();}
             $tab[i] = "and genre = '$genrec'" ;
            i==i+1;
            exit();}
     
    $connexion = mysql_connect('localhost','root','') or die ('Erreur de connexion'.mysql_error());
     
    mysql_select_db('clientsms',$connexion) or die ('Erreur de selection'.mysql_error());
     
    $sql = "SELECT * FROM `entreprise` WHERE '$tab[0]' '$tab[1]' '$tab[2]' '$tab[3]' '$tab[4]' ";
     
    $result = mysql_query($sql) or die('erreur SQL'.sql.mysql_error());
     
    if (mysql_num_rows($result) == 0) 
    {   echo "Aucune ligne trouvée, rien à afficher.";  
    exit;}
    // Tant qu'une ligne existe, place cette ligne dans la variable $row
    // sous la forme d'un tableau associatif.
    // Note : Si vous n'attendez qu'une seule ligne, oubliez la boucle
    // Note : Si vous utilisez extract($row); dans la boucle suivante
    //       vous créerez $userid, $fullname et $userstatus
    while ($row = mysql_fetch_assoc($result)) {   
     echo $row["raisonsociale"].'<br>';   
     echo $row["adresse"].'<br>';
      echo $row["adresse2"].'<br>'; 
       echo $row["adresse3"].'<br>'; 
        echo $row["cp"].'<br>'; 
         echo $row["ville"].'<br>'; 
          echo 'fax: '.$row["fax"].'<br>';  
           echo 'tel: '.$row["numtel"].'<br>'; 
            echo 'port: '.$row["port"].'<br>'; 
             echo $row["civilite"].' '; 
              echo $row["responsable"].'<br>'; 
               echo $row["fonction"].'<br>';   
     echo '.<br>';
     echo '----------------------------------------------------------- <br>';
     }
     
    mysql_free_result($result);
     
     
    mysql_close();
     
     
    ?>
     
    <html>
     
    <head>
    <meta http-equiv="Content-Language" content="fr">
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Nouvelle page 1</title>
    </head>
     
    <body link="#FFFF00" vlink="#FFFF00" alink="#FFFF00" text="#FFFF00" bgcolor="#000000">
     
     
    <p align="center"><b><font size="4" face="Usuzi Italic">[Retour a la 
    consultation]</font></b></p>
     
     
    </body>
     
    </html>
    Merci d'avance a vous.

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Je pense que tu as un probleme dans ta requete, or pour la requete ton die() a un probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query($sql) or die('erreur SQL'.sql.mysql_error());
    il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query($sql) or die('erreur SQL! Ma requete : '. $sql .'<br/> Erreur : ' .mysql_error());
    comme tu le fais pour le connect par exemple Et maintenant tu devrais voir l'erreur mysql liée à la requete effectuée.
    Si tu ne trouves pas, montres nous la requete en exemple !

    EDIT : Premiere piste, tu mets des ' ' autour de chaque condition de ton where et je pense que le probleme vient justement de là, il n'y a pas de ' ' autour des 'monchamp = 'aaa' ' and 'monchamp2 = 'bbb' ' ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    Merci pour cette reponse rapide, mais je viens d'essayer et il ne me mets aucune erreure... tout en ne m'affichant toujours rien.

    ma

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT * FROM `entreprise` WHERE '$tab[0]' '$tab[1]' '$tab[2]' '$tab[3]' '$tab[4]'' ;
    voila se que j'ai changée
    et voila se qu'il me mets

    Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\clients\consent.php on line 57

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Une astuce pour constuire une telle requête, c'est de l'initialiser avec WHERE 1=1 (qui est toujours vérifié) et ensuite d'ajouter les conditions en mettant AND champ=valeur, ça évite de bricoler avec la valeur de $i.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  5. #5
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par lili38
    Merci pour cette reponse rapide, mais je viens d'essayer et il ne me mets aucune erreure... tout en ne m'affichant toujours rien.

    ma

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT * FROM `entreprise` WHERE '$tab[0]' '$tab[1]' '$tab[2]' '$tab[3]' '$tab[4]'' ;
    voila se que j'ai changée
    et voila se qu'il me mets

    Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\clients\consent.php on line 57
    Tu as un léger problème avec tes quotes là... Et koopajah a fait une bonne remarque il faut virer les quotes qui entourent tes $tab[i]. De plus il faut faire une boucle car à priori le nombre d'éléments dans $tab est variable donc tu peux très bien avoir un $tab[4] qui n'existe pas et ça il va pas aimer...
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    z'ai pas tout compris

  7. #7
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par lili38
    z'ai pas tout compris
    Ah bah désolé j'ai pourtant fait gaffe de faires des belles phrases en français Qu'est ce qui va pas ?
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    Amara t'as repondu en meme temps que je poster donc maintenat je vais lire ta reponse... et apres je pourrais dire si j'ai compris ou pas

  9. #9
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par lili38
    Amara t'as repondu en meme temps que je poster donc maintenat je vais lire ta reponse... et apres je pourrais dire si j'ai compris ou pas
    Ah ok désolé
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    avoir un $tab[4] qui n'existe pas et ça il va pas aimer...
    ça j'm'en été douté mais bon je m'étais dit que de toutes façon ça aurait été vide donc pas de soucis (je sais ça marche pas comme ça, mais on sait jamais )

    il faut virer les quotes qui entourent tes $tab[i]
    quand je les vires il aime pas non plus...

    bon en tous cas merci de toutes vos reponse rapide, vous étes vraiment sympas.

    bon je vais essayé de faire une boucle, mais faut que je la fasse dans la requete???

  11. #11
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    En fait tu n'as pas besoin de $tab ni de boucle du coup si tu suis le conseil que j'ai donné plus haut avec le WHERE 1=1, ça va tout te simplifier. Tu construis entièrement ta requête dans une variable et tu fais ton mysql_query dessus.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    désolé mais j'ai pas tout bein compris donc j'ai fait ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * 
            FROM entreprise 
            WHERE  nom = $nomc or 1=1 and ville = $villec or 1=1 and cp=$cpc or 1=1 and responsable=$nomrespc or 1=1 and genre = $genrec or 1=1" ;
    et ca veut pas marcher non plus, bon c peu etre un peut speciale comme requete il faut dire
    j'ai ca comme message :

    erreur SQL! Ma requete : SELECT * FROM entreprise WHERE nom = or 1=1 and ville = or 1=1 and cp=38000 or 1=1 and responsable= or 1=1 and genre = or 1=1
    Erreur : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'or 1=1 and ville = or 1=1 and cp=38000 or 1=1 and responsable= or 1=1 and genre' at line 3

  13. #13
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Non c'est pas ça que je voulais dire, je te fais un algo en speed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    requete = "SELECT * FROM table WHERE 1=1"
    TANT QUE conditions à ajouter FAIRE
      requete .= " AND champ = valeur"
    FIN TANT QUE
    En entourant de quotes éventuellement la valeur.

    Comme ça à la fin ta requête a une forme comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE 1=1 AND champ1='valeur1' AND champ2='valeur2'
    sans prise de tête avec les espaces, les AND, ...


    Par contre là tu dois voir que ta requête est bancale, par exemple la ville est vide donc ça peut pas aller. De plus il faut encadrer les chaînes par des quotes (exemple ville='Le Mans'').
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    alors je viens d'essayé avec ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "SELECT * 
            FROM entreprise 
            WHERE  1=1 and nom = $nomc  and ville = $villec  and cp=$cpc  and responsable=$nomrespc  and genre = $genrec " ;
    et la ça ne m'affiche rien du tout... une page blanche.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    ça y est j'ai compris

    je comprends vite mais faut m'expliquer longtemps

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    bon certes j'ai compris le principe mais z'ai du mal a le mettre en place...
    mais je desespère pas c'est la condition du tant que qui me fait fumer le cerveau

  17. #17
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Là dans ta dernière requête il te manque toujours les quotes autour de tes chaînes (je suppose que la ville par exemple c'est une chaîne de caractères...).
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    j'viens d'essayer avec des quotes, mais ça me dit Aucune ligne trouvée, rien à afficher.

  19. #19
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par lili38
    j'viens d'essayer avec des quotes, mais ça me dit Aucune ligne trouvée, rien à afficher.
    Ah bah après faut voir ce que tu as en base, tu peux faire un echo de ta requête une fois construite et la tester dans phpmyadmin par exemple pour voir si ça te sort quelque chose.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    j'ai voulue essayer quelque chose et je pense que ca peut marcher mais ça marche pas...

    je vous montre :

    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
    $sql = "SELECT * 
            FROM entreprise 
            WHERE 1 = 1  " ;
     
     
    if(($nom) == 'on')
    {$sql = $sql . " and raisonsociale = '$nomc'";
    exit();}
     
      if(($ville) == 'on')
            {$sql = $sql . " and raisonsociale = '$villec'";
      exit();}
     
          if(($cp) == 'on')
            {$sql = $sql . " and cp = '$cpc'";
          exit();}
     
            if(($nomresp) == 'on')
             {$sql = $sql . " and responsoable = '$nomrespc'";      
            exit();}
     
              if(($genre) == 'on')
                {$sql = $sql . " and fonction = '$genrec'";     
              exit();}
    j'avais dans l'espoir que mais condition se rajouterai mais ça veux pas c tropinjuste

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Insérer une variable Bash dans une requête sql
    Par Acidix dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 16/02/2015, 20h39
  2. Réponses: 7
    Dernier message: 01/11/2012, 21h37
  3. [MySql]Insérer une variable "string" dans une requête SQL
    Par Saten dans le forum Windows Forms
    Réponses: 9
    Dernier message: 13/10/2008, 17h39
  4. Insérer des champs vides dans une requête sql
    Par js8bleu dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/02/2008, 15h00
  5. [SQL] Comment insérer une variable php dans une requête SQL ?
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/05/2007, 08h47

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