J’ai un problème de débutant que je n’arrive pas à résoudre :riva:
Le fameux "Warning: Cannot modify header information - headers already sent by (output started at …
Je suis très ennervé, car j’ai beau chercher, je ne vois aucun espace, ni rien de rien qui aurait pu créer du contenu avant l’en-tête.
Alors peut-etre que mes yeux fatiguent… aussi je vous passe le script, voire si quelqu’un peut y trouver LA petite merde que je n’ai pas vu.
Notez les 3 header (en fonction des cas). Pour les trois le problème est le même.
Alors pour l’histoire… on remplit un simple petit formulaire (login + pass) dans un fichier qui s’appele index2.php. Ce formulaire appele connexion.php (que voici) et celui-ci traite comme il se doit les données. En cas d’erreur, il fait un retour sur index2.php (d’ou la présence des header (location …) ) pour afficher le message d’erreur en fonction… de l’erreur ($etat).
<?php
if (isset($_POST['user'])){$user = $_POST['user'];}else{$user = NULL;}
if (isset($_POST['passwd'])){$passwd = $_POST['passwd'];}else{$passwd = NULL;}
include "connect.inc.php";
$queryacces = "SELECT * FROM user WHERE USER_USER = \"".$user."\"";
$resultacces = mysql_query($queryacces) or die(mysql_error());
$readacces = mysql_fetch_array($resultacces) or die(mysql_error());
if ( $readacces[0] != NULL )
{
if ( $readacces[2] == md5($passwd) )
{
if ( $readacces[27] != 0 )
{
session_start();
session_register('id','login');
$_SESSION['id'] = $readacces[0];
$_SESSION['login'] = $user;
header ("location:main.php");
}
else
{
$etat = "Compte desactivé !";
header ("location:index2.php?etat=".$etat);
exit();
}
}
else
{
$etat = "Mot de passe erroné ! Recommencez !";
header ("location:index2.php?etat=".$etat);
exit();
}
}
else
{
$etat = "Utilisateur inconnu, merci de vous inscrire !";
header ("location:index2.php?etat=".$etat);
exit();
}
?>
Vouip, mais j’ai oublié de préciser que ça va mal que dans un des cas ou le login/pass est pas bon (c’est à dire: pass erronné, ou login existant ou compte desactivé).
En gros… il rentre meme pas dans le dernier bloc if (qui contient le demarrage de session). Donc ça ne vient pas de là
c’est vraiment retort en général, faut voir si tu commences bien ton fichier par <?php (et pas d’espace avant) si tu le finis bien par ?>. Idem pour tout fichier inclut.
Oui, tous mes scripts commencent bien par <?php et terminent par ?>
Aucun espace ni avant, ni après :neutre:
Je sais plus ou chercher là :sweet:
Il n’y a rien d’autre que les deux scripts que je vous ai mis au-dessus
Comme ça fait un moment que j’y ai pas retouché en plus, je ne me souviens absolument pas si j’ai pu faire des modifs dedans. Car il y a une chose sur et certaine… ça marchait au poil il y a quelques temps.
Entre-temps, j’ai simplement upgradé easyPHP de la 1.7 à 1.8, mais je pense pas que ce soit ça :neutre:
Et si c’est le cas… je n’ai de toute façon toujours aucune idée de comment régler le problème étant donné que je ne vois toujours pas ou peut etre le contenu créé avant mes header :sweet:
:oui: d’ailleur ce n’est pas compliqué, connexion.php n’en reçoit que deux (user et passwd), qui sont initialisés.
$etat n’a pas besoin de l’être puisqu’elle est créée dans le script.
En revanche, en cas d’erreur (et donc… normalement de retour vers index2.php) elle est bien initialisée dans index2.php. Mais comme le retour ne se fait pas à cause de ce satané “Warning: Cannot modify header information - headers already sent by…”
Au passage, existe t-il un autre moyen que de passer par le header location pour faire une redirection automatique ?
Alors voilà, en testant tout et n’importe quoi, je me suis retrouvé à ce stade:
j’ai enlevé les deux "or die (mysql_error()) "
Maintenant j’ai un retour systématique (en cas d’erreur) sur ma page index2.php
En revanche, ma variable etat (qui passe en GET) ne s’affiche pas. Bon…
ça avance.
Pour l’affaire des or die mysql, j’en conclus donc ceci :
Quand on met un pseudo incorrect, comme le resultat est égale à null, le or die (mysql_error()) créé le fameux contenu.
Ce qui est fort ennuyeux, mais tanpis, je m’en passerais.
Concrètement… si l’utilisateur n’entre pas de pseudo (ou un pseudo incorrect), la requete va retourner un résultat NULL
Pour ça on est d’accord ?
Donc le die joue son role surement en racontant qu’il n’a rien trouvé.
Problème… le header ne veut pas de ça. Le die à le droit de raconter ce qu’il veut après, mais pas avant. Mais la requete il faut bien qu’elle se fasse avant :neutre:
Donc la connexion est bonne, seulement le résultat est NULL
Pourrais-tu m’en dire un peu plus sur ce pb de connexion auquel tu penses ?
A part le problème de connexion dont tu m’as fait part au dessus sans-nom, pour le reste…
ben c’est tout résolu.
Pour l’affichage de ma variable etat dans la page index2, j’ai juste modifié des double-quote en simple quote. Je sais pas pourquoi, ça marchait bien avant. Mais bon, ça remarche impecc et le code s’en trouve plus propre de toute façon.
Merci de vos conseils :jap:
J’attend juste d’avoir un complément d’info sur la connexion dont t’as parlé, et je met le topic en resolu