Redirection sous condition

Résolu/Fermé
AAAL Messages postés 5 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 21 janvier 2011 - 8 janv. 2011 à 23:52
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 - 16 janv. 2011 à 17:48
Bonjour,
Quelqu'un peut-il m'indiquer pourquoi mon code "header" ne fonctionne pas? Ou bien un autre moyen pour envoyer l'internaute sur une page si la condition est remplie?
En vous remerciant.

<?php
if (!empty($nom) AND !empty($tel) AND !empty($email) AND !empty($date)){
header('Location: merci.php');
echo "Demande envoyée";
} else {
echo "Une erreur s'est produite, merci de bien vouloir renseigner les champs obligatoires"
?>

5 réponses

Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
9 janv. 2011 à 00:05
Salut !

En utilisant header("Location: merci.php"), tu passe le relais à merci.php, et ton script PHP n'aura plus rien à dire.

Dès que tu appelles header() avec "Location", les informations envoyées au client proviendront de merci.php et pas de ta page actuelle. Donc, "demande envoyée" ou "une erreur s'est produite" ne surviendra jamais sur la page (sauf si header() renvoi une erreur).

Pour corriger ce problème, il faudra que tu voies ce que tu veux faire avec merci.php ; Que contient cette page ? Ou plutôt, à quoi sert-elle ? Si c'est pour remercier l'utilisateur, tu n'as simplement pas besoin d'écrire "Demande envoyée". Et si la condition if() renvoi false, alors "une erreur s'est produite" apparaîtra, et le code s'arrête la.

Tu as compris ? ;)
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
9 janv. 2011 à 00:08
<?php
$nom = $_GET['nom']; $tel = $_GET['tel'];
$email = $_GET['email']; _date = $_GET['date'];
if (!empty($nom) && !empty($tel) && !empty($email) && !empty($date))
  header('Location: merci.php');
else
  echo "Une erreur s'est produite, merci de bien vouloir renseigner les champs obligatoires";
?>
0
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
9 janv. 2011 à 00:10
C'est pas mal non plus. Mais un peu de texte serait mieux, tu ne trouves pas ? ;)
0
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 9/01/2011 à 00:15
Pas faux, ça :)

Les champs que tu veux récupérer ne sont pas mis directement dans des variables mais dans un tableau, il faut donc aller les chercher. Là il les prend en GET (on peut les voir dans la barre d'adresse) mais tu n'as qu'à remplacer $_GET par $_POST si tu les veux en POST. Mais il y a un autre problème : tu demandes des données mais tu n'en fais rien ...
0
AAAL Messages postés 5 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 21 janvier 2011
9 janv. 2011 à 01:10
Si j'ai une prmeiere page contenant mon formulaire :

<form method="post" action="envoi.php" name="formulaire">

qui collecte mes données

$nom=$_POST['nom'];
$tel=$_POST['tel'];
$email=$_POST['email'];
$event=$_POST['event'];
...

Puis une page envoi.php qui en vérifie certaines, si elles sont ok je souhaite allez vers la page merci.php (d'où mon header location) sinon j'echo un message d'erreur.

Mon probléme reside dans la redirection
<?php
if (!empty($nom) AND !empty($tel) AND !empty($email) AND !empty($date)){
header('Location: merci.php');
echo "Demande envoyée"; .......

En effet si la redirection fonctionnait je n'aurai pas "Demande..." affichée !
Merci
0
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
9 janv. 2011 à 01:22
Si tu gères la récupération des variables, qui, ici, est inexistante, alors on passe au problème de la redirection.
Lorsque tu éxécutes ton code, tu obtiens "Demande envoyée" ??? Dans ce cas, en toute première ligne de code, rajoute : error_reporting(E_ALL); Cela affichera toutes les erreurs dans les moindres recoins, parce que je soupçconne qu'il y en aie.
A part ca, tu pourrais nous faire un récapitulatif général de ce que tu souhaites faire ? Je n'ai pas trop bien compris le système final que tu souhaites obtenir.
:)
0
AAAL Messages postés 5 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 21 janvier 2011
9 janv. 2011 à 01:13
Dans le code de ghuysmans99, il n'y a pas d'accolade "{" après la condition if, aurai-je mis cela en trop???
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
9 janv. 2011 à 01:17
Je ne les ai pas mises vu qu'il n'y a qu'une ligne dans le bloc conditionnel.
0
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
9 janv. 2011 à 01:19
Ne t'inquiète pas, il vaut toujours mieux mettre des accolades. Dans ce cas, dans le if, il n'y avait qu'une ligne, donc il n'en n'a pas mis et cela fonctionne. Mais à partir du moment où cela porte à confusion ou bien que cela dérange ou bogue...
Bref, je te conseille fortement de mettre des accolades, comme tu l'as appris. Et au final, cela ne change rien dans l'éxécution du script ;)
0

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

Posez votre question
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
9 janv. 2011 à 01:25
Fais tout dans la même page, ça sera plus facile ... Voilà un canevas, tu n'as qu'à ajouter le traitement des données et les champs du formulaire :
<?php
if (isset($_GET['action']))
{
	if (isset($_POST['nom']) && isset($_POST['tel']) && isset($_POST['email']) && isset($_POST['event']))
	{
		//traitement des données (mail, db, etc.)
	}
	else
	{
		?>Une erreur s'est produite, merci de bien vouloir renseigner les champs obligatoires. <a href="?retour">Retour</a><?php
	}
}
else
{
	?><form method="post" action="?action=go">tes champs ici</form><?php
}
?>
0
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
9 janv. 2011 à 11:27
Oui, c'est beaucoup plus simple. Et après "traitement des données", tu mets "Demande envoyée" aisni que les remerciements de merci.php;
0
Merci à vous tous. J'ai effectivement résolu tous ces problèmes en les simplifiant, sans redirection automatique.
Bon dimanche.
0
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
16 janv. 2011 à 17:48
De rien ;)
0