J'ai un erreur dans ma page connexion [Résolu/Fermé]

Signaler
Messages postés
72
Date d'inscription
lundi 12 novembre 2012
Statut
Membre
Dernière intervention
1 juin 2013
-
Messages postés
51
Date d'inscription
lundi 26 novembre 2012
Statut
Membre
Dernière intervention
4 décembre 2012
-
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

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.
Messages postés
51
Date d'inscription
lundi 26 novembre 2012
Statut
Membre
Dernière intervention
4 décembre 2012
2
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.
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 :)
Messages postés
51
Date d'inscription
lundi 26 novembre 2012
Statut
Membre
Dernière intervention
4 décembre 2012
2
Oui excuse, j'avais mal lu.
Messages postés
23005
Date d'inscription
samedi 22 octobre 2005
Statut
Modérateur
Dernière intervention
23 octobre 2020
2 126
quel est le code de l'erreur de connexion ?
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() .
Notice: A session had already been started veut dire:
Rapport: une session à déjà été démarrée.
Messages postés
51
Date d'inscription
lundi 26 novembre 2012
Statut
Membre
Dernière intervention
4 décembre 2012
2
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
Messages postés
72
Date d'inscription
lundi 12 novembre 2012
Statut
Membre
Dernière intervention
1 juin 2013

merci pour tous :)