2017-04-21 1 views
0

Je suis aux prises avec ce problème, pour une raison quelconque header("Location:http://corocloud.com/index.php/"); ne fonctionne pas, je l'ai essayé d'autres chemins du fichier, mais aucun travail, header("Location:index.php");, header("index.php");, header("./index.php/");L'en-tête PHP() ne fonctionne pas?

aucun de ces travaux, mon code est ceci:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>CoroCloud</title> 
 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
     <script src="./js/material.min.js"></script> 
 
     <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> 
 
     <link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.pink-indigo.min.css" /> 
 
     <style>.mdl-layout{align-items:center;justify-content:center;}.mdl-layout__content{padding:24px;flex:none;}</style> 
 
    </head> 
 
    <body> 
 
    <div class="mdl-layout mdl-js-layout mdl-color--grey-100"> 
 
     <main class="mdl-layout__content"> 
 
     <div class="mdl-card mdl-shadow--6dp"> 
 
      <div class="mdl-card__title mdl-color--primary mdl-color-text--white"> 
 
      <h2 class="mdl-card__title-text">CoroCloud</h2> 
 
      </div> 
 
      <div class="mdl-card__supporting-text"> 
 
      <form method="POST"> 
 
       <div class="mdl-textfield mdl-js-textfield"> 
 
       <input class="mdl-textfield__input" type="text" name="uname" /> 
 
       <label class="mdl-textfield__label" for="uname">Username</label> 
 
       </div> 
 
       <div class="mdl-textfield mdl-js-textfield"> 
 
       <input class="mdl-textfield__input" type="password" name="pass"/> 
 
       <label class="mdl-textfield__label" for="pass">Password</label> 
 
       </div> 
 
       <div class="mdl-card__actions"> 
 
       <input type="submit" class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect" name="sub"> 
 
       </div> 
 
      </form> 
 
      </div> 
 
     </div> 
 
     </main> 
 
    </div> 
 
    <?php 
 
     session_start(); 
 
     \t // this will trigger when submit button click 
 
     \t if(isset($_POST['sub'])){ 
 
     
 
     \t \t $db = new mysqli("localhost","user","password","db"); 
 
     
 
     \t \t // create query 
 
     \t \t $query = "SELECT * FROM users WHERE user='".$_POST['uname']."' AND password='".sha1($_POST['pass'])."'"; 
 
     
 
     \t \t // execute query 
 
     \t \t $sql = $db->query($query); 
 
     \t \t // num_rows will count the affected rows base on your sql query. so $n will return a number base on your query 
 
     \t \t $n = $sql->num_rows; 
 
     
 
     \t \t // if $n is > 0 it mean their is an existing record that match base on your query above 
 
     \t \t if($n > 0){ 
 
           $_SESSION['username'] = $_POST['uname']; 
 
           $_SESSION['password'] = $_POST['pass']; 
 
           $_SESSION['userobj'] = mysql_fetch_assoc($query); 
 
    \t \t \t header("Location: index.php"); 
 
\t \t \t exit(); 
 
     \t \t } else { 
 
     
 
     \t \t \t echo "Incorrect username or password"; 
 
     \t \t } 
 
     \t } 
 
     ?> 
 
    </body> 
 
</html>

Je sais que le code est en cours d'exécution, comme chaque _SESSION $ var devient valeur, pourquoi l'en-tête ne fonctionne pas?

Le fichier que j'essaie de rediriger se trouve dans le même dossier.

EDIT: Ne pas exécuter l'exemple, car il a PHP

+4

Essayez 'header ("Location: index.php");' Notez l'espace entre le chemin ** ** et **: ** – Dash

+0

Avez-vous des résultats avant d'appeler 'header'? – user2890234

+0

si vous produisez quelque chose avant l'en-tête cela ne fonctionnera pas – Icewine

Répondre

1

Comme Icewine a indiqué correctement, les en-têtes doivent être réglés avant toute création. Déplacez donc votre code qui positionne l'en-tête au début de votre script, ou capturez toutes les sorties avec la mise en tampon de sortie, en appelant ob_start() au début de votre script.

De même, il est de coutume de ne pas envoyer de contenu lors de la redirection avec un en-tête Location, une autre raison de déplacer votre logique pour la redirection au début de votre script, puis d'appeler le exit().

+0

Merci! Je ne savais pas que je ne pouvais pas sortir avant de changer l'en-tête. En fait, j'ai ce même code dans un hébergement, et cela fonctionne. C'est étrange –

1

S'il vous plaît essayer avec la fonction ob_start() avant et en-tête Lieu

ob_start(); 
header("Location:http://corocloud.com/index.php/"); 
exit; 

J'espère que cela vous aidera! vous s'il vous plaît fournir l'erreur que vous obtenez là-bas.

+0

merci pour la réponse, mais en ajoutant ob_start(); et sortie; n'a pas fonctionné. À quelle erreur faites-vous référence? Je ne pense pas que j'obtiens une erreur –

+0

Avez-vous activé le rapport d'erreurs? – RobFos

+0

quelle sortie obtenez-vous après l'exécution de votre code? –

2

Vous ne pouvez pas générer de données et ensuite effectuer une opération "en-tête" dans PHP. Donc, modifiez votre code pour d'abord faire tout le truc de php et après le html de sortie. Vous ne devez avoir AUCUNE sortie (html, warnings, etc.) avant cette ligne "header". voir: http://php.net/manual/en/function.header.php

+0

Totalement vous battre de 23 secondes. – Vbudo

2

Ajoutez ce code en haut de votre code // avant le code html

ob_start(); 
session_start(); 
    // this will trigger when submit button click 
    if(isset($_POST['sub'])){ 

     $db = new mysqli("localhost","user","password","db"); 

     // create query 
     $query = "SELECT * FROM users WHERE user='".$_POST['uname']."' AND password='".sha1($_POST['pass'])."'"; 

     // execute query 
     $sql = $db->query($query); 
     // num_rows will count the affected rows base on your sql query. so $n will return a number base on your query 
     $n = $sql->num_rows; 

     // if $n is > 0 it mean their is an existing record that match base on your query above 
     if($n > 0){ 
         $_SESSION['username'] = $_POST['uname']; 
         $_SESSION['password'] = $_POST['pass']; 
         $_SESSION['userobj'] = mysql_fetch_assoc($query); 
     header("Location: index.php"); 
     exit(); 
     } else { 

      echo "Incorrect username or password"; 
     } 
    } 

// Put here html code // 
0

Une meilleure façon est toujours essayer de suivre quelques notions de base de php.

<?php 
ob_start(); 
session_start(); 

sortie après tête

header("Location:demo.php"); 
exit;