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 :

Problème Undefined variable


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut Problème Undefined variable
    Notice: Undefined variable: pseudo in c:\program files\easyphp1-8\www\memb\login.php3 on line 5

    Notice: Undefined variable: passe in c:\program files\easyphp1-8\www\memb\login.php3 on line 5

    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\memb\login.php3:5) in c:\program files\easyphp1-8\www\memb\login.php3 on line 8
    Bonjour à tous !

    je souhaite créer une zone membre mais lorsque je veux m'identifier, j'obtiens ce message d'erreur. Après quelques recherches dans ces forums, j'ai cru voir qu'il fallait définir la variable, mais après plusieurs essais, toujours rien !
    J'utilise easyphp avec mysql, j'avais testé chez Free avant et ça marchait...

    Voici le code de la page login.php3. Apparement le problème vient de cette page :

    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
    <?
    require("protec/passe/conf.php3");
     
    $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    $requete=mysql_db_query($sql_bdd,"select * from membre where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
    if(mysql_num_rows($requete)==0)
    	{
    	header("Location:$url_erreur");exit;
    	}
    else
    $destination=mysql_result($requete,$i,"destination");
    	{
    	$taille = 20;
    	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    	srand(time());
    	for ($i=0;$i<$taille;$i++)
    		{
    		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
    		}
     
    	$requete=mysql_db_query($sql_bdd,"update membre set id=\"$id\" where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
     
    	header("Location:$destination?id=$id");
    	}	
     
    mysql_close($db_link);
    ?>

    P.S : le fichier conf.php3 est en théorie, bien renseigné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?
    $sql_serveur="localhost";
    $sql_user="root";
    $sql_passwd="XXXXXXXXX";
    $sql_bdd="mysql";
    $url_erreur="erreur.htm";
    $motdepasse="motdepasse";
    ?>

    Merci d'avance !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 61
    Points
    61
    Par défaut
    je ne pourrais te corriger mais je trouve ta syhtaxe assez bizzare sur ta requete !!

    en gros ta variable n existe pas !!

    voila !! deole de ne pouvoir aider plus !!

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    en effet, je la trouve bizarre aussi, mais il s'agit d'un script téléchargé qui permet de gérer un espace client et des redirections différentes selon les Login.

  4. #4
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    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
     
    <?php //essai d'utiliser le tag <?php plutot
    require("protec/passe/conf.php3");
     
    $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    $requete=mysql_db_query($sql_bdd,"select * from membre where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
    if(mysql_num_rows($requete)==0)
    {
    header("Location:$url_erreur");exit;
    }
    else //la il faudrait peut etre mettre l'acolade juste après le else... sinon ca n'a aucun sens
    $destination=mysql_result($requete,$i,"destination");
    {
    $taille = 20;
    $lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    srand(time());
    for ($i=0;$i<$taille;$i++)
    {
    $id.=substr($lettres,(rand()%(strlen($lettres))),1);
    }
     
    $requete=mysql_db_query($sql_bdd,"update membre set id=\"$id\" where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
     
    header("Location:$destination?id=$id");
    }
     
    mysql_close($db_link);
    ?>
    Après pour ton problème effectivement tes deux variables viennent de nul part

    Tu y arrive comment sur cette page? après avoir validé un formulaire? si c'est le cas essaie plutot avec $_POST['pseudo']

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    j'arrive sur cette page à la suite d'un formulaire login.php, mais ça ne marche toujours pas en ayant effectué ces modifications.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    voilà le code du formulaire contenu dans la page login.htm

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form method="post" action="login.php3">
      <div align="center"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Pseudo<br>
        <input type="text" name="pseudo">
        <br>
        <br>
        Mot de passe</font></b><br>
        <input type="password" name="passe">
        <br>
        <br>
        <input type="submit" name="Submit" value="Entrer" class="input">
      </div>
    </form>

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    et voici la nouvelle erreur :

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\memb\login.php3 on line 9

    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\memb\login.php3:9) in c:\program files\easyphp1-8\www\memb\login.php3 on line 11
    j'ai juste ajouté ça : $pseudo=$_POST['pseudo'];
    $passe=$_POST['passe'];

  8. #8
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    D'après la nouvelle erreur quand tu fais un mysql_num_row il ne reconnait pas la variable que tu lui donne. Il y a de fortes chances que ca soit parce que la requête a échouée si mes souvenirs sont bons.

    Essaie d'afficher la requête et de la lancer directement dans phpMyAdmin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "select * from membre where pseudo=\"$pseudo\" and passe=\"$passe\"";

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    voilà ce que ça m'affiche :

    Notice: Undefined index: pseudo in c:\program files\easyphp1-8\www\memb\login.php3 on line 4

    Notice: Undefined index: passe in c:\program files\easyphp1-8\www\memb\login.php3 on line 5
    select * from membre where pseudo="test" and passe="blablable"
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\memb\login.php3 on line 10

    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\memb\login.php3:4) in c:\program files\easyphp1-8\www\memb\login.php3 on line 12
    il y a bien la requete qui s'affiche ...

  10. #10
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    mets après ta requête un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(...) or die(mysql_error())
    c'est pour voir si il n'y a pas d'erreur.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    toujours le même message d'erreur ...

  12. #12
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Remet moi ton code avec ce que tu as rajouté depuis la début.

    Et sinon si tu enlève le 3 dans les extensions php ca change quelque chose? (au lieu de .php3 tu auras .php)

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    j'ai essayé en enlevant le 3 a php ... mais ça donne rien

    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
    <?php
    require("protec/passe/conf.php3");
     
    $pseudo=$_POST['pseudo'];
    $passe=$_POST['passe'];
     
    $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    echo "select * from membre where pseudo=\"$pseudo\" and passe=\"$passe\"";
    $requete=mysql_db_query($sql_bdd,'select * from membre where pseudo=\"$pseudo\" and passe=\"$passe\" ',$db_link);
    if(mysql_num_rows($requete)==0)
    	{
    	header("Location:$url_erreur");exit;
    	}
    else {
    $destination=mysql_result($requete,$i,"destination");
     
    	$taille = 20;
    	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    	srand(time());
    	for ($i=0;$i<$taille;$i++)
    		{
    		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
    		}
     
    	$requete=mysql_db_query($sql_bdd,"update membre set id=\"$id\" where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
     
    	header("Location:$destination?id=$id");
    	}	
     
    mysql_close($db_link);
    ?>

  14. #14
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Ha...

    Dans ton mysql_query tu utilise les simple quote ' ' pour délimiter ta requête. Mais dans ce cas les variables ne sont pas remplacées par les valeurs. Il faut utiliser les double quote " " à la place.

    Ou si tu veux vraiment utiliser les ' ' il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete=mysql_db_query($sql_bdd,'select * from membre where pseudo=\"' .$pseudo. '\" and passe=\"' .$passe. '\" ',$db_link);
    (concatenation de chaine)

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    voilà ce que j'obtiens

    select * from membre where pseudo="' .tgh. '" and passe="' .ggggggg. '"
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\memb\login.php3 on line 11

    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\memb\login.php3:8) in c:\program files\easyphp1-8\www\memb\login.php3 on line 13
    avec ce 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
    <?php
    require("protec/passe/conf.php3");
     
    $pseudo=$_POST['pseudo'];
    $passe=$_POST['passe'];
     
    $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    echo "select * from membre where pseudo=\"' .$pseudo. '\" and passe=\"' .$passe. '\" ";
    $requete=mysql_db_query($sql_bdd,'select * from membre where pseudo=\"' .$pseudo. '\" and passe=\"' .$passe. '\" ',$db_link);
     
    if(mysql_num_rows($requete)==0)
    	{
    	header("Location:$url_erreur");exit;
    	}
    else {
    $destination=mysql_result($requete,$i,"destination");
     
    	$taille = 20;
    	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    	srand(time());
    	for ($i=0;$i<$taille;$i++)
    		{
    		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
    		}
     
    	$requete=mysql_db_query($sql_bdd,"update membre set id=\"$id\" where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
     
    	header("Location:$destination?id=$id");
    	}	
     
    mysql_close($db_link);
    ?>

  16. #16
    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
    Essaies de vérifier qu'il n'y a pas une erreur avec la requete avant d'essayer de récupérer le nombre de résultats. Parce que là, on voit bien que ta requete n'est pas valide, il y a des . en plein milieu.

    Je t'ai changé la requete pour qu'elle soit mieux formée.

    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
     
    <?php
    require("protec/passe/conf.php3");
     
    $pseudo=$_POST['pseudo'];
    $passe=$_POST['passe'];
     
    $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
    $maRequete = "select * from membre where pseudo='" .$pseudo. "' and passe='' .$passe. "'";
    $requete=mysql_db_query($sql_bdd,$maRequete,$db_link);
    
    // si erreur
    if(!$requete)
       {
      die("Code d'erreur : " . mysql_errno() . " Message d'erreur : " . mysql_error());
       }
    
    if(mysql_num_rows($requete)==0)
    {
    header("Location:$url_erreur");exit;
    }
    else {
    $destination=mysql_result($requete,$i,"destination");
    
    $taille = 20;
    $lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    srand(time());
    for ($i=0;$i<$taille;$i++)
    {
    $id.=substr($lettres,(rand()%(strlen($lettres))),1);
    }
    
    $requete=mysql_db_query($sql_bdd,"update membre set id=\"$id\" where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
    
    header("Location:$destination?id=$id");
    }
    
    mysql_close($db_link);
    ?>

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    bon ça marche avec les premières modifications mais j'ai deux nouvelles erreurs qui apparaissent quand je m'identifie correctement.

    Notice: Undefined variable: i in c:\program files\easyphp1-8\www\memb\login2.php3 on line 24

    Notice: Undefined variable: id in c:\program files\easyphp1-8\www\memb\login2.php3 on line 31

    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\memb\login2.php3:24) in c:\program files\easyphp1-8\www\memb\login2.php3 on line 36

    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
     
    <?php
    require("protec/passe/conf.php3");
     
    $pseudo=$_POST['pseudo'];
    $passe=$_POST['passe'];
     
    $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
     
    $maRequete = "select * from membre where pseudo='$pseudo' and passe='$passe'";
     
    $requete=mysql_db_query($sql_bdd,$maRequete,$db_link);
     
    // si erreur
    if(!$requete)
       {
      die("Code derreur " . mysql_errno() . " Message derreur : " . mysql_error());
       }
     
    if(mysql_num_rows($requete)==0)
    {
    header("Location:$url_erreur");exit;
    }
    else {
    $destination=mysql_result($requete,$i,"destination");
     
    $taille = 20;
    $lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    srand(time());
    for ($i=0;$i<$taille;$i++)
    {
    $id.=substr($lettres,(rand()%(strlen($lettres))),1);
    }
     
    $requete=mysql_db_query($sql_bdd,"update membre set id=\"$id\" where pseudo=\"$pseudo\" and passe=\"$passe\"",$db_link);
     
    header("Location:$destination?id=$id");
    }
     
    mysql_close($db_link);
    ?>

  18. #18
    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
    Les messages d'erreur sont quand même bien explicites là... Il ne connait pas les variables.

    Pour $i quand tu es à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $destination=mysql_result($requete,$i,"destination");
    $i n'a pas encore été défini, c'est plus tard dans le code.


    Et pour $id il y a un problème, tu fais une concatanétion dans une boucle mais tu n'initialises jamais cette variable auparavant. Donc la concaténation peut donner des trucs bizarres, et en plus si tu ne passes pas dans la boucle $id n'est du coup pas défini d'où le message d'erreur.

  19. #19
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    En fait la y'a deux notice qui te signale qu'il faut définir tes variable avant de les utiliser....

    Par contre l'erreur (Warning) veut dire que tu as deja envoyé des informations (affichage d'html ou autre) avant d'appeler ta fonction header().Est ce qu'il y a du code avant ce que tu nous a montré?

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 1
    Points
    1
    Par défaut
    non je vous ai fourni tout le code ...

    que faut-il faire pour déclarer ces variables ???

Discussions similaires

  1. problème avec array Notice: Undefined variable:
    Par seksaki dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 10/11/2009, 19h01
  2. problème undefined variable: _SESSION
    Par Sniper94-2 dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2007, 11h34
  3. Réponses: 29
    Dernier message: 02/04/2007, 10h42
  4. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 18h41
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 10h31

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