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] problème de concaténation


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut [SQL] problème de concaténation
    bonjour,
    j"essais de récupérer une variable par la méthode GET car cette variable est passée par URL d'une autre page.
    ensuite je veux executer une requête SQL avec cette variable dans l'expression de la requête.

    $sql = 'DELETE FROM gestion_santep WHERE consultation = $_GET[id]';

    où $id est passé par URL : /destination.php?id=4

    malheureusement la variable $sql n'est pas equivalente a :

    $sql = 'DELETE FROM gestion_santep WHERE consultation = 4'; (je le sais en faisant echo $sql).

    quelle est la bonne syntaxe svp? Merci

    yvon

  2. #2
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 15
    Par défaut
    Citation Envoyé par yvonh
    bonjour,

    $sql = 'DELETE FROM gestion_santep WHERE consultation = $_GET[id]';

    où $id est passé par URL : /destination.php?id=4

    quelle est la bonne syntaxe svp? Merci

    yvon
    Essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $id = $_GET['id']; // N'oublie pas les simple quote ;) 
    $sql = "DELETE FROM gestion_santep WHERE consultation = ".$id;

  3. #3
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Je vois de plus en plus de posts, où chacun reprend ses variables $_GET (ou $_POST ou autre) et les réassigne dans des nouvelles variables... Je n'arrive pas trop à comprendre quelle est la stratégie là dedans, mais il doit certainement y en avoir une

    Sinon, c'est tout à fait possible (et ca évite de redéfinir des variables supplémentaires, inutiles) comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = 'DELETE FROM gestion_santep WHERE consultation = '.$_GET['id'];

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    salut ! le mieu est de faire comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    extract($_GET[]);
    $sql = "DELETE FROM gestion_santep WHERE consultation ='".$id."'";
    la commande extract() va créer une variable pour chaque $_get[] que tu as passé dans ton url, en l'ocurence pour toi id. ensuite dans ta requete il ne reste plus qu'a définir ton get comme cela : $id

    bonne chance

  5. #5
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    wow, ca c'est un tout petit peu dangereux, le extract, si t'as par le plus grand des malheurs une variable locale qui porte le même nom qu'un de tes index de ton $_GET, adios!

    Aussi, la syntaxe correcte est (si je ne m'abuse):


  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    Citation Envoyé par bkill
    Je vois de plus en plus de posts, où chacun reprend ses variables $_GET (ou $_POST ou autre) et les réassigne dans des nouvelles variables... Je n'arrive pas trop à comprendre quelle est la stratégie là dedans, mais il doit certainement y en avoir une

    Sinon, c'est tout à fait possible (et ca évite de redéfinir des variables supplémentaires, inutiles) comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = 'DELETE FROM gestion_santep WHERE consultation = '.$_GET['id'];
    il est vrai que cette maniere est utile si l'on utilise une seul fois la variable passé dans l'url car la création de varibale supplémentaire contraint a une baisse de performance au niveau de ton code... mais pour un simple site on ne verra pas de différence mais c'est quand même important de le savoir pour le jour où tu devras faire un site important !

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    Citation Envoyé par bkill
    wow, ca c'est un tout petit peu dangereux, le extract, si t'as par le plus grand des malheurs une variable locale qui porte le même nom qu'un de tes index de ton $_GET, adios!
    hum interressant... je n'avais jamais pensé à cette option... peux-tu me donner un exemple concret s'il te plait ?

    merci

  8. #8
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Citation Envoyé par cyrill
    il est vrai que cette maniere est utile si l'on utilise une seul fois la variable passé dans l'url car la création de varibale supplémentaire contraint a une baisse de performance au niveau de ton code... mais pour un simple site on ne verra pas de différence mais c'est quand même important de le savoir pour le jour où tu devras faire un site important !
    Je pense aussi que ca permet de savoir, à n'importe quel endroit du code, d'où provient la variable que tu utilises. En te forçant à toujours utiliser $_GET['id'], tu sais que cette variable à été passée en paramètre à ta page. En utilisant $id, tu peux en avoir fait n'importe quoi auparavant.
    Enfin bref, conventions de code, je dirais.

  9. #9
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Citation Envoyé par cyrill
    hum interressant... je n'avais jamais pensé à cette option... peux-tu me donner un exemple concret s'il te plait ?

    merci
    On peut gérer ces collisions, tout de même, avec des paramètres:

    "extract() vérifie l'existence de la variable avant de la créer. Le traitement des collisions est déterminé par extract_type"

    extract

    Mais l'option par défaut est EXTR_OVERWRITE, donc écrase une variable auparavant prédéfinie.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $_GET['id'] = "123";
    $id = "456";
    extract($_GET);
    echo $id; // 123

  10. #10
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    ok merci beaucoup de tes informations

  11. #11
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Salut,

    presque rien à voir, mais je me dois de te prévenir :
    attention aux injections SQL !!

    ta variable $id sorti de l'URL directement insérée dans la requête, c'est la porte ouverte à ce genre d'attaque..

    si tu vises un accés public à ce développement, prends soin de protéger les données avec la fonction mysql_real_escape_string()

    bon développement

  12. #12
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    merci pour l'info !

  13. #13
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Citation Envoyé par ska_root
    presque rien à voir, mais je me dois de te prévenir :
    attention aux injections SQL !!
    Ca, c'est certain qu'il faut également s'occuper de ca.

    Personnellement, j'aurais fait quelque chose du genre, idée comme une autre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (is_numeric($_GET['id'])) {
      // traitement SQL
    }

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut il me semble que le probleme ne soit pas la car rien de ce aue j'essais ne marche.
    merci pour le debat aue cela a sucite mais mon probleme se situe a un niveau infeieur en terme de technicite je pense.
    quoique je fasse (extract(), entourage des simple quotes par des doubles quotes. ) j'obtiens le message suivant:

    Notice: Undefined variable: id in c:\program files\easyphp1-8\www\gestion\gestiondelete.php on line 16

    pour information je vous livre la config de mon serveur php en piece jointe:
    y a il un pb de config? ca fait deux jours que je me casse les dents sur ce pb.grrrr

    pour info ce lscript marche sur le serveur de free mais pas chez moi.
    Fichiers attachés Fichiers attachés

  15. #15
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    Notice: Undefined variable: id
    ca veut juste dire que id n'a pas été défini proprement.

    remontre le code que tu utilises ?

    P.S et sur free ca montre pas les notice, donc c'est normal, Notice, ce n'est pas une erreur !!

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut bon je vais poster en integralite le code
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <HTML>
    <HEAD>
    <TITLE>Index</TITLE>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    </HEAD>
    <?
    include("connect.php");
    ?>

    <H1>Confirm deletion</H1>

    <? if (isset($_POST['confirm'])) {
    $id = $_GET['id'];
    $sql = "DELETE FROM gestion_santep WHERE consultation='".$id."'";


    if($result=mysql_query($sql))
    {echo "l'écriture a réussi";
    require("gestionLinkBar.php");

    } else {
    echo "erreur d'écriture.";

    }
    }
    else if (isset($_POST['cancel'])){

    echo "Goodbye";
    require("gestionLinkBar.php");

    }
    ?>
    <form method="POST" action="gestionDelete.php">
    <input type="submit" name="confirm" value="Confirm">
    <input type="submit" name="cancel" value="Cancel">

    merci

  17. #17
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <? if (isset($_POST['confirm'])) {
    $sql = "DELETE FROM gestion_santep WHERE consultation='".$_GET['id']."' ";
    te complique pas la vie !!

    et pense au balise code stp.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut ok mais n empeche que ca non plus ca ne marche pas...
    j ai toujours le meme message...
    il me dit toujours que la variable est indefinie..

  19. #19
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    ouais, mais, d'une part:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <? if (isset($_POST['confirm'])) {
    et d'autre part:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "DELETE FROM gestion_santep WHERE consultation='".$_GET['id']."' ";
    T'es en GET ou en POST, pour finir ?
    Faudrait peut-être utiliser tout le temps les variables GET, ou tout le temps les POST, pour récupérer les valeurs de ton formulaire posté.

  20. #20
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Et as-tu un champs hidden dans ton formulaire qui s'appelle id ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="id" value="123" />
    Si non, tu peux encore poster pendant longtemps

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

Discussions similaires

  1. Problème de concaténation SQL Server 2005
    Par boubounz dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 08/01/2008, 11h54
  2. [SQL] Problème de concaténation
    Par Jumano dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/10/2007, 01h36
  3. Réponses: 6
    Dernier message: 31/05/2007, 15h54
  4. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  5. [Debutant][Join Sql] problème de join
    Par ultimax dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 12h01

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