Erreur header

Suivre ce topic
Ce topic est suivi par : Em-Bi
Florian

Florian Le 18 mai 2016 à 18:02 (Édité le 25 janvier 2019 à 17:51)

Hello,

J'ai un problème assez WTFF, c'est a dire que les header(Location) fonctionne pas 
le code
        header('Location: index.php');
        exit();
Y'a rien qui cloche pourtant

Je screen les packets PHP que j'ai mis sur mon site http://prntscr.com/b5khmu
Florian

Florian Le 18 mai 2016 à 20:06

Oups oublier l'erreur http://prntscr.com/b5m3rs le 1 vient de la echo isconnect(); tout en haut j'ai mis un if(isconnect() == false){ si il est pas connecter il doit se log, sinon redirection automatique mais ça redirige pas :x
Balatharas

Balatharas Le 18 mai 2016 à 20:06 (Édité le 18 mai 2016 à 20:07)

(C'est bien simple, il y a un retour de chariot à la première ligne. Ce retour de chariot est automatiquement envoyé au client, rendant la fonction header() inutilisable.)

La solution

Assurez-vous de ne rien envoyer au client avant d'utiliser header(), mais si vous n'avez pas le choix, vous pouvez utiliser deux autres fonctions PHP (ob_start() et ob_end_flush()) pour vous aider. Noter que cette solution ne fonctionne que si ob_start() est à la première ligne, comme header() devrait être.
Voici comment :
<?php ob_start()
echo "J'envoie des données au client, donc header() ne devrait pas marcher.";
header("Location: http://www.google.ca/");
ob_end_flush()
?>


Correct

ob_start() met en cache tous les outputs et empêche PHP d'envoyer quoi que ce soit au client, tant que la fonction ob_end_flush() n'est pas appelée. N'oublier pas d'appeler ob_end_flush(), ou sinon rien ne se passeras.


Source ---> UnProgrammeurPHP
Florian

Florian Le 18 mai 2016 à 20:26

Justement j'ai regarder ceci, et rien 

Voici le code

$title = "Connexion";
require('inc/header.php');
//echo $_SERVER['HTTP_X_FORWARDED_FOR'];
//echo "<br>". time();
if(isconnect() == false){
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])){
   $pseudo = htmlspecialchars($_POST['username']);
               $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = :username or users = :username");
               $requser->execute(array(":username" => $pseudo));
               $user = $requser->fetch();
    if(password_verify($_POST['password'], $user['password'])){
              updateLoginsLogs($user);
              $_SESSION['username'] = $user['users'];
              $_SESSION['mail'] = $user['mail'];
              $_SESSION['id'] = $user['id'];
              $_SESSION['grade'] = $user['grade'];
              $_SESSION['compteconfirmed'] = $user['confirmed'];
              $_SESSION['token_crsf'] = random(30);
              setFlash('Connexion réussie !', 'success');
              header('Location: ./'); // ICI ça bloque
}else{
   $erreur = "Mauvais mot de passe";
}
}
?>
  
      <div align="center">
         <h2>Connexion</h2>
         <br /><br />
         <form method="POST" action="">
            <input type="text" name="username" placeholder="Mail ou pseudo" />
            <input type="password" name="password" placeholder="Mot de passe" />
            <br /><br />
            <input type="submit" name="formconnexion" value="Se connecter !" />
         </form>
         <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
       }else{
        echo isconnect();
        header('Location: index.php'); // ICI ça bloque
       }
         ?>
       </div>
<?php
require('inc/footer.php');
?>
Balatharas

Balatharas Le 18 mai 2016 à 20:31

Je suis désolé je ne vois vraiment pas le problème. :(
Florian

Florian Le 18 mai 2016 à 21:12

Moi non plus :x 

Le pire, c'est que tout fonctionner, l'hébergeur a fait une MAJ sur le dédier et depuis se moment la y'a des bugs
Balatharas

Balatharas Le 19 mai 2016 à 18:58

J'ai plusieurs propositions:
  • Contacte ton administrateur web, ton hébergeur.
  • Recommence ton code a partir de la ou ça a planté (en supposant que tu as actualisé ta page pour tout vérifier lorsque tu écrivait le code, mais je pense que oui 😀 )
Cyberium

Cyberium Le 24 mai 2016 à 01:38

Location: ./
Tu essaies de rediriger vers où ? Tu devrais essayer un chemin absolu (Location: /forum/messagerie) pour voir si ça fonctionne.
Clouder

Clouder Le 24 mai 2016 à 13:00

Il ne manquerait pas déjà une 
}
?
Em-Bi

Em-Bi Le 4 octobre 2016 à 12:06

slt tout le monde !
ce blem a-t-il été resolu ou pas ?
je le rencontre moi aussi. Le header ne me redirige nul part.
j'attends votre aide 😒 ....
header("Location : connectuser.php"); //on dirait que ça ne reagit pas
Em-Bi

Em-Bi Le 4 octobre 2016 à 12:08

Florian si tu as décanté la situation, tu peux m'aider aussi !
Balatharas

Balatharas Le 5 octobre 2016 à 18:00

@Em-Bi donne le code qui se trouve avant le header (complet)
Em-Bi

Em-Bi Le 6 octobre 2016 à 12:43

<?php
session_start();
$bdd = new PDO('mysql: host=127.0.0.1; dbname=sada', 'root', '');
if(isset($_POST['formconnect']))
{
   $pseudoconnect=htmlspecialchars($_POST['pseudoconnect']);
   $mdpconnect = sha1($_POST['mdpconnect']);
   if (!empty ($pseudoconnect) AND !empty($mdpconnect))
   {
      $req = $bdd -> prepare("SELECT * FROM users WHERE mail = ? AND mdp = ?");
      $req -> execute (array($pseudoconnect,$mdpconnect));
      $userexist = $req -> rowCount();
      if ($userexist == 1)
      {
         $userinfo = $req -> fetch();
         $_SESSION ['id'] = $userinfo['id'];
         $_SESSION ['pseudo'] = $userinfo['pseudo'];
         $_SESSION ['mail'] = $userinfo['mail'];
         
         header('Location : profil.php?id='.$userinfo['id']); //pas de réaction ici
         exit; 
      }
      else
      {
         $erreur = "Mail ou mot de passe incorrect ";
      }
   }   
   else
   {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>
je ne faisais que suivre un tuto que j'ai trouvé ici !
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte