Une erreur dans mon code php

Résolu
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. 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?
    1. dans ton <head></head> de ta nouvelle age tu as bien mis

      <link rel="stylesheet" href="leLienVersTonFichierCss.css" media="screen" type="text/css" />
  2. 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
  3. Il ne faut pas la définir sur global.

    As tu affiché ta requête et fonctionne-t-elle directement sur ton SGBD ?
    1. 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.
      1. 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); 
      2. @Utilisateur anonymefaux 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.
      3. @Utilisateur anonymeHeu 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
      4. @Mikey_UFCil faut toujours éviter d'utiliser des variables globales.

        quand tu programmes en objet c'est inévitable.
    2. excusez moi mais pourquoi il faut la défiir global?
      1. 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.
    3. 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.
      1. 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;