J'ai un erreur dans ma page connexion

Résolu/Fermé
debloc12 Messages postés 72 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 1 juin 2013 - 26 nov. 2012 à 11:55
aomann Messages postés 51 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 - 27 nov. 2012 à 14:48
Bonjour,
j'ai un erreur dans le code php de ma page de connexion quelqu'un peut m'aidez
voici le code php
(
<?php
$email_membre=$_POST['email_membre'];
$mdp_membre=$_POST['mdp_membre'];
$connect = mysql_connect("127.0.0.1","root","");
mysql_select_db("base",$connect);
$sql="select * from membre where email_membre ='". $email_membre."' and mdp_membre = '".$mdp_membre."'" ;
$resultat=mysql_query($sql);
$nb=mysql_num_rows($resultat);
if($nb>0)
{session_start();
while ( $row = mysql_fetch_array( $resultat)) {
$_SESSION['email_membre']=$row["email_membre"];
$_SESSION['nom_membre']=$row["nom_membre"];
$_SESSION['prenom_membre']=$row["prenom_membre"];
$_SESSION['id_membre']=$row["id_membre"];



header("location:profil.php");


}
}
?>

)
le code html

(
<form name="f" action="" method="post">
<h3><font color="#FF9900">Authentification</font></h3>
E_mail:<input type="text" name="email_membre"/><br>
Mot de passe:<input type="password" name="mdp_membre"><br><br>
<input type="submit" value="Connexion"><br>
<a href="inscription.php">Inscrivez vous</a>
</form>

)
l'erreur:
Notice: A session had already been started - ignoring session_start() in C:\Program Files\EasyPHP-12.1\www\deblocmag\index.php on line 108

Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\EasyPHP-12.1\www\deblocmag\index.php:99) in C:\Program Files\EasyPHP-12.1\www\deblocmag\index.php on line 117
A voir également:

5 réponses

Tu as deux erreurs enfaite. Premièrement ton include pour ta connexion à la base est après du code html. Les Headers doivent être obligatoirement définis avant toute ligne de code html, donc il faut éviter les header("Location: #"). Pour ce genre de script utilise :
echo '<script type="text/javascript">document.location="profil.php"</script>';

Deuxièmement, tu as définis deux fois session_start() donc soit tu le supprime de ton include soit de ta page, cette décision dépend du reste du site, si tu utilise fréquemment ta base et les session mieux vaut laisser le session_start() dans ta connexion et inversement.
0
aomann Messages postés 51 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 2
Modifié par aomann le 26/11/2012 à 23:44
On peut très bien utiliser header("Location: "); pour ce genre de script. Il ne faut juste pas faire d'echo sur la page et empêcher l'affichage d'erreur lors de l'exécution de la page. Tant header que session_start n'autorise pas d'echo. Les header ne doivent pas nécessairement être à la première ligne de code non plus.
0
Pas le première ligne de code mais un Header ne peut pas être déclaré après du html, donc si le include se trouve après du code Html cela plante. J'ai eu le même problème sur un script je ne comprenais pas d'où ça venait car effectivement en Localhost le fichier php.ini autorise ce genre de configuration mais une fois passé sur l'hébergeur ce n'est pas paramétré c'est une sécurité pour certains problèmes d'encodages. Le mieux reste donc d'après moi de laisser cette sécurité et de définir les header avant où d'utiliser du javascript qui marche aussi bien :)
0
aomann Messages postés 51 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 2
27 nov. 2012 à 14:48
Oui excuse, j'avais mal lu.
0
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
26 nov. 2012 à 12:12
quel est le code de l'erreur de connexion ?
0
Quand tu réalise un include, au moment de l'exécution, il rajoute juste le bout de code à l'endroit prévu, ce qui fait que ton code est un peu plus grand. Un session_start() ne peut être définis qu'une seule fois par page donc si tu include un session_start() dans une page qui en contenait déjà un, tu aura l'erreur : Notice: A session had already been started. Il faut que tu supprime un des deux session_start() .
0
Notice: A session had already been started veut dire:
Rapport: une session à déjà été démarrée.
0
aomann Messages postés 51 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 2
Modifié par aomann le 26/11/2012 à 23:56
Salut,

C'est une erreur cool !

Voici ce qui se passe:

-> Une erreur de type E_NOTICE est lancée pour vous dire qu'une session a déjà été lancée. Elle vous avise qu'elle ignora la commande.

Certaines personnes ignorent les erreurs de type E_NOTICE. C'est configurable dans php.ini, un fichier .htaccess ou directement sur le page php avec error_reporting();

Il est fortement recommandé de ne pas afficher les erreurs lorsque le site est mis en production.

Revenons au problème.

-> Comme une erreur est lancée et qu'elle est affichée à l'écran, il est alors impossible de faire un header('location: '); La deuxième erreur est donc lancée à cause de la première erreur.

3 solutions:
-> Retirer les erreurs de type E_NOTICE
-> Ne plus afficher les erreurs à l'écran, mais dans un fichier log
-> Corriger le problème de deux session_start(); (La meilleure solution selon moi)

Alex
0

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

Posez votre question
debloc12 Messages postés 72 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 1 juin 2013
27 nov. 2012 à 14:42
merci pour tous :)
0