Page 1 sur 1
Question bete sur redirection après formulaire...
Posté : 22 nov. 2007, 09:55
par Yo
Bonjour à toutes et à tous,
J'utilise un formulaire pour enregistrer des informations dans ma BDD... mais une fois mon formulaire valider, je suis rediriger directement vers ma page de formulaire, alors que je voudrai être rediriger vers une autre page.
Dans mon formulaire, l'action est la suivante
<?php echo $_SERVER['PHP_SELF'] ?>
puisque je veux entrer les info dans ma BDD... donc je ne vois pas trop comment faire pour ajouter une action après que l'envoi à la BDD soit réalisée...
Merci d'avance, bonne journée à toutes et à tous
Johan
Posté : 22 nov. 2007, 09:58
par d0m
Soit tu changes le champ ACTION de ton formulaire vers l'autre page et tu insères tes informations dans cette page,
Soit tu vas voir du coté de la fonction
header
Posté : 22 nov. 2007, 14:38
par Yo
J'ai essayé de comprendre la fonction header, mais je ne vois pas trop comment l'utiliser.
Puisque si dans mon entête je mets un code du genre
<?php
header("Location: actualite.php");
exit;
?>
Je ne vois pas comment le fait de valider un formulaire, cela va me renvoyer (en meme temps que les infos du formulaire son envoyé dans
<?php echo $_SERVER['PHP_SELF'] ?>
) vers la page actualite.php.
Je suis désolé mais je suis novice sur cette fonction, merci d'avance pour votre aide.
Cordialement
Posté : 22 nov. 2007, 14:54
par Ryle
Tu pourrais par exemple l'utiliser dans une structure conditionnelle... chose que tu fais probablement déjà pour savoir s'il faut traiter ou pas les données du formulaire
<?php
if (...) { // lorsque le formulaire est envoyé
... // traitement
// redirection en cas de succès
header("Location: actualite.php");
exit();
}
?>
<html>
...
<form ... action="<?php echo $_SERVER['PHP_SELF']; ?>" >
...
</form>
...
</html>
Nota : aucun code ne doit être envoyé au navigateur avant un header() : pas de echo ou de print, pas de code html, d'espace ou de retour à la ligne en dehors des balises <?php ?> ...

Posté : 22 nov. 2007, 15:47
par Yo
euh, je n'ai pas de structure conditionnelle puisque j'ai fais une zone d'administration assez simple, ou il n'y a pas de condition, donc là je suis assez perdu et je ne vois pas trop comment faire... pourrais tu m'aider ? merci d'avance
ps : vraiment très sympatique ce forum d'aide
Posté : 22 nov. 2007, 16:06
par d0m
Ton formulaire après validation redirige vers la page courante.
<FORM ... action="<?php echo $_SERVER['PHP_SELF'] ?>"
Il faut bien que tu traites les données du formulaire, non?
Comment fais tu si tu ne testes pas la condition que ton formulaire a bien été validé
ce qui se traduit la plupart du temps par :
if(isset($_POST['nom_du_bouton_de_validation']))
//ou
if(isset($_GET['nom_du_bouton_de_validation']))
Posté : 22 nov. 2007, 16:07
par Truc
Ce qu'il voulait dire par "structure conditionnelle" est un bloc de code qui n'est exécuté qu'une fois le formulaire validé.
Puisque tu traites les données du formulaire sur la même page (avec $_SERVER['PHP_SELF']) que son affichage tu dois en avoir une
<?php
if (isset($_POST["un_champ_du formulaire"]) { // lorsque le formulaire est envoyé
... // ICI le code qui n'est exécutée qu'une fois le formulaire validé
}
// ici le code du formulaire
Montre nous ce que tu as pour l'instant.
Posté : 22 nov. 2007, 16:18
par Yo
Modification, j'ai oublié d'ajouté cela avant :
if (isset($_POST["action"]))
{
$action=$_POST["action"];
if ($action=="inserer")
{
$idins=$_POST["idins"];
$texteins=$_POST["texte"];
$titreins=$_POST["titre"];
$requete_update ="UPDATE info_actualite
set texte='$texteins', titre = '$titreins'
where id= '$idins'";
$result2 = mysql_query($requete_update) or die ("probleme " .mysql_error());
}
}
alors voilà
$sql = "SELECT id, texte, titre, auteur
FROM info_actualite
WHERE id='$id'";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
$data = mysql_fetch_array($req);
?>
et la suite....
Code : Tout sélectionner
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="action" value="inserer" />
<?
?>
<input type="hidden" name="idins" value="<? echo $id; ?>" />
<?
?> L'auteur :
<?php echo ''.$data[3].''?>
Modification du titre : <input name="titre" type="text" value="<?php echo ''.$data[2].''?>" size="40"/>
<br>
Modification de l'article : <textarea name="texte" cols="75" rows="10" wrap="physical"><?php echo ''.$data[1].'' ?></textarea>
--> ...
<input type="submit" name="Submit" value="Ok" />
</p>
</form>
Posté : 22 nov. 2007, 16:36
par Truc
Donc tu as bien une structure conditionnelle
en fin de traitement de ce bloc tu peux ajouter la redirection vers la page souhaitée
$result2 = mysql_query(...);
// redirection en cas de succès
header("Location: actualite.php");
exit();
}
Posté : 22 nov. 2007, 16:41
par Yo
J'ai bien mis le code après le bloc
$result2 = mysql_query($requete_update) or die ("probleme " .mysql_error());
// redirection en cas de succès
header("Location: actualite.php");
exit();
}
}
mais j'ai une erreur lorsque j'ai validé mon formulaire : Warning: Cannot modify header information - headers already sent by (output started at /mnt/149/sdb/3/1/hbnx/administration/texte_information_actualite.php:2) in /mnt/149/sdb/3/1/hbnx/administration/texte_information_actualite.php on line 165
Je vois pas ou est le problème ? Encore merci pour votre aide truc et dom
Posté : 22 nov. 2007, 16:48
par d0m
C'est exactement le problème contre lequel
Ryle te mettait en garde
Nota : aucun code ne doit être envoyé au navigateur avant un header() : pas de echo ou de print, pas de code html, d'espace ou de retour à la ligne en dehors des balises <?php ?> ...
Posté : 22 nov. 2007, 16:52
par Yo
oui c'est bien ce qu'il me semblait donc j'ai rééssayé et cela à fonctionne sans pb ! merci beaucoup !