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

Langage PHP Discussion :

[Sécurité] Mauvaise requête + session


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 55
    Points
    55
    Par défaut [Sécurité] Mauvaise requête + session
    Bonjour a tous,

    J'ai mis en place un espace membre dans lequel lorsque la personne s'identifie, elle est dirigée vers sa page d'infos qu'elle peut modifier.

    Donc j'ai deux tables sous mysql qui sont en relation:

    le login de la table tbl_user et le mail de la table gite.

    Le probleme, avec mon code il affiche tous les enregistrements qui ont comme requete la relation entre login de tbl_user et le mail de la table gite.
    Alors je veux seulement les enregistrements de la personne identifiée et non celles de toute la base

    Je vous montre 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
    <?
    $base = mysql_connect &#40;', , &#41;;
    mysql_select_db &#40;, $base&#41;;
     
     
     
     
    if&#40;isset&#40;$_POST&#41; && !empty&#40;$_POST&#91;'login'&#93;&#41; && !empty&#40;$_POST&#91;'pass'&#93;&#41;&#41; &#123;
      extract&#40;$_POST&#41;;
      // on recupère le password de la table qui correspond au login du visiteur
      $sql = "select pwd from tbl_user where login='".$login."'";
      $req = mysql_query&#40;$sql&#41; or die&#40;'Erreur SQL !<br>'.$sql.'<br>'.mysql_error&#40;&#41;&#41;;
     
      $data = mysql_fetch_assoc&#40;$req&#41;;
     
      if&#40;$data&#91;'pwd'&#93; != $pass&#41; &#123;
        echo '<p>Mauvais login / password. Merci de recommencer</p>';
        include&#40;'login.htm'&#41;; // On inclut le formulaire d'identification
        exit;
      &#125;
      else &#123;
        session_start&#40;&#41;;
        $_SESSION&#91;'login'&#93; = $login;
     
        echo 'Vous etes bien logué';
     
      &#125;   
    &#125;
    else &#123;
      echo '<p>Vous avez oublié de remplir un champ.</p>';
       include&#40;'login.htm'&#41;; // On inclut le formulaire d'identification
       exit;
    &#125;
     
            $cnx = mysql_connect&#40; '', , &#41; ;
     
       &#58;
        $db = mysql_select_db&#40; &#41; ;
     
         $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user.login" ;
        //exécution de la requête&#58;
        $requete = mysql_query&#40; $sql, $cnx &#41; ;
     
     
        while&#40; $result = mysql_fetch_object&#40; $requete &#41; &#41;
     
        &#123;
           echo&#40;"<table  ><tr><td class=texte_requete4 >".$result->login."&nbsp;</td><td width=650 class=texte_requete4><b>".$result->nomGite."</b>&nbsp;//".$result->regionGite."&nbsp;//".$result->dptGite."<br>".$result->nomProprio."&nbsp;//".$result->mailProprio."</td><td>&nbsp;</td><td class=texte_requete4> <a href=\"requete3.php?id=".$result->id."\">modifier</a></td></tr>\n"&#41; ;
     
        &#125;
     
      ?>
    J'espere avoir été assez clair

    Merci de votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 92
    Points : 102
    Points
    102
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user.login" ;
    il manque une contrainte sur l'utilisteur, aucune variable dans la requete ??

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 55
    Points
    55
    Par défaut
    Je ne sais pas coment faire correpondre le mail de l'utilisateur avec les enregistrements qui lui correspondent!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user.login" ;
    J'ai essayé de mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user."$_SESSION&#91;'login'&#93;"" ;
    Mais cela ne fonctionne pas.

    J'ai essayé de me renseigner un peu partout mais je suis vraiement coincé

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user." . $_SESSION&#91;'login'&#93;;
    Peut-être un peu mieux déjà :
    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 régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 92
    Points : 102
    Points
    102
    Par défaut
    si mailProprio est un champ contenant une valeur identique au login :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio='"$_SESSION&#91;'login'&#93;"'" ;

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 55
    Points
    55
    Par défaut
    J'ai essayé la requete suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user." . $_SESSION&#91;'login'&#93;;
    Mais cel ne fonctionne pas, ca me met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning&#58; mysql_fetch_object&#40;&#41;&#58; supplied argument is not a valid MySQL result resource in /var/www/free.fr/3/f/pod1978/annuaire/membre/verif.php on line 49
    La ligne 49 correspoind a celle qui commence par while

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user." . $_SESSION&#91;'login'&#93;;
        //exécution de la requête&#58;
        $requete = mysql_query&#40; $sql, $cnx &#41; ;
     
        //affichage des données&#58;
        while&#40; $result = mysql_fetch_object&#40; $requete &#41; &#41;
     
        &#123;
           echo&#40;"<table  ><tr><td class=texte_requete4 >".$result->login."&nbsp;</td><td width=650 class=texte_requete4><b>".$result->nomGite."</b>&nbsp;//".$result->regionGite."&nbsp;//".$result->dptGite."<br>".$result->nomProprio."&nbsp;//".$result->mailProprio."</td><td>&nbsp;</td><td class=texte_requete4> <a href=\"requete3.php?id=".$result->id."\">modifier</a></td></tr>\n"&#41; ;
     
        &#125;

    Concernant la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio='"$_SESSION&#91;'login'&#93;"'" ;
    J'ai aussi testé mais cela ne fonctionne pas non plus, ca me met cela comme message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error&#58; parse error, unexpected T_VARIABLE in /var/www/free.fr/3/f/pod1978/annuaire/membre/verif.php on line 44
    Et lea ligne 44 correspond a cette requete


    Merci de votre aide

  7. #7
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    Citation Envoyé par JWhite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio=tbl_user." . $_SESSION&#91;'login'&#93;
    ;


    Peut-être un peu mieux déjà :
    Non !
    Citation Envoyé par monsieurjean
    si mailProprio est un champ contenant une valeur identique au login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM gite,tbl_user  WHERE mailProprio='"$_SESSION&#91;'login'&#93;"'" ;
    Non plus !!!

    Bon, si tu fais une selection sur deux tables il faut que tu fasses une jointure ET une condition sur le login
    en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM gite, tbl_user WHERE gite.mailProprio=tbl_user.login AND tbl_user.login='".$_SESSION&#91;'login'&#93;."'";

  8. #8
    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
    Exact Hervé je m'étais bien embrouillé sur le coup
    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)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 55
    Points
    55
    Par défaut
    Merci la 1ere étape fonctionne tres bien.

    Maintenant en fait mon souci viens que lorsque ses enregistrements pparaissent , j'ai un line modifier qui m'envoie vers une autre page.
    Mais j'ai le meme souci que tout a l'heure, la requete ne marche pas alors que j'ai repris le meme.

    Je vous montre mon code de ma page requete3.php

    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
    <?php
     session_start&#40;&#41;;
     ?>
     <html>
      <head>
        <title>modification de données en PHP &#58;&#58; partie2</title>
     
    <link href="../sources/style_index.css" rel="stylesheet" type="text/css">
    </head>
    <body>
      <?php
      //connection au serveur&#58;
      $cnx = mysql_connect&#40; ', , &#41; ;
     
      //sélection de la base de données&#58;
      $db = mysql_select_db&#40; &#41; ;
     
      //récupération de la variable d'URL,
      //qui va nous permettre de savoir quel enregistrement modifier
      $login  = $_GET&#91;"login"&#93; ;
     
      //requête SQL&#58;
    $sql = "SELECT * FROM gite, tbl_user WHERE gite.mailProprio=tbl_user.login AND WHERE login = ".$login ;
     
      //exécution de la requête&#58;
      $requete = mysql_query&#40; $sql, $cnx &#41; ;
     //affichage des données&#58;
      if&#40; $result = mysql_fetch_object&#40; $requete &#41; &#41;
      &#123;
     
      ?>  
     
     
      <form name="insertion" action="requete4.php" method="POST">
      <input type="hidden" name="id" value="<?php echo&#40;$id&#41; ;?>">
      <table border="0" align="center" cellspacing="2" cellpadding="2">
      <tr><td class="titre_titre"><?php echo&#40;$result->id&#41; ;?></td></tr>
        <tr align="center">
          <td class="texte_formulaire">nomGite</td>
          <td><input type="text" size="80" name="nomGite" value="<?php echo&#40;$result->nomGite&#41; ;?>"></td>
        </tr>
        <tr align="center">
          <td class="texte_formulaire">descriptionGite</td>
          <td><input type="text"size="80" name="descriptionGite" value="<?php echo&#40;$result->descriptionGite&#41; ;?>"></td>
        </tr>
        <tr align="center">
          <td class="texte_formulaire">regionGite</td>
          <td><input type="text" size="80"name="regionGite" value="<?php echo&#40;$result->regionGite&#41; ;?>"></td>
        </tr>
        <tr align="center">
          <td class="texte_formulaire">dptGite</td>
          <td><input type="text" size="80" name="dptGite" value="<?php echo&#40;$result->dptGite&#41; ;?>"></td>
        </tr>
        <tr align="center">
          <td class="texte_formulaire">typeGite</td>
          <td><input type="text" size="80"name="typeGite" value="<?php echo&#40;$result->typeGite&#41; ;?>"></td>
        </tr>
     
         <tr align="center">
          <td class="texte_formulaire">capaciteGite</td>
          <td><input type="text" size="80"name="nomProprio" value="<?php echo&#40;$result->capaciteGite&#41; ;?>"></td>
        </tr>
    	 <tr align="center">
          <td class="texte_formulaire">Nom</td>
          <td><input type="text" size="80"name="nomProprio" value="<?php echo&#40;$result->nomProprio&#41; ;?>"></td>
        </tr> 
        <tr align="center">
          <td class="texte_formulaire">mailProprio</td>
          <td><input type="text" size="80"name="mailProprio" value="<?php echo&#40;$result->mailProprio&#41; ;?>"></td>
        </tr>  <tr align="center">
          <td class="texte_formulaire">telProprio</td>
          <td><input type="text" size="80"name="telProprio" value="<?php echo&#40;$result->telProprio&#41; ;?>"></td>
        </tr>
        <tr align="center">
          <td class="texte_formulaire">siteProprio</td>
          <td><input type="text" size="80"name="siteProprio" value="<?php echo&#40;$result->siteProprio&#41; ;?>"></td>
     
     
        <tr align="center">
          <td colspan="2"><input type="submit" value="modifier"></td>
        </tr>
      </table>
    </form>
      <?php
      &#125;//fin if 
      ?>
    </body>
    </html>
    Il me remet ce message d'erruer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning&#58; mysql_fetch_object&#40;&#41;&#58; supplied argument is not a valid MySQL result resource in /var/www/free.fr/3/f/pod1978/annuaire/membre/requete3.php on line 28

    Merci de votre aide

  10. #10
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    on ne met qu'une seule fois le where
    c'est de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select deschamps
    from destables
    where booleen
    donc la requete suivante est mauvaise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM gite, tbl_user WHERE gite.mailProprio=tbl_user.login AND WHERE login = ...
    il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM gite, tbl_user WHERE gite.mailProprio=tbl_user.login AND tbl_user.login = ...
    tout simplement

    PS : à mon avis tu as plus besoin de l'aide du forum SQL que de celle du forum PHP

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 55
    Points
    55
    Par défaut
    Excuse moi je suis allé trop vite pour faire la requete mais il semble que cela ne fonctionne toujourrs pas

    Tjrs le meme message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning&#58; mysql_fetch_object&#40;&#41;&#58; supplied argument is not a valid MySQL result resource in /var/www/free.fr/3/f/pod1978/annuaire/membre/requete3.php on line 28

    Voici le code et la ligne 28 est celle qui commence par while:

    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
    <?php
      //connection au serveur&#58;
      $cnx = mysql_connect&#40; '', , &#41; ;
     
      //sélection de la base de données&#58;
      $db = mysql_select_db&#40; &#41; ;
     
      //récupération de la variable d'URL,
      //qui va nous permettre de savoir quel enregistrement modifier
      $login  = $_GET&#91;"login"&#93; ;
     
      //requête SQL&#58;
    $sql = "SELECT * FROM gite, tbl_user WHERE gite.mailProprio=tbl_user.login AND login = ".$login ;
     
      //exécution de la requête&#58;
      $requete = mysql_query&#40; $sql, $cnx &#41; ;
     //affichage des données&#58;
      if&#40; $result = mysql_fetch_object&#40; $requete &#41; &#41;
      &#123;
     
      ?>
    En fait ds ce cas présent, une propriétaire a deux enregistrements donc je ne sais pas si c bon que la requete se termine pae login=".$login" car ca sera deux fois le meme mail. Faut peut etre passer par un autre identifiant mais je ne sais pas trop

    Merci

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 55
    Points
    55
    Par défaut
    Je peux vous monter l'url:

    http://pod1978.free.fr/annuaire/membre/login.htm

    le login:

    martine.deroo@wanadoo.fr

    le mot de passe:
    boubou

    Merci de votre aide

  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
    Peut-être avec des quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM gite, tbl_user WHERE gite.mailProprio=tbl_user.login AND login = '". $login . "'" ;
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Citation Envoyé par JWhite
    Peut-être avec des quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM gite, tbl_user WHERE gite.mailProprio=tbl_user.login AND login = '". $login . "'" ;
    +1
    Quand tu as cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    supplied argument is not a valid MySQL result resource
    Toujours faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = mysql_query&#40; $sql, $cnx &#41; or die&#40;mysql_error&#40;&#41;&#41;;
    et un echo de ta requete pour avoir une meillleur idée de l'erreur qui s'est produite

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 18h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 17h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 23h43

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