Problème d'authentification

Signaler
Messages postés
97
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
28 mai 2010
-
Messages postés
9
Date d'inscription
mardi 25 janvier 2005
Statut
Membre
Dernière intervention
18 novembre 2009
-
Bonjour a tous,
j'ai un problème et j'espère que quelqu'un pourra m'aider a le résoudre voilà mon soucis:
j'ai une page index.php ou il ya un rebrique d'authentification càd (email, password ) avant de saisir l'email et le mot de passe j'ai donné la possibilité a l'utilisateur de cocher(avec des radio) est ce qu'il est un candidat ou un recruteur, voilà mon formulaire:

<form name="form1" method="post" >
  

        Candidat
  

       &nbsp; Recruteur  
            Email : 
    </td>
Mot de passe : 
   </td>
  
</form>
voilà mon code php:

<?php


if (isset(!empty($_POST['radio1'])))
{
if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password']))
{
 
$database = mysql_connect('localhost', 'root', '');




mysql_select_db('recrutement',$database);
 


  $mysql = "SELECT Email, Password FROM matabl_candt WHERE Email='".$_POST['email']."' and Password='".$_POST['password']."'";
  $req = mysql_query($mysql) or die('Erreur SQL !
'.$mysql.'
'.mysql_error());


  $data = mysql_fetch_assoc($req);


  if($data['Password'] != $_POST['password']) {
   
     echo "Ton Pass ne correspond pas à celui de la BDD"; 


   }
  else {
       session_start();
       $_SESSION['Email'] = $_POST['email'];


    echo "Tu es bien connecté";


}  
}
else {


   echo "Tu as oublié de remplir un champ";


}
 header( "Location: http://localhost/recrute/AccueilCandidat.php" );
}
}


else if (isset(!empty($_POST['radio2'])))


{
if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password']))
{
 
$database = mysql_connect('localhost', 'root', '');




mysql_select_db('recrutement',$database);
 


  $mysql = "SELECT Email, Password FROM matable_recrut WHERE Email='".$_POST['email']."' and Password='".$_POST['password']."'";
  $req = mysql_query($mysql) or die('Erreur SQL !
'.$mysql.'
'.mysql_error());


  $data = mysql_fetch_assoc($req);


  if($data['Password'] != $_POST['password']) {
   
     echo "Ton Pass ne correspond pas à celui de la BDD"; 


   }
  else {
       session_start();
       $_SESSION['Email'] = $_POST['email'];


    echo "Tu es bien connecté";


}  
}
else {


   echo "Tu as oublié de remplir un champ";


}
 header( "Location: http://localhost/recrute/AccueilRecruteur.php" );
}
}


?>

13 réponses

Messages postés
97
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
28 mai 2010

bon j'ai oublié d'expliquer  mon problème c'est que lorsque je click sur le bouton connexion il m'affiche cette erreur sur ma page :
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\files\easyphp1-8\www\file\index.php:9)
est qu'il ya un moyen pour résoudre cette erreur
merci d'avance
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Salut,

Pour envoyer des cookies (ce que fait session_start si les sessions utilisent des cookies), comme pour utiliser la fonction header(), il ne faut pas que du texte ait déjà été envoyé, parce qu'ils font partie des entêtes.
Les entêtes, comme leur nom l'indique, sont envoyés en... entête. Si tu envoies du texte, c'est le corps de la réponse HTTP du serveur.

Une simple recherche sur google avec le message d'erreur donnait la solution...

Bonne continuation.
Messages postés
97
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
28 mai 2010

oui c'est fais mais j'ai pas trouvé grande chose, est ce que vous avez un exemple similaire de l'authentification des utilisateurs car je suis vraiment bloqué merci d'avance
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Je sais pas comment le dire...

Dans ton script, tu envoies du texte avant d'utiliser une fonction qui envoie des headers.
Or, quand tu envoies du texte, tu ne peux plus envoyer de header (set_sookie(), header() ou session_start(), etc), parce que ce n'est plus l'endroit.

Donc, il faut corriger ton script pour qu'il n'envoie plus de texte avant d'envoyer de header. C'est tout.
Messages postés
97
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
28 mai 2010

est ce que vous avez une idée sur comment je peux enlever du text parceque j'ai pas bien saisie votre réponse, merci
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Pour ça, faudrait voir la source du script...
Messages postés
97
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
28 mai 2010

je vous ai déjà envoyé toute la source, la voilà:
<form name="form1" method="post" >
  

        Candidat
  

       &nbsp; Recruteur  
            Email : 
    </td>
Mot de passe : 
   </td>
  
</form>
voilà mon code php:

<?php
if (isset(!empty($_POST['radio1'])))
{
if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password']))
{
 
$database = mysql_connect('localhost', 'root', '');

mysql_select_db('recrutement',$database);
 

  $mysql = "SELECT Email, Password FROM matabl_candt WHERE Email='".$_POST['email']."' and Password='".$_POST['password']."'";
  $req = mysql_query($mysql) or die('Erreur SQL !
'.$mysql.'
'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['Password'] != $_POST['password']) {
   
     echo "Ton Pass ne correspond pas à celui de la BDD"; 

   }
  else {
       session_start();
       $_SESSION['Email'] = $_POST['email'];

    echo "Tu es bien connecté";

}  
}
else {

   echo "Tu as oublié de remplir un champ";

}
 header( "Location: http://localhost/recrute/AccueilCandidat.php" );
}
}

else if (isset(!empty($_POST['radio2'])))

{
if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password']))
{
 
$database = mysql_connect('localhost', 'root', '');

mysql_select_db('recrutement',$database);
 

  $mysql = "SELECT Email, Password FROM matable_recrut WHERE Email='".$_POST['email']."' and Password='".$_POST['password']."'";
  $req = mysql_query($mysql) or die('Erreur SQL !
'.$mysql.'
'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['Password'] != $_POST['password']) {
   
     echo "Ton Pass ne correspond pas à celui de la BDD"; 

   }
  else {
       session_start();
       $_SESSION['Email'] = $_POST['email'];

    echo "Tu es bien connecté";

}  
}
else {

   echo "Tu as oublié de remplir un champ";

}
 header( "Location: http://localhost/recrute/AccueilRecruteur.php" );
}
}

?>
merci encore de votre patience
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
Salut,


"Ne pas envoyer du texte", compte aussi pour les Warning generer par PHP, ainsi juste ces deux lignes :

if (isset(!empty($_POST['radio1']))) << empty() est appler avant isset(), si $_POST['radio1'] existe pas, Warning
{
if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password'])) << idem pour le Warning, tu ne verifie par si $_POST['email'] et $_POST['password'] EXISTE (avec isset()).
{


id="radio1" name="choix" << $_POST['choix'] et non $_POST['radio1'] ou alors j'ai pas compris le sens du code... id servant quand ont joue au JS et aux <label for="nom_du_id">


Faut consulter la doc PHP, ansi :
mysql_select_db('recrutement',$database);

http://fr2.php.net/manual/fr/function.mysql-select-db.php
link_identifier ... "Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée."


Mauvaise indentation, mais :
else
{
echo "Tu as oublié de remplir un champ";
}
header( "Location: http://localhost/recrute/AccueilCandidat.php" );

Tu envoie du texte avant ton header(), ce que ta dis Neigedhiver.


http://fr2.php.net/manual/fr/
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Moi, j'abandonne... Bon courage juki...
Messages postés
97
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
28 mai 2010

salut juki, merci pour ton explication, mais j'ai oublié de vous dire que je suis débutant en php et c'est mon premier site , lorsque tu dis que empty() est appler avant isset(), qu'est ce que vus voudrai dire ?? et comment je peux vérifier si  $_POST['email'] et $_POST['password'] EXISTE ?
parceque j'ai trouvé ce bou de code sur un doc et je l'ai fais adapté merci de m'aider pour résoudre mon problème
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
if (isset(!empty($_POST['radio1'])))

empty() est evalué avant isset(), ici, empty() renvoie une valeur à la fonction isset().
a(b(c(d('quelque_chose')))); << d('quelque_chose') est évalué, le retour de cette fonction sera evalué par c(), le retour de c() sera evalué par b() etc...

"comment je peux vérifier si - une variable - EXISTE" << isset()
Dans un formulaire POST j'ai un champ 'test' => if (isset($_POST['test'])) { echo 'la variable POST test existe'; },


if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password'])) << ici tu as juste verifier si il ya des choses dans $_POST, mais tu ne verifie pas si $_POST['email'] et $_POST['password'] existe.

Le prototype de la fonction isset() nous dit : bool isset ( mixed var [, mixed var [, ...]] )

Les crochets et les virgules nous disent que nous pouvons faire evaluer plusieurs variables d'un coup;
if (isset($_POST['email'], $_POST['password']) && !empty($_POST['email']) && !empty($_POST['password'])) { }


http://fr.php.net/isset
http://fr.php.net/manual/fr/function.empty.php

Au final, il faut verifier qu'une variable existe pour ensuite faire des operations sur elles.
Messages postés
97
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
28 mai 2010

bonjour a tous,
je veux faire un test comme ça:
if ( isset($email != '')&& isset($password != '') )
{
}
mais lorsque je lance le navigateur il m'affiche cet erreur:
Parse error: parse error, expecting `','' or `')'' in c:\files\easyphp1-8\www\doss\test.php on line 187
que puis je faire?
Messages postés
9
Date d'inscription
mardi 25 janvier 2005
Statut
Membre
Dernière intervention
18 novembre 2009

Salut,

1) le "session_start" doit être la premiere chose que tu indique dans ton code c'est à dire qu'il faut l'écrire AVANT tout le code php et/ou html !

2) le "isset" renvoit true ou false sur une variable existante ou non. Il n'y a pas l'utilité de mettre une condition à l'interieur.
Soit tu ecris : if (isset($email) ...) {} soit tu écris if ($email != "" ...) {}
si tu veux compiler les deux, tu peux faire : if (isset($email) && $email != "" ...) {}

Bon courage pour la suite

pour info, le "site du zéro" propose des tutos bien fait pour les débutants.

Avec toute ma gratitude