Problème avec redirection de page

Monsieur Fernand
Invité n'ayant pas de compte PHPfrance

07 sept. 2012, 15:42

Bonjour à tous,

je rencontre un petit problème que je ne m'explique pas... J'ai créer un formulaire (nommé form1), par lequel je renseigne plusieurs zones :
La date (automatique), le nom de l'auteur (automatique), le titre de l'article, et le corps de l'article.
Ensuite, deux boutons : Un pour envoyer et un pour annuler.
A l'aide du code ci-dessous, lorsque je clique sur Envoyer, je souhaite revenir sur ma page d'accueil après avoir inscrit les données dans ma base Sql.

Code :
.../...
<form name="form2" method="post"><input type="submit" name="envoi" value="Envoyer" /></form>
.../...
<?php
if (isset($_POST['envoi']))
{
$todayinfo = date('y-m-d');
$auteurinfo = htmlspecialchars($_SESSION['user']);
$titreinfo = htmlspecialchars($_POST['titre']);
$info = nl2br(htmlspecialchars($_POST['corpsinfo']));
mysql_query("INSERT INTO articles VALUES('', '" . $auteurinfo . "', '" . $todayinfo . "', '" . $titreinfo . "', '" . $info . "', '')");
mysql_close();
header("location:gestbaseinfo.php");
}
?>
.../...


En local, sur mon PC, avec WampServer 2.1, la redirection après l'action fonctionne parfaitement...
En revanche, dès que j'upload mon fichier sur mon serveur, plus de redirection, je reste sur mon fichier...
Quelqu'un aurait-il une idée sur l'origine de ce problème ?
Je suis complètement autodidacte, alors peut-être n'est-ce qu'un problème de configuration de Php sur mon serveur ?
Je vous remercie de votre aide à venir...
Cordialement

ViPHP
ViPHP | 2577 Messages

07 sept. 2012, 15:55

La redirection n'est possible que si aucune donnée n'a été envoyée au navigateur au préalable.

On voit que tu envies <form...> avant le header, donc erreur.

1) Tu ne voies pas de message d'erreur à cause du paramétrage de PHP (normal en production). Si tu ajoutais une ligne "error_reporting(E_ALL); en début de script tu verrais un message d'erreur (sauf blocage parametrage de display_errors).

2) Ca marche en locale car php est paramétré pour bufferiser et donc le header passe. Si tu ajoutes ob_start() au début de ta page, ca doit marcher. La solution propre est de mettre les sorties après le header().

Je te conseille de faire une page <?PHP phpinfo(); ?> pour voir le paramétrage et de paramétrer ton serveur local comme le serveur distant pour éviter les surprises.

ViPHP
xTG
ViPHP | 7331 Messages

07 sept. 2012, 15:56

Tu as du contenu envoyé au navigateur avant le header().
Ton installation locale est très permissive et ne bloque pas il semblerait.
Mais une erreur est générée à cause du buffer à envoyer au navigateur qui n'est pas vide (code HTML) et donc le header() s'attendant (et devant !) à être le premier contenu PHP génère une erreur. (disponible dans ton fichier error.log)

Ce fonctionnement est indiqué dans la documentation de la fonction header.

Edit : ah on sent bien qu'on est vendredi, plus personne ne veut bosser et on traîne sur les forums hein ! :twisted:

Monsieur Fernand
Invité n'ayant pas de compte PHPfrance

07 sept. 2012, 16:12

Whaouuu, messieurs, votre diligence n'a d'égale que votre virtuosité...
j'ai effectivement déplacé ma routine php en début de page, upload sur le serveur, et.... heureux !!!
Merci beaucoup à vous deux, je me coucherai ce soir un peu plus aware sur le Php.
Grâce à vous.
Bon weekend

ViPHP
ViPHP | 2577 Messages

07 sept. 2012, 16:14

C'est le pastis et le rhum du vendredi midi... Mais les autres jours, c'est guère mieux.

La, j'ai un pb de soap en asp. J'ai ajouté des tests de code erreur et ca marche depuis... j'essaye de voir ce qui a changé mais je n'ai pas accès à ceux qui font le service. C'est un client, il ne change jamais rien, mais le flux évolue de temps en temps.

Je vais jouer la montre jusqu'à ce soir.

Edit : essaye de paramétrer les 2 serveurs de la même facon.