Une erreur dans mon code php

Résolu/Fermé
drogba7213 Messages postés 1521 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 3 avril 2010 - 27 janv. 2009 à 10:01
drogba7213 Messages postés 1521 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 3 avril 2010 - 27 janv. 2009 à 11:28
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
A voir également:

8 réponses

Utilisateur anonyme
27 janv. 2009 à 10:06
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
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
27 janv. 2009 à 10:09
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
drogba7213 Messages postés 1521 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 3 avril 2010 21
27 janv. 2009 à 10:10
excusez moi mais pourquoi il faut la défiir global?
0
Utilisateur anonyme
27 janv. 2009 à 10:16
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
drogba7213 Messages postés 1521 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 3 avril 2010 21
27 janv. 2009 à 10:38
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
Utilisateur anonyme
27 janv. 2009 à 10:51
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
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1 > Utilisateur anonyme
27 janv. 2009 à 10:56
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
Utilisateur anonyme > Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010
27 janv. 2009 à 10:58
il faut toujours éviter d'utiliser des variables globales.

quand tu programmes en objet c'est inévitable.
0
Utilisateur anonyme > Utilisateur anonyme
27 janv. 2009 à 10:57
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
27 janv. 2009 à 10:53
Il ne faut pas la définir sur global.

As tu affiché ta requête et fonctionne-t-elle directement sur ton SGBD ?
0
drogba7213 Messages postés 1521 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 3 avril 2010 21
27 janv. 2009 à 10:55
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
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
27 janv. 2009 à 11:15
0
drogba7213 Messages postés 1521 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 3 avril 2010 21
27 janv. 2009 à 11:24
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
Utilisateur anonyme
27 janv. 2009 à 11:26
dans ton <head></head> de ta nouvelle age tu as bien mis

<link rel="stylesheet" href="leLienVersTonFichierCss.css" media="screen" type="text/css" />
0
drogba7213 Messages postés 1521 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 3 avril 2010 21
27 janv. 2009 à 11:28
oui lol
0