8722 sujets

Développement web côté serveur, CMS

Bonjour, trop souvent j'ai une page blanche sur mon serveur distant après appel avec header("Location: ...
Voila ma page


<?php
	session_start();
	//Initialisation des Variables de Session
	include('../Fichiers-Communs-Include/Variables-Session.inc.php') ;
	//connection au serveur:
	include('../Fichiers-Communs-Include/connexionPCRphotos.inc.php') ;
	//Lecture des Parametres
	include('../Fichiers-Communs-Include/Lecture-Parametres.inc.php') ;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" class="html-image-fond">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="noindex, nofollow"/>
<title>Mot de Passe</title>
<link href="../CSS-PCR/CSS-Communs.css" rel="stylesheet" type="text/css" />
<style>
#Conteneur-Accueil {
	position: absolute;
	width: 718px;
	height: 250px;
	left: 221px;
	top: 510px;
}
</style>
</head>
<script type="text/javascript"> 
function FocusNom() 
  { 
  document.getElementById('Mot-Passe').focus() 
  } 
</script>
<body onload="FocusNom() ;document.getElementById('Mot-Passe').focus();">
   <div id="Conteneur-Accueil-General-Menus-Lateraux">
      <div id="Conteneur-Global">
         <!-- ================================================== -->
         <!-- ********* Affichage Menu Latéral ***************** -->
         <!-- ================================================== -->
         <div id="Conteneur-Navigation-Generale">
            <?php
#		         $menu_lateral_general = "accueil-general" ;
#					include"../Fichiers-Communs-Include/Menu-Lateral-General.inc.php";
				?>
         </div>
         <!-- ================================================== -->
         <!-- ********* Affichage Logo PCR ********************* -->
         <!-- ================================================== -->
         <div id="Conteneur-Logo" class="centrer-image">
            <img src="../Fichiers-Communs-Include/PCR_logo_512x144.png" />
         </div>
         <!-- ================================================== -->
         <!-- ********* Affichage Mot de Passe ***************** -->
         <!-- ================================================== -->
         <div id="Conteneur-Mot-Passe">
            <form action="../Mot-Passe/Login-Accueil.php" method="POST"  >
               <table width="300" border="1" cellpadding="3" align="center">
                  <tr>
                     <td colspan="2" bgcolor="#CCCCCC"><center>
                           <font size="+2"><b>Connexions P-C-Rouen</b></font>
                        </center></td>
                  </tr>
                  <tr>
                     <td bgcolor="#99FF99"> Mot de Passe : </td>
                     <td bgcolor="#99FF99"><input id="Mot-Passe" name="Mot-Passe" type="password" size="7" maxlength="7" /></td>
                  </tr>
                  <tr>
                     <td colspan="2" align="center" bgcolor="#CCCCCC">
                        <input type="reset" value="Annuler" onclick="history.go(-1)" />
                        <input type="submit" value="Valider" /></td>
                  </tr>
               </table>
            </form>
         </div>
         <!-- ================================================== -->
         <!-- ********* Affichage Délai Envoi Photo ************ -->
         <!-- ================================================== -->
         <div id="Conteneur-Accueil">
            <p class="Style-Gras Style-36px-Neutre Style-Caracteres-Jaune">
               Bonjour
            </p>
            <p>
               Vous pouvez envoyer, supprimer et modifier vos photos <br />
               Mais avant le : 
               <span class="Style-Caracteres-Rouge Style-22px-Neutre"> 
						<?php echo substr($delai_date_heure, 0, 10) ?> 
               </span>
            </p>
         </div>
      </div>
   </div>
</body>
</html>

et Login-Accueil.php

<?php
	session_start();
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	if (isset($_POST['Mot-Passe']))  // si les variables existent
	{
		$mot_de_passe = $_POST['Mot-Passe'];
		$login = "JLF" ;
	}
	else // les variables n'existent pas encore
	{
		$mot_de_passe = "";
		$login = "";  // on crée des variables $ mot_de_passe et $ login vides
	}
	$password = strtoupper($mot_de_passe) ;
	if ($password == "CHSCO" and $login == "JLF")
	{
		$Rep_Fichier = '../Webmaster/Index-Webmaster.php';
		header("Location:  http://$host$uri/$Rep_Fichier");
 
	}elseif ($password == "020476" and $login == "JLF")
	{
		$Rep_Fichier = '../Accueil-General/Index-Accueil-General.php';
		header("Location:  http://$host$uri/$Rep_Fichier");
 
	}
	else
	{
		$_SESSION['message'] = "Mot de passe erroné" ;
		$Rep_Fichier = '../Pages-Erreurs/Page-Erreur-Accueil.php';
		header("Location:  http://$host$uri/$Rep_Fichier");
 
	}
?>

Mot de passe "020476"
Merci de m'éclairer
Modifié par _laurent (04 Feb 2020 - 21:50)
Modérateur
Bonjour,

Je n'y ai pas regardé en détail - rien ne saute aux yeux - sauf qu'il vous faut savoir que l'instruction header n'empêche pas la lecture et l'exécution du code en aval. C'est pourquoi il est recommandé de la faire suivre par un exit qui stoppera net l'exécution du code.

Ce peut-être une piste.
Modifié par Greg_Lumiere (05 Feb 2020 - 09:09)
Bonjour,

tu le sauras probablement en activant le debug sur ton server.

Tes header("Location: "); doivent se trouver avant quelque envoi de code depuis php (cela peut être même des ligne blanches avant <?php par ex), sans quoi php aura déjà envoyé les entêtes http et tu auras une erreur header already sent.

Aussi comme te l'a dit @Greg_Lumiere cela peut être dangereux ce que tu fais
Bonjour
Merci pour vos réponses, je regarde de plus près et je vais regarder ce que j'ai fait dans une autre partie de mon site et pour laquelle je n'ai pas de soucis
STP bacasable peux-tu me préciser comment activer le debug sur mon server distant ?
Faut-il rentrer dans PHP;ini ??
Merci
Salut

Essaye de mettre ça en début de ton PHP

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


permettant de voir si y'a des erreurs, des warnings, ou autres.
Bonjour et grand merci pour ces 3 lignes
J'avance et j'ai de moins en moins de pages blanches, grâce en grande partie à ces 3 lignes
Encore merci
Voilà le message que j'ai en voulant header('Location: ......
Le code de ma page est la suivante : Modifs-Parametres.php

<?php
session_start();
ini_set('display_errors',1) ;
ini_set('display_startp_errors',1) ;
error_reporting(E_ALL) ;
include('../Fichiers-Communs-Include/connexionPCRphotos.inc.php'); //connection au serveur
$theme_1 = $_POST["theme_1"] ; //récupération des valeurs des champs: //Theme-1 :
$theme_2 = $_POST["theme_2"] ; //Theme-2 :
$delai_date_heure = $_POST["delai_date_heure"] ; //Délai-Date-Heure :
$sql = "UPDATE parametres SET theme_1 = '$theme_1', theme_2 = '$theme_2', delai_date_heure = '$delai_date_heure' ";
$requete = mysqli_query($connexionPCRphotos, $sql) ;
mysqli_close($connexionPCRphotos) ;
header('Location: ../PCR-WebMaster/Index-Webmaster.php'); //Redirection vers une page différente du même dossier
exit;
?>
Elle est appelée par form action Modifs-Parametres.php

<!-- ============================================================ -->
<!-- ======== Index-Parametres.php ============================== -->
<!-- ============================================================ -->
<?php
//connection au serveur
include('../Fichiers-Communs-Include/connexionPCRphotos.inc.php');
//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
//requête SQL:
$sql = "SELECT * FROM parametres " ;
//exécution de la requête:
$requete = mysqli_query( $connexionPCRphotos, $sql ) ;
//affichage des données:
$result = mysqli_fetch_object( $requete ) ;
?>

<!-- ============================================================ -->
<!-- ======== Lister-Photos-Theme.php =========================== -->
<!-- ============================================================ -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Modification des Paramètres</title>
<link href="../PCR-CSS/CSS-Communs.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="Conteneur-Accueil-General-Menus-Lateraux">
<div id="Conteneur-Global">
<!-- =============================================== -->
<!-- ********* Affichage Menu Latéral ************** -->
<!-- =============================================== -->
<div id="Conteneur-Navigation-Generale">
<?php
$menu_lateral_webmaster = "parametres" ;
include"../Fichiers-Communs-Include/PCR-Menu-Lateral-Webmaster.inc.php";
?>
</div>
<div id="Conteneur-Listes">
<form name="insertion" action="Modifs-Parametres.php" method="POST">
<!-- <input type="hidden" name="id" value="<?php echo($id) ;?>"> -->
<table border="0" align="center" cellspacing="2" cellpadding="2">
<tr align="center">
<td>Thème (1)</td>
<td><input type="text" name="theme_1" value="<?php echo($result->theme_1) ;?>"></td>
</tr>
<tr align="center">
<td>Thème (2)</td>
<td><input type="text" name="theme_2" value="<?php echo($result->theme_2) ;?>"></td>
</tr>
<tr align="center">
<td>Délai Envoi des Photos</td>
<td><input type="text" name="delai_date_heure" value="<?php echo($result->delai_date_heure) ;?>" placeholder="AAAA-MM-JJ"></td>
<!-- <td><input type="text" name="delai_date_heure" value="<?php echo($result->delai_date_heure) ;?>" placeholder="AAAA-MM-JJ" minlength = "10" maxlength = "10"></td> -->
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="modifier"></td>
</tr>
</table>
</form>
</div>
</div>
</div>
</body>
</html>

Je ne vois vraiment pas pourquoi ce header ne fonctionne pas alors qu'en local cela est parfait
Merci d'avance
Bonjour
Je viens de tester ma page "Modifs-Parametres.php" en mettant le "header" et le "exit" juste avant le "include" et l'affichage de la page demandée par le header se fait correctement
Cela correspond donc aux recommandations de "PHP" à ne pas mettre de commandes avant tout "header('Location: ... "
Je vais donc revoir ma copie
Cordialement
Oui il ne faut absolument pas utilisé de fonction de sortie avant le header;exit;

Sinon tu peux tricher en utiliser du Javascript

echo("<script>document.location.href = 'www.monsite.com/lapagequejeveux';</script>");
Meilleure solution
Bonjour Jencal, désolé pour ma réponse
J'ai remplacé tous les header location et cela semble donner satisfaction
Maintenant je vais aller essayer implémenter une barre de progression pour l'upload de photos
Merci