Problème PHP MySQL

Bonjour à tous,

Je n'y connais pas grand chose (pour ne pas dire rien) et ai un problème. Voici mon code:

<? include('verifsession.php');
include('sql_connect.php');
$req=mysql_query("select pseudo from membres where login='$_POST[login]'");
$pseudo=mysql_result($req,0,"pseudo");
?>
<html>
<head>
<title>Accueil membre</title>
<SCRIPT LANGUAGE="JavaScript1.1">
function right(e)
{var msg = "Le vol est interdit chez moi";
if (navigator.appName == 'Netscape' && e.which == 3){alert(msg);}
else if (navigator.appName == 'Microsoft Internet Explorer' && event.button==2){alert(msg);}return true;}
document.onmousedown = right;
</SCRIPT>
<script LANGUAGE="JavaScript" FOR="window" EVENT="onload()">
parent.status = ('LFB Promotion 2002')
</script>
<link rel="stylesheet" type="text/css" href="Logo/sommaire.css">
</head>

<body bgcolor="#E7E7CF" text="#000000">
<div align="center">
<p><b><font size="3" face="Arial">Bonjour <? echo"$pseudo" ?></font></b></p>
<p> </p>
<p><a href="modifperso.php"><font size="3" face="Arial">Modifier ses données personnelles (autoriser la publication dans la
liste des membres)</font></a></p>
<p> </p>
<p><a href="deconnexion.php"><font size="3" face="Arial">Se déconnecter</font></a></p>
</div>
</body>
</html>

Voici le texte d'erreur:

Notice: Undefined index: login in c:\program files\easyphp\www\lfb\espacemembre\accueilmembres.php on line 3

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp\www\lfb\espacemembre\accueilmembres.php on line 4

Qui dois-je faire?

Merci d'avance,

Arnaud

33 réponses

Résumé de la discussion

Le problème central décrit une page d'accueil membre qui lit $_POST['login'] mais déclenche une notice Undefined index: login lorsque le paramètre n'est pas transmis et que la requête échoue. Des réponses suggèrent de vérifier l'existence des données POST avec isset, d'utiliser des sessions pour l'authentification et de moderniser le code avec PDO/MySQLi afin d'éviter les dépréciations et risques. D'autres interventions soulignent des failles potentielles (injections SQL, stockage des mots de passe) et proposent des ajustements ciblés comme remplacer $_POST par $_SESSION et corriger le flux de connexion. En complément, la situation souligne que la sécurité et la stabilité des pages d'authentification nécessitent une vérification systématique des entrées et une séparation claire entre affichage et traitement côté serveur.

Bobot (l’IA à votre service)
  1. Le message suivant:
    Notice: Undefined index: login in c:\program files\easyphp\www\lfb\espacemembre\accueilmembres.php on line 3


    veut dire qu'il y a une erreur ligne 3:
    $req=mysql_query("select pseudo from membres where login='$_POST[login]'"); 


    et selon ce qui est dit, l'index 'login' n'existe pas: autrement dit, dans ton tableau $_POST il n'y pas de login. Il n'est pas passer lors de l'envoit de ton formulaire.
    Ton erreur arrive tout le temps ou seulement quand le login est vide ?

    Tu peut tester si le login est définie en faisant:
    if(isset($_POST['login'])){
      //login OK
       ...
    } else {
      //login erreur
       ...
    }


    Le deuxieme message d'erreur te dit que le résultat de la requete SQL est invalide ( ce qui découle de ta première erreur)
    0
    1. Bon déjà merci,

      au départ je tiens à dire que la ligne était comme ça:
      $req=mysql_query("select pseudo from membres where login='$login'");
      J'ai ajouté le post car il disait undefined variable

      Quoi qu'il en soit, le problème intervient tout le temps. Il est impossible d'arriver sur cette page sans avoir mis le login sur celle d'avant.

      De plus, pour ton essai, je ne sais pa ou je dois insérer le champs. Jjuste avant ?> au quel car l'erreur ne s'affiche (pas la premiere du moins) mais la page ne s'affiche plus du tout.

      Arnaud
      0
      1. J'ai trouvé mettre ton code. Il me dit:

        Notice: Undefined variable: pseudo in c:\program files\easyphp\www\lfb\espacemembre\accueilmembres.php on line 32
        0
        1. ps: c'est au niveau du

          echo"$pseudo"
          0
          1. Modérateur
            Il manque un espace :-)
            echo "$pseudo";

            D'ailleurs tu peux tout aussi bien écrire
            echo $pseudo;

            Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
            0
            1. merci, on avance!!! Voila ce que j'ai maintenant:

              Notice: Undefined variable: pseudo in c:\program files\easyphp\www\lfb\espacemembre\accueilmembres.php on line 32

              Le nouveau texte est celui ci:

              <? include('verifsession.php');
              include('sql_connect.php');

              if(isset($_POST['login'])){
              //login OK
              $req=mysql_query("select pseudo from membres where login='$login'");
              $pseudo=mysql_result($req,0,"pseudo");

              } else {
              //login erreur

              }
              ?>
              <html>
              <head>
              <title>Accueil membre</title>
              <SCRIPT LANGUAGE="JavaScript1.1">
              function right(e)
              {var msg = "Le vol est interdit chez moi";
              if (navigator.appName == 'Netscape' && e.which == 3){alert(msg);}
              else if (navigator.appName == 'Microsoft Internet Explorer' && event.button==2){alert(msg);}return true;}
              document.onmousedown = right;
              </SCRIPT>
              <script LANGUAGE="JavaScript" FOR="window" EVENT="onload()">
              parent.status = ('LFB Promotion 2002')
              </script>
              <link rel="stylesheet" type="text/css" href="Logo/sommaire.css">
              </head>

              <body bgcolor="#E7E7CF" text="#000000">
              <div align="center">
              <p><b><font size="3" face="Arial">Bonjour <? echo "$pseudo" ?></font></b></p>
              <p> </p>
              <p><a href="modifperso.php"><font size="3" face="Arial">Modifier ses données personnelles (autoriser la publication dans la
              liste des membres)</font></a></p>
              <p> </p>
              <p><a href="deconnexion.php"><font size="3" face="Arial">Se déconnecter</font></a></p>
              </div>
              </body>
              </html>
              0
              1. Modérateur
                Ca par contre c'est bizzare. L'erreur dit que la variable $pseudo n'est pas définie et pourtant si....

                PS: Bloquer le clic droit de la souris ne te préservera en rien du vol ;-)

                Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
                0
                1. Donc je dois faire quoi? ;-)

                  Arnaud
                  0
                  1. Modérateur
                    C'est un code généré par Dreamweaver?

                    Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
                    0
                    1. En fait c'est un script qu'un ami m'a fait, et qu'il a adapté il y a quelque temps sur mon site multimania. Mais maintenant, je l'héberge chez moi avec easyphp... Cela dit, le script marche très bien sur multimania...
                      0
                      1. Modérateur
                        Ah , j'ai trouvé... Etant donné que la page n'a pas reçu la variable $_POST['login'], eh bien la variable $pseudo n'a pas été initialisée....

                        Donc remplacer
                        Bonjour <? echo "$pseudo" ?>

                        Par
                        Bonjour <?
                        if (isset($pseudo)) echo $pseudo 
                        ?>

                        Ta page doit elle obligatoirement recevoir un utilisateur connecté avec login?

                        Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
                        0
                        1. Je n'ai plus de message d'érreur, par contre il n'y a rien d'écrit à coté de bonjour...

                          Et oui, il est impossible d'acceder a cette page sans se logger a la page precedente

                          Arnaud
                          0
                          1. Je n'y connais rien, mais quand je me log depuis la page d'avant, il y atrès rapidement une page ou je crois lire d'autres undefined variable... Le problème vient peut etre d'une autre page non? car depuis que j'ai transferé mes pages depuis multimania, plus aucune des bases ne fonctionne...

                            De plus je viens de remarquer que quelque soit le mot de passe que l'on met, il valide du moment que le login est existant...
                            0
                            1. J'ai aussi oublié de dire qu'au départ j'utilisait easyphp 1.7 mais que l'on m'a conseillé d'utiliser easyphp 1.6 pour des raisons de compatibilité... Et en effet quand je suis passé sur le six, la plupart des scripts fonctionnaient (dont celui de l'espace membre sur lequel nous sommes en train de nous arracher les cheveux). mais depuis que j'ai redemarré mon ordi ce matin, c'est revenu comme avant sur easyphp 1.7

                              Arnaud
                              0
                              1. Modérateur

                                Bon... Multimania a probablement activé les variables globales, chose que ne fait peut être pas easyphp 1.7 contrairement au 1.6 (ce n'est qu'une supposition).

                                Pour expliquer en gros: sur multimania lorsque tu envoies une variable via un formulaire tu trouveras dans ce formulaire:
                                <input type="text" name="une_variable">

                                Lorsque tu la reçois sur la page de traitement (avec variables globales activées) tu l'auras de cette manière;
                                // Affichera le contenu de $ma_variable
                                echo $ma_variable;

                                Avec les variables globales désactivées il faut la recupérer comme ça:
                                /* Selon la methode employée par le formulaire (get ou post), on va prendre post pat défaut */
                                echo $_POST['ma_variable'];
                                


                                Voir: http://www.commentcamarche.net/php/phpform.php3

                                Bon je dis ça ce n'est qu'une supposition.... En tout cas la seconde solution marche, quelque soit le statut des variables.

                                Ensuite je n'ai pas l'impression que ton script vérifie le mot de passe des utilisateurs, il va cherche le pseudo dans la base de données puis c'est tout.
                                On peut même se connecter sur ta page sans s'être loggué.

                                Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
                                0
                                1. Merci encore,

                                  J'ai donc remplacé

                                  echo $pseudo

                                  par

                                  echo $_POST['pseudo'];

                                  Mais ça n'a rien changé...

                                  Je file lire ton lien, même si je suis à peu prêt sur que je ne vais rien y comprendre... ;-)

                                  Que penses-tu de tout ça? Que dois je faire? Si le problème est globale il est possible que cela ne viennent pas du code en lui même si?

                                  Arnaud
                                  0
                                  1. Modérateur
                                    Si tu veux t'adapter à Easy Php 1.7 il faut changer certaines variables qui sont entrées par methode post ou get (voir dans les formulaires:
                                    <form method="post".......>
                                    <form method="post">

                                    A partir de là tu adaptes tes variables, au lieu de recevoir des variables depuis un formulaire par $variable, tu reçois par $_GET['variable'] ou $_POST['variable'] selon la methode employée...

                                    Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
                                    0
                                    1. Ce que je ne comprends pas, c'est pourquoi cela a marché quelque temps... Et maintenant fini...

                                      Si tu veux te rendre compte de ce qu'est mon malheur, rdv là:

                                      http://arnaud.myftp.biz

                                      Nous travaillons actuellement dans l'espace membre mais il y a aussi le forum et le chat qui ne marchent pas... plus tout ce qui est mail

                                      Si tu veux tester, tu peux utiliser le pseudo superman et comme mot de passe (bien que tu n'en aie pas besoin) superman64

                                      Arnaud
                                      0
                                      1. Ca j'ai comprends... Je te remercie...
                                        Mais dans notre cas cela n'a pas l'air de fonctionner...

                                        ps: je suis finalement resté sur easyphp 1.6

                                        Arnaud
                                        0
                                        1. Modérateur
                                          Mais je me trompe sûrement dans ce que je te dis car ton script utilise déjà
                                          $_POST['login'] pour recevoir les variables depuis un formulaire
                                          Donc je ne sais pas....

                                          Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
                                          0
                                          • 1
                                          • 2