(1) Je suis en train de télécharger mon site Web sur un serveur Web distant.
(2) Le système de gabarits du site est configuré de manière à ce que toutes les pages soient formées en envoyant des demandes get codées en url à index.php
.
(3) Le chargement de la page initiale fonctionne. Cette page détermine l'emplacement de la page suivante en évaluant la valeur de son formulaire.
(4) La redirection vers la page suivante s’effectue de la manière suivante: header('location: next_page')
(5) Pour une raison quelconque, la redirection n'est pas effectuée. Voici à quoi ressemble le code:
$error = "";
if(isset($_POST['index_choice'])){
$path_choice = isset($_POST['path']) ? $_POST['path'] : NULL;
//echo $path_choice;
//echo $page_inc;
//nothing after this
if($path_choice != null){
if($form->is_connected()){
//if($path_choice != "" || $path_choice != NULL){
if($path_choice == "new"){
//header('location: /login.php');
//header('location: page/login');
header('location: /index.php?page=login');
exit();
}
else{
//header('location: /amend.php');
//header('location: page/amend');
header('location: /index.php?page=amend');
exit();
}
//}
/**
else{
//destroy_session();
$error = "You haven't selected a path. Please choose a path";
}
*
*/
}
else{
//destroy_session();
$error = "Problems with connecting to the database";
}
}else{
//destroy_session();
$error = "You have not indicated your choice";
}
}
RÉSOLU
Il s'agissait simplement de laisser un espace après le ?>
ailleurs dans le code. Cela m’a été révélé après avoir placé les commandes suivantes en haut du code:
error_reporting(E_ALL); ini_set('display_errors', 'On');
J'aimerais remercier toutes les personnes qui ont essayé d'aider.
On dirait que vous renvoyez du texte au navigateur avant d'envoyer l'en-tête ("emplacement"). Vous ne pouvez pas envoyer de contenu à votre navigateur avant d’exécuter un en-tête (), car votre écho forcera l’envoi d’un en-tête. Commentez ces lignes et voyez si cela fonctionne:
// echo $path_choice;
// echo $page_inc;
Maintenant, votre en-tête sera envoyé et vous serez redirigé.
ajoute ce code à premier du code:
<?php
ob_start();
?>
Vous pouvez essayer la méthode javascript pour rediriger la page:
echo '<script>window.location = "'.$url.'";</script>';
Est-ce qu'un script PHP simple comme celui-ci fonctionne?
<?php header('Location: /index.php?page=login'); ?>
Vous devez également vous assurer que le chemin du code avec $path_choice != null
et $form->is_connected() === true
est réellement pris, car vos états d'erreur ne définissent pas du tout les en-têtes HTTP.
Je vois un 'destroy_session ()', utilisez-vous session_start () quelque part? Assurez-vous qu'aucun contenu (y compris les cookies (de session)) n'est déjà envoyé.
Astuces pour le débogage: set error_reporting (E_ALL) (y compris E_NOTICE) . Cela vous donnera la ligne sur laquelle les en-têtes sont envoyés.
Autres sources de problèmes: - BOM - lignes supplémentaires avant dans un fichier inclus
Je crois que vous devez vérifier votre if-stack et vous assurer que vous entrez dans chacune de vos boucles. Placez un écho après chaque instruction if pour vous assurer que l'en-tête () est même en cours d'évaluation, votre boucle sera coupée plus tôt que prévu.
Mon suspect est lié à l'utilisation de null et de $ path_choice! = Null. Avez-vous essayé is_null () ou isset () car ils ont été conçus spécifiquement pour vérifier si une variable est null. De plus, l'opérande! == peut également fonctionner dans ce cas, mais je ne suis pas sûr de rien si PHP dispose de cela.
Assurez-vous qu'avant <?php
du fichier php vous n'avez pas d'espace. Cela pourrait aider si vous changiez le type de codage de fichier en UTS_8 sans nomenclature ni espace arrière juste avant le <?php
et que vous vous assuriez de ne pas avoir session start()
après tout dans le fichier. Il devrait être juste après
Essayez ceci. ça va marcher
echo "<script type='text/javascript'> window.location='index.php'; </script>";
au lieu de header("location: index.php");
Assurez-vous juste avant votre code php que vous n’avez pas d’espace, car c’est important.
Par exemple
<?php
some code this is the correct way
?>
--------------
<?php
some code this is the incorrect way the space above matters
?>
Eh bien, si vous avez tout essayé, cet exemple peut vous aider (HTML/PHP):
<?php
header("HTTP/1.0 404 Not Found");
echo '<html>
<head>
<meta http-equiv="Refresh" content="0;url=http://www.url.com/index.php?code=404" />
</head><body></body>
</html>';
?>
Assurez-vous qu'il ne doit y avoir aucun espace au début de votre code
Par exemple:
------whitespace----
<?php
.
.
.
. ?>
Supprime l'espace de la première ligne, de sorte que <?php
doit figurer sur la première ligne.