Redirection sous condition

Résolu
AAAL Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
Bilow Messages postés 1014 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   117
 
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   Statut Contributeur Dernière intervention   340
 
<?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   Statut Membre Dernière intervention   117
 
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   Statut Contributeur Dernière intervention   340
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   117
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   340
 
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   Statut Membre Dernière intervention   117
 
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   Statut Contributeur Dernière intervention   340
 
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   Statut Membre Dernière intervention   117
 
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
AAAL
 
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   Statut Membre Dernière intervention   117
 
De rien ;)
0