Une erreur dans mon code php

Résolu
drogba7213 Messages postés 1550 Statut Membre -  
drogba7213 Messages postés 1550 Statut Membre -
Bonjour,

Voici mon code j'ai un soucis j'ai beau essayer de le debugger je n'arrive pas à comprendre pourquoi $loginOK n'est pas true pouvez vous jeter un coup d'oueil svp

require('Connexion.php');

$loginOK = false;

if ((isset($_POST['login'])) && (isset($_POST['mdp'])) )
{
$password =$_POST['mdp'];
$login=$_POST['login'];

$sql = "SELECT LOGIN FROM PERSONNES WHERE LOGIN = '".addslashes($login)."' AND PASSWORD='".md5($password)."'";
$req = odbc_exec($conn,$sql) or die('Erreur SQL : <br />'.$sql);

if (odbc_num_rows($req) > 0)
{
$loginOK = true;
}
}

if ($loginOK)
{

//header("Location: ../Classement/choix.html\n\n");

echo "ca roule ma poule";
}
else
{
echo 'Une erreur est survenue, veuillez réessayer !';
}
odbc_close($conn);

merci d'avance
Configuration: Windows 2003
Internet Explorer 7.0

8 réponses

  1. Utilisateur anonyme
     
    il faut que tu redéfinisse ta variable $loginOK or c'est une variable globale.
    Quand tu utilise une variable dans une fonction en PHP, par défaut, elle est considérée comme locale et non globale.
    Pour dire que tu redéfinis la variable globale dans une fonction PHP il faut que tu ajoutes

    global $loginOK = true; 
    0
  2. Mikey_UFC Messages postés 315 Statut Membre 1
     
    Salut,

    Fait un echo $sql avant d'exécuter ta requête et regarde ce qui ne va pas.
    Pour tester, tu l'exécutes directement dans ta BDD pour voir si tu as un message d'erreur et pour voir si un enregistrement correspond bien.
    0
  3. drogba7213 Messages postés 1550 Statut Membre 22
     
    excusez moi mais pourquoi il faut la défiir global?
    0
    1. Utilisateur anonyme
       
      En programmation informatique, une variable globale est une variable déclarée à l'extérieur du corps de toute fonction ou classe, et pouvant donc être utilisée n'importe où dans le programme.

      Une variable locale à un sous-programme sera considérée ou non comme accessible aux sous-programmes.
      0
  4. drogba7213 Messages postés 1550 Statut Membre 22
     
    oui d'accord mais $loginOK est local
    et le reste est envoyé par la méthode post
    donc je voit pas pourquoi mettre global

    Enfin les variables global il me semble sont des trous de sécurité et c'est pour ca que les serveurs ont le le blobal définit sur off par défault dans les fichiers de config.
    0
    1. Utilisateur anonyme
       
      je reprend ton code et le le commente.Je ne touche absolument rien

      au passage les variables global il me semble sont des trous de sécurité -> absolument faux
      les serveurs ont le le blobal définit sur off par défault -> absolument faux

      P.S.: pense à instancer ton code

      // tu utilises un fichier qui s'appelle connexion.php je suppose que c'est ta classe
      require('Connexion.php');
      
      // tu déclares une variable globale
      $loginOK = false;
      
      
      //tu test si les login et mot de passe sont définit
      if ((isset($_POST['login'])) && (isset($_POST['mdp'])) )
      {
      
         // si c'est définit tu les stock dans des variables locales
         $password =$_POST['mdp'];
         $login=$_POST['login'];
      
         // tu créé ta requête SQL
         $sql = "SELECT LOGIN FROM PERSONNES WHERE LOGIN = '".addslashes($login)."' AND     PASSWORD='".md5($password)."'";
         //tu exécutes ta requête SQL
         $req = odbc_exec($conn,$sql) or die('Erreur SQL : <br />'.$sql);
      
         // tu test si ta requête à au moins 1 ligne
         if (odbc_num_rows($req) > 0)
         {
            // tu met la variable locale à vrai
            // ton erreur est ici car la variable $loginOK est détruite
            $loginOK = true;
         }
      }
      // ta variable $loginOK n'existe plus à partir d'ici
      
      // tu test si un variable qui n'existe pas est à vrai 
      // c'est impossible donc tu tombes directement dans le else
      if ($loginOK)
      {
         //header("Location: ../Classement/choix.html\n\n");
         //tu affiches "ca roule ma poule"
         echo "ca roule ma poule";
      }
      else
      {
         // tu affiches "Une erreur est survenue, veuillez réessayer !"
         echo 'Une erreur est survenue, veuillez réessayer !';
      }
      
      // tu fermes ta connexion
      odbc_close($conn); 
      0
      1. Mikey_UFC Messages postés 315 Statut Membre 1 > Utilisateur anonyme
         
        faux la variable n'est pas détruite, il est toujours sur la même page donc il utilise toujours la variable locale définit plus haut.

        il faut toujours éviter d'utiliser des variables globales.
        0
      2. Utilisateur anonyme > Mikey_UFC Messages postés 315 Statut Membre
         
        il faut toujours éviter d'utiliser des variables globales.

        quand tu programmes en objet c'est inévitable.
        0
      3. Utilisateur anonyme > Utilisateur anonyme
         
        Heu MDR je suis désolé mais je viens de me relire et c'est faux ce que je dis

        sauf

        au passage les variables global il me semble sont des trous de sécurité -> absolument faux
        les serveurs ont le le blobal définit sur off par défault -> absolument faux
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mikey_UFC Messages postés 315 Statut Membre 1
     
    Il ne faut pas la définir sur global.

    As tu affiché ta requête et fonctionne-t-elle directement sur ton SGBD ?
    0
  7. drogba7213 Messages postés 1550 Statut Membre 22
     
    C'est bizarre parce que maintenant que j'ai changé la fonction odbc ca fonctionne je comprend rien du tout

    <?php

    require('Connexion.php');

    $loginOK = false;

    if ((isset($_POST['login'])) && (isset($_POST['mdp'])) )
    {
    $password =$_POST['mdp'];
    $login=$_POST['login'];
    $sql = "SELECT LOGIN FROM PERSONNES WHERE LOGIN = '".addslashes($login)."' AND PASSWORD='".md5($password)."'";
    $req = odbc_exec($conn,$sql) or die('Erreur SQL : <br />'.$sql);

    if (odbc_fetch_row($req))
    {
    $loginOK = true;
    }
    }

    if ($loginOK)
    {
    if ($login == 'Gestionnaire des arrêts chaînes')
    {
    header("Location: Utilisateur.php\n\n");
    }
    }
    else
    {
    echo 'Une erreur est survenue, veuillez réessayer !';
    }
    odbc_close($conn);

    ?>

    ok donc c'est pour ca que ca fonctionne jme disais aussi jcomprenais pas ce que tu voulais dire dante

    par contre dites moi maintenant que je verifit si le login est bon alors il faut que je redirige ma page et la est le problème je fais

    if ($login == 'Gestionnaire des arrêts chaînes')
    {
    header("Location: Utilisateur.php\n\n");
    }

    et ca ne fonctionne pas il me met :

    Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\www\Logiciel\Connexion.php:1) in C:\Program Files\Apache Group\Apache2\htdocs\www\Logiciel\Login.php on line 25

    Savez vous pourquoi svp?

    Dante si tu aurais quelque temps a m'accorder je voudrais me mettre à l'objet j'ai deux trois base mais j'arrive pas a démarrer mais bon faudrais mieux que l'on regle ce problème a part de celui ci et donc si c'est possible de parler sur msn ou autre
    tien moi au courant

    merci
    0
  8. drogba7213 Messages postés 1550 Statut Membre 22
     
    ah mdr j'ai trouvé j'avais fait deux espaces avant la balise php ahah

    par contre la page vers laquelle je redirige la page n'applique pas mon css est ce normal?
    0
    1. Utilisateur anonyme
       
      dans ton <head></head> de ta nouvelle age tu as bien mis

      <link rel="stylesheet" href="leLienVersTonFichierCss.css" media="screen" type="text/css" />
      0
  9. drogba7213 Messages postés 1550 Statut Membre 22
     
    oui lol
    0