Redirection alternative après l'envoi d'un formulaire
Bonjour,
j'aimerais savoir comment faire pour rediriger mon visiteur vers une page ou une autre apres l'envois d'un formulaire.
J'ai fait une liste déroulante, et les réponses contenue offres 2 possibilité de redirection.
j'ai essayé avec un if{($_POST['choix1']) {header('loaction:Destination1.php');}
else {header('loaction:Destination2.php');}
Tout ceci mis avant le prepare et execute de ma requête préparé.
Mais rien ne marche....?!
Réponses apportées à cette discussion
Bonsoir,
Qu'est-ce qui ne fonctionne pas exactement ?
Présenté comme ça, je soupçonne certains essais qui n'ont aucune chance d'aboutir, mais les possibilités sont multiples et me lancer dans les spéculations serait une perte de temps.
Ce qui me semble le plus probable comme interprétation reste cependant que le traitement des données du formulaire se passe dans une de ces deux pages de renvoi : le cas échéant, ça ne peut pas fonctionner puisque les données s'arrêtent sur la page où se trouve la redirection. Et si la requête est sur une de ces deux pages à partir des données postées, il est normal que ça ne fonctionne pas.
Pour que ça fonctionne, il faudrait traiter d'abord les données du formulaire et ensuite seulement rediriger ailleurs pour un affichage alternatif selon le premier choix.
Mais le traitement doit impérativement avoir lieu avant la redirection.
Bonjour Cyrano,
et merci pour ta réponse.
En fait, tt a l'heure je n'étais pas chez moi. Je n'avais pas mon code sous la main.
Donc le voici pour le moment(réduit au minimum)
J'ai essayé de cette maniére, et en mettant aussi ma condition avant la requete, mais rien ne marche. ça n'insert rien dans la table, et la redirection ne se fait pas...!
$choix = ($_POST['choix']);
if(!empty($_POST['choix']))
{
{
$insertcat = $bdd->prepare("INSERT INTO categorie(choix) VALUES(?)");
$insertcat->execute(array($choix));
if(isset($_POST['choix_1'], $_POST['choix_2'], $_POST['choix_3'])) { header('location:Destination1.php') ;}
else(isset($_POST['choix_4'], $_POST['choix_5'], $_POST['choix_6'])) { header('location:Destination2.php') ;}
//c'est sur ce if que ça bloque
//j'ai essayé en mettant ce if juste avant la préparation de la requete, ça ne change absolument rien. Pas d'erreur ou d'améliorations
}
}
else
{
$erreur = "Veuillez renseigner le champ !";
}
Alors il faut vérifier s'il y a des erreurs lors de l'exécution de la requête.
Il serait utile de jeter un coup d'oeil dans la documentation.
Re mercie pour ta réponse Cyrano,
Je n'ai aucunes erreur qui s'affiche lors de l execution.
Voici mon code complet concernant cette partie
<?php
session_start();
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$choix = ($_POST['choix']);
if(!empty($_POST['choix']))
{
{
$insertcat = $bdd->prepare("INSERT INTO categorie(choix) VALUES(?)");
$insertcat->execute(array($choix));
if(isset($_POST['choix_1'], $_POST['choix_2'], $_POST['choix_3'])) { header('location:Destination1.php') ;}
else(isset($_POST['choix_4'], $_POST['choix_5'], $_POST['choix_6'])) { header('location:Destination2.php') ;}
//c'est sur ce if que ça bloque
//j'ai essayé en mettant ce if juste avant la préparation de la requete, ça ne change absolument rien. Pas d'erreur ou d'améliorations
}
}
else
{
$erreur = "Veuillez renseigner le champ !";
}
?>
Ok, il reste à ajouter une ligne après l'insertion pour récupérer les erreurs s'il y en a...
Haa...?
Désolé Cyrano, je débute en PHP, serait ce celle de la documentation ?
<?php
/* Provoke an error -- bogus SQL syntax */
$stmt = $dbh->prepare('bogus sql');
if (!$stmt) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
?>
Est-ce que ça ne semble pas logique ?
Ne jamais oublier que la programmation, que ce soit en PHP u dans n'importe quel langage, la première règle est, a toujours été et restera toujours la logique.
La documentation montre des exemples d'utilisation. Bien entendu, les lignes de codes montrées ne correspondent jamais à son propre code, mais il y a généralement suffisamment de similarités pour qu'on puisse définir comment adapter les éléments montrés à son propre code.
Ici, on a un objet $insertcat : dans la doc, c'est l'objet $stmt : des noms différents, mais c'est la même chose. Ce objet dispose de méthodes incluant la méthode errorInfo()
Allez, il y a plus qu'à ;)