Redirection apres envoi formulaire

Résolu/Fermé
louseb84 - 17 août 2010 à 19:26
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 - 18 août 2010 à 18:37
Bonjour a toutes et tous,

je veiens de boucler le codage de mon livre d'or ou j'utilise la fonction header pour rediriger l'internaute vers la page de diffusion afin qu'il puisse voir son message et etre sur qu'il soit bien enregistre.


voici le code erreur

Warning: Cannot modify header information - headers already sent by (output started at /homez.170/lousebph/www/livre_d_or_formulaire.php:5) in /homez.170/lousebph/www/livre_d_or_formulaire.php on line 77

et le code php utiliser sur ma page.

<?php
// Si les variables existent
if (isset($_POST['pseudo']) AND isset($_POST['mail']) AND isset($_POST['localisation']) AND isset($_POST['site_internet']) AND isset($_POST['votre_message']))
{

//condition qui vérifie si les champ sont remplient et si ils ne le sont pas, sa ouvre une petite popup sans recharger la page
if ($_POST['pseudo'] == '')
{
echo "<script language='JavaScript'>alert('merci de bien vouloir renseigner le champ pseudo');history.back();</script>";

exit();
}

elseif ($_POST['localisation'] == '')
{
echo "<script language='JavaScript'>alert('merci de bien vouloir renseigner le champ ville, région.');history.back();</script>";
exit();
}

elseif ($_POST['votre_message'] == '')
{
echo "<script language='JavaScript'>alert('merci de bien vouloir renseigner le champ message.');history.back();</script>";
exit();
}

// D'abord, on se connecte à MySQL
mysql_connect("", "", "");
mysql_select_db("")or die (mysql_error());

// une requête pour enregistré l'heure et la date a laquel le message a était poster
$date = date("Y-m-d");
$heure = date("H:i:s");

// On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
$votre_message = mysql_real_escape_string(htmlspecialchars($_POST['votre_message']));
$site_internet = mysql_real_escape_string(htmlspecialchars($_POST['site_internet']));
$localisation = mysql_real_escape_string(htmlspecialchars($_POST['localisation']));
$mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));

// Ensuite on enregistre le message
mysql_query("INSERT INTO livre_d_or VALUES('', '" . $pseudo . "', '" . $mail . "', '" . $localisation . "', '" . $site_internet . "', '" . $votre_message . "', '" . $date . "', '" . $heure . "') ") or die (mysql_error());

// On se déconnecte de MySQL
mysql_close();

//redirection vers la page livre_or_diffusion
header('Location: livre_d_or_diffusion.php');

}


merci a toute personne qui s'aurrait me dire ou est l'erreur dans mon script, sa fait deux heures que je cherche sans trouver.....!!!

5 réponses

ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
Modifié par ghuysmans99 le 17/08/2010 à 19:40
D'abord, une ligne que tu peux optimiser :
mysql_query("INSERT INTO livre_d_or VALUES('', '$pseudo', '$mail', '$localisation', '$site_internet', '$votre_message', '$date', '$heure'); ") or die (mysql_error()); 

Le message d'erreur dit que tu as déjà affiché quelque chose avant l'appel de la fonction header(). 'Commentarise' cette ligne et regarde ce qui est affiché ...
Google is your best friend
VB.NET is good ... VB6 is better !
0
oups oui c'etait apres que mon script me renvoi une erreur sur cette ligne que j'ai rajouter les " . ." comme c'est sur le site du zero pour voir si sa venait de la....


qu'entend tu par commentarise cette ligne?

au chargement de ma page seul mon formulaire en html s'affiche et l'erreur d'eja afficher....

merci de te pencher sur mon cas c cool
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
17 août 2010 à 21:17
commentariser, c'est mettre // devant une ligne pour qu'elle ne soit pas exécutée.
Justement tu ne dois afficher ton formulaire que si l'utilisateur n'a rien envoyé ...
0
oui je suis bien bete mais le probleme n'est pas que mon formulaire ou que ma page qui affiche les commentaire ne marche pas mais que lorsque j'envoie le formulaire je revient sur ma page formulaire et qu'a ce moment la j'ai le message d'erreur qui s'affiche.

en surfant sa et la je viens de lire que la fonction header doit etre placer avant tous code html pour ne pas quel m'affiche le code erreur headers already sent by.... il me semble pourtant que c'est le cas dans ma page le code php etant positioner juste apres le </head> et avant le <body>......

apparament il est possible de faire une redirection par meta tag dans le <head> mais je n'ai trouver qu'une qui s'execute apres 10 secondes sur la page....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bon histoire de faire avancer le shmilbik je vais repondre a tous les gens qui font la meme betise que moi et on est nombreux au vu de tous les poste que j'ai pu lire sur l'erreur headers already sent by.....!!!!!


QUAND ON DIT QUE LE HEADER DOIT ETRE PLACER AVANT TOUT HTML C"EST VRAIMENT TOUT......!!!!!

le placer avant la balise <html> et ne laisser aucun espace sur la page de code avant le <?php.........
bref pour faire simple comme je viens d'apprendre que le php peut etre placer n'importe ou sur la page il est preferable de prendre l'habitude de le mettre sur la premiere ligne de script de sa page et sans espace avant le <?php
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
18 août 2010 à 08:59
Il a compris ... enfin ! Et en cadeau, ta page (t'as qu'à ajouter le contenu du form) :
<?php
function DisplayForm()
{
?>
<form method="post" action="?Action=go">
[...]
</form>
<?php
}

function DisplayAlert($s)
{
?><script type="text/javascript">
alert('<?php echo(addslashes($s));?>');
history.back();
</script><?php
}

if (isset($_GET['Action'])) // Formulaire envoyé ? Si oui, on récupère les données
{
	$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
	$localisation = mysql_real_escape_string(htmlspecialchars($_POST['localisation']));
	$votre_message = mysql_real_escape_string(htmlspecialchars($_POST['votre_message']));
	$site_internet = mysql_real_escape_string(htmlspecialchars($_POST['site_internet']));
	$mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
	
	if ($pseudo=='') $err = 'pseudo';
	if ($localisation=='') $err = 'ville, région';
	if ($votre_message=='') $err = 'message';
	
	if ($err)
	{
		DisplayAlert("Merci de bien vouloir renseigner le champ $err.");
		exit();
	}
	
	// D'abord, on se connecte à MySQL
	mysql_connect('', '', '');
	mysql_select_db('') or die (mysql_error());

	// On met la date et l'heure dans des variables
	$date = date('Y-m-d'); $heure = date('H:i:s');

	// Ensuite on enregistre le message
	mysql_query("INSERT INTO livre_d_or VALUES('', '$pseudo', '$mail', '$localisation', '$site_internet', '$votre_message', '$date', '$heure');") or die (mysql_error()); 

	// On se déconnecte de MySQL
	mysql_close(); 
	
	// On redirige l'utilisateur
	header('Status: 301 Moved Permanently');
	header('Location: livre_d_or_diffusion.php');
}
else DisplayForm();
0
salut ghuysmans99...!!!!!

ET OUI IL A ENFIN COMPRIS apres seulement une centaine d'heure d'apprentissage HTML, PHP et CSS...... rires......

la fonction header status j'ai lu quel servait uniquement au navigateur pour le referencement.... c'est sa??

pour le reste,je pige vraiment pas grand chose au javascript mais de ce que j'en ai compris tu me fait remplacer mes condition qui verifie si mes variable existe en PHP par du javascript.....

histoire que je copie pas un script betement (j'aime pas sa et je risque pas d'apprendre comme ca) tu peut m'expliquer quel est l'interet d'afficher les messages d'erreur en java plutot qu'en PHP???

mon site en pleine construction mais si sa te dis d'aller y faire un tour et de me dire ce que tu en pense dans l'ensemble.......
le diaporama n'est pas de moi bien evidament et quelques lien ne sont pas encore actif mais un systeme de news est bientot boucler. il me reste a mettre des miniatures a la place du sous-menu un peu comme j'ai fait sur la page du livre d'or egalement.....!!!!

louseb-photographie.com
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
18 août 2010 à 18:37
1) Oui
2) Non : le seul truc en JS sur ta page est le contenu de la fonction DisplayAlert(). J'aurais pu y mettre un echo() avec un paramètre kilométrique dedans mais je trouvais plus clair de mettre ?> et <?php .
3) On ne peut pas afficher de boites de dialogue en pur PHP : ce langage s'exécute du côté serveur. Ce sont JS, Flash et Java (mais y'en a d'autres, je t'ai cités les principaux) qui s'exécutent côté client.
4) Ca donne pas mal, mais ne mets pas tes éléments de menu en noir lorsqu'on passe dessus ...
0