Problèmes headers() une fois en ligne

Eléphanteau du PHP | 16 Messages

16 déc. 2008, 17:10

Bonjour,

Je suis nouveau sur le forum, je suis web designer donc le php n'est pas vraiment ma spécialité...

J'ai créer un site ou via une interface admin, on peut gérer des news et une galerie.
Tout fonctionne très bien en local mais une fois en ligne, mes headers ne veulent plus rediriger !!!

Il sont dans des fonctions et celles-ci marchent correctement à part la redirection finale.
Les seuls headers qui vont, sont ceux de mon fichier mail().

Voici le code d'un défectueux :
<?php
	
	if(isset($_POST["titre"])){
		if(!empty($_POST["titre"]))
			$titre = $_POST["titre"];/* récupere les valeur ds le formulaire*/
		else
		$titre = "";
	}
	if(isset($_POST["texte"])){
		if(!empty($_POST["texte"]))
			$texte = $_POST["texte"];
		else
		$texte = "";
	}
	
	$datemaj = strftime("%Y-%m-%d");
	
	$reqinsert = 'INSERT INTO news (news_id, titre, texte, dateP) VALUE (\'\',\''.$titre.'\',\''.$texte.'\',\''.$datemaj.'\')';
	
	if(!empty($_POST["titre"]) AND !empty($_POST["texte"])){
		mysql_query($reqinsert)or die(mysql_error());
		header("Location: ./news.php");
	}
	
?>
Et celui d'un qui va :

if(!empty($nom)&&!empty($prenom)&&!empty($tel)&&!empty($email)&&!empty($message)){
		if(mail($mailto, $objet, $content, $headers))
		{
			header("Location: ./formulaire_send.php");
		}
	}else  header("Location: ./formulaire.php?alert=1");
J'ai cherché et essayé beaucoup de chose mais rien en fonctionne...
Mes headers sont bien avant n'importe quel ligne de html ou caractères.

Si quelqu'un avait une piste pour moi

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

16 déc. 2008, 17:22

fait ça après la requête sql dans le code défectueux et dis moi ce que tu vois:
$reqinsert = 'INSERT INTO news (news_id, titre, texte, dateP) VALUE (\'\',\''.$titre.'\',\''.$texte.'\',\''.$datemaj.'\')';

echo $reqinsert;
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 16 Messages

16 déc. 2008, 17:26

Une ligne de code vient se mettre dans le haut de ma page.

Ici :

Code : Tout sélectionner

INSERT INTO news (news_id, titre, texte, dateP) VALUE ('','En ligne','azer','2008-12-16')
Mon entrée est correctement ajoutée à ma base de donnée et quand je vais sur ma page qui affiche mes news, elle y est.
Mais le headers à la fin de mon code devrait m'y renvoyer.

Pour plus de détails, voulez vous voir le code de la page en entiez??

ViPHP
AB
ViPHP | 5818 Messages

16 déc. 2008, 17:44

A la suite des header prend l'habitude d'écrire exit.
header("Location: ../formulaire_send.php");exit;

Eléphanteau du PHP | 16 Messages

16 déc. 2008, 17:56

J'ai rajouté le exit mais ça ne change rien...

J'ajoute le code de ma page, si celle si y etait pour quelque chose.

Code : Tout sélectionner

<?php require("../data.php"); //session_start(); ?> <?php if(isset($_POST["titre"])){ if(!empty($_POST["titre"])) $titre = $_POST["titre"];/* récupere les valeur ds le formulaire*/ else $titre = ""; } if(isset($_POST["texte"])){ if(!empty($_POST["texte"])) $texte = $_POST["texte"]; else $texte = ""; } $datemaj = strftime("%Y-%m-%d"); $reqinsert = 'INSERT INTO news (news_id, titre, texte, dateP) VALUE (\'\',\''.$titre.'\',\''.$texte.'\',\''.$datemaj.'\')'; //echo $reqinsert; if(!empty($_POST["titre"]) AND !empty($_POST["texte"])){ mysql_query($reqinsert)or die(mysql_error()); header('Location: ./news.php'); exit; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="Description" content="Vital Gym" /> <meta name="category" content="Sport"/> <meta name="Keywords" content="" /> <meta name="author" lang="fr" content="Alphamédia"/> <meta name="author" content="Alphamédia"/> <meta name="copyright" content="Alphamédia"/> <meta name="date-creation-yyyymmdd" content="20081118"/> <meta name="date-revision-yyyymmdd" content="20081118"/> <meta name="Expires" content="never"/> <meta name="revisit-after" content="7 days"/> <meta name="robots" content="index,follow" /> <meta name="GOOGLEBOT" content="NOODP"/> <!--<link rel="shortcut icon" type="image/png" href="../images/misc/favicons.png" />--> <title>Vital Fitness & Wellness - News</title> <link href="../css/vital.css" rel="stylesheet" type="text/css" media="screen" /> <!--[if IE]> <link rel="stylesheet" media="screen" type="text/css" title="feuille de style pour IE" href="../css/vital_ie.css" /> <![endif]--> <script type="text/javascript" src="../js/jquery-1.2.6.min.js"></script> <script type="text/javascript" src="../js/shadowbox-jquery.js"></script> <script type="text/javascript" src="../js/shadowbox.js"></script> <script type="text/javascript" src="../js/vital.js"></script> <script type="text/javascript"> Shadowbox.loadSkin('classic', './js/shadowbox/skin'); Shadowbox.loadLanguage('fr', './js/shadowbox/lang'); Shadowbox.loadPlayer(['img', 'flv'], './js/shadowbox/player'); $(window).load(function(){ var options = { autoplayMovies: false }; Shadowbox.init(options); }); window.onload = Shadowbox.init; </script> </head> <body> <div id="menu"> <!--[if !IE]> --> <object type="application/x-shockwave-flash" width="670" height="30" data="../flash/menu_doc.swf" > <param name="movie" value="../flash/menu_doc.swf" /> <param name="wmode" value="transparent" /> <param name="flashvars" value="page=gym" /> <!-- <![endif]--> <!--[if IE]> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="670" height="30"> <param name="movie" value="../flash/menu_doc.swf"/> <param name="quality" value="high"/> <param name="wmode" value="transparent" /> <param name="flashvars" value="page=gym" /> <embed src="../flash/menu_doc.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="670" height="30"></embed> <!--><!--dgx--> <param name="loop" value="true" /> <param name="menu" value="false" /> </object> <!-- <![endif]--> </div> <div id="header"> <div id="ban_flash"> <!--[if !IE]> --> <object type="application/x-shockwave-flash" width="998" height="225" data="../flash/banniere.swf" id="ban"> <param name="movie" value="../flash/banniere.swf" /> <param name="wmode" value="transparent" /> <!-- <![endif]--> <!--[if IE]> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="998" height="225"> <param name="movie" value="../flash/banniere.swf"/> <param name="quality" value="high"/> <embed src="../flash/menu.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="998" height="225"></embed> <!--><!--dgx--> <param name="loop" value="true" /> <param name="menu" value="false" /> </object> <!-- <![endif]--> </div> </div> <div id="main"> <div id="sub_menu"> <div id="sub_gauche"> </div> <div id="sub_droite"> </div> <ul> <li><a href="./news.php" title="News">News</a> </li> <li><a href="./agenda.php" title="Agenda">Agenda</a> </li> <li><a href="./horaires.php" title="Horaires">Horaires</a> </li> <li><a href="../galerie/events.php" title="Events">Events</a> </li> </ul> </div> <div id="content"> <div id="galerie"> <ul class="sub_admin"> <li><a href="./add_news.php" title="">Créer une news</a></li> <li><a href="./add_agenda.php" title="">Créer un événement pour l'agenda</a></li> <li><a href="./add_horaires.php" title="">Ajouter une entrée à l'horaire</a></li> <li><a href="./add_album.php" title="">Créer un album photo</a></li> <li><a href="../galerie/add_photo.php" title="">Ajouter une photo</a></li> </ul> </div> <div id="txt"> <h1> Ajouter une nouvelle <span class="cyan">.</span><span class="orange">.</span><span class="gris">.</span> </h1> <form action="add_news.php" method="post" name="add_news"> <p> <label for="titre"> Titre : <span class="orange">*</span></label> <input name="titre" id="titre" type="text" size="30" maxlength="60" /> </p> <p> <label for="texte"> Texte : <span class="orange">*</span></label> <textarea name="texte" id="texte" cols="35" rows="8" ></textarea> </p> <!--<p> <label for="img"> Image : <span class="orange">*</span></label> <input name="img" id="img" type="text" size="20" maxlength="20" /> </p>--> <p class="send"> <input name="send" type="submit" value="Envoyer"/> <input name="reset" type="reset" value="Rétablir"/> </p> </form> <p> Les champs suivis d'une <span class="orange">*</span> sont obligatiores. </p> </div> </div> <div id="foot"> </div> </div> </body> </html>
Se que je ne comprends pas, c'est qu'ils fonctionnent en local mais plus en ligne !!! :x :x :x

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

16 déc. 2008, 18:04

Et si tu mettais l'url http complète dans le header() ça donnerait quoi? Vérifie, pour qu'on puisse bien situer le problème, car moi je soupçonne un problème de chemin d'accès.

Exemple:
header("Location: http://www.tonsite/news.php"); 
exit(); // cette ligne est très recommandée
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 16 Messages

16 déc. 2008, 18:28

Toujours la même chose!

Avec le exit; il reste sur une page blanche qui est en faite la page ou est mon script.
Et sans le exit; il revient sur la page de formulaire.

Je commence à être désespéré :cry:

Est-ce qu'il y a une erreur qui peut arriver quand on passe du travail en local à celui en ligne?
Ou est-ce que cela peut venir du serveur?

Eléphant du PHP | 453 Messages

16 déc. 2008, 22:35

Salut,

Est ce que par hasard tu n'as pas une ligne blanche avant « <?php »?

++

Eléphanteau du PHP | 16 Messages

17 déc. 2008, 10:15

Bonjour,

De retour au travail avec ce maudit problème...
Je n'ai pas de ligne blanche ni de ligne qui se crée une fois la page chargée.

Edit : Je vient de remarqué en regardant mon code source de ma page que j'ai quelques espaces qui se créent dans les pages où j'ai du php.
Même dans celle ou il n'y a pas de headers().

Et je ne comprends pas pourquoi j'ai ces espaces...

Édit 2 : je dois devenir fou parce que je n'avais pas remarqué l'option dans le web developper "code source généré", j'avais afficher le code source seul...
Avec le code source généré, je n'ai plus d'espace avant ma balise html.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

17 déc. 2008, 11:56

Bonjour,

Pour la question des espaces et affichages avant header(), il faut vérifier pour ça aussi tous les fichiers qui sont inclus par un include() ou require(). Et c'est vrai dans ton cas, puisque ton script commence par un require(), tu dois vérifier le fichier inclus:

Rappel de ton script :
<?php
require("../data.php");
//session_start();
?>
<?php
   
   if(isset($_POST["titre"])){
      if(!empty($_POST["titre"]))
         $titre = $_POST["titre"];/* récupere les valeur ds le formulaire*/
      else 
....
Autre remarque: Evite de couper les blocs de PHP en plusieurs morceaux si ce n'est pas nécessaire d'insérer du code HTML entre ces blocs.

Cette remarque est vrai pour le script ci-dessus. Il faut alors fusionner les 2 blocs php comme ça:
<?php
require("../data.php");
//session_start();
   
   if(isset($_POST["titre"])){
      if(!empty($_POST["titre"]))
         $titre = $_POST["titre"];/* récupere les valeur ds le formulaire*/
      else 
....
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 16 Messages

17 déc. 2008, 14:04

Je ne savais pas pour les include() et require() mais qu'est ce que je dois vérifier dedans?

Si il y a des echo() ou uprint()? Ou autre chose?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

17 déc. 2008, 14:36

OUi, tous ce qui peut afficher quelque chose, même un espace ou du code html. Mais généralement quand on commet ce genre d'erreur (afficher quelque chose avant header()) un message d'avertissement s'affiche en disant que le "Header is already sent" ce qui n'est pas le cas pour toi à moins que les erreurs soient désactivées sur le serveur de ton hébergeur.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 16 Messages

17 déc. 2008, 14:46

Voici ma page pour tester ma partie admin.

Je ne sais pas si je peux mais ça ne devrais pas posé de problème vu que c'est encore en développement et que je n'ai pas encore mit la page de login...

Lien

Attention, j'ai mit un phpinfo() au début de cette page pour voir les détails du serveur (même si je pige rien).
Si vous voulez que je l'enlève, dites-le.
Modifié en dernier par minik le 17 déc. 2008, 15:35, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

17 déc. 2008, 15:21

Tu peux enlever ton lien.

D'après phpinfo(), le paramétrage de php indique que les erreurs sont désactivées:
display_errors Off Off

Donc, une fois en ligne, si ton script commet des erreurs le serveur ne t'envoie pas de messages d'erreurs.

Pour forcer les serveur à t'envoyer les erreurs, tu dois donc ajouter l'instruction suivante au début du script :
ini_set ("error_reporting", E_ALL);
Cette directive ini_set() activera les erreurs pour le temps d'exécution de ton script seulement et n'agira pas sur la configuration du serveur.

C'est comme ça qu'on fait pour déboguer un programme en ligne. Car les serveurs en ligne évitent d'activer les erreurs en mode production pour ne pas gêner les utilisateurs.

Donc, fais ça et ré-exécute ton script pour voir l'erreur.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 16 Messages

17 déc. 2008, 15:49

J'ai ajouté l'instruction en début de script et cela ne me pointe aucune erreurs.
Apparemment, il y aurai des espaces mais je ne sais pas d'où il viennent !

J'ai ajouté ça en début de fichier juste avant le require().