Question bete sur redirection après formulaire...

Yo
Petit nouveau ! | 6 Messages

22 nov. 2007, 09:55

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

d0m
Mammouth du PHP | 1141 Messages

22 nov. 2007, 09:58

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

Yo
Petit nouveau ! | 6 Messages

22 nov. 2007, 14:38

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 nov. 2007, 14:54

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 ?> ... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Yo
Petit nouveau ! | 6 Messages

22 nov. 2007, 15:47

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

d0m
Mammouth du PHP | 1141 Messages

22 nov. 2007, 16:06

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']))

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 nov. 2007, 16:07

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 :wink:
<?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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Yo
Petit nouveau ! | 6 Messages

22 nov. 2007, 16:18

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&ecirc;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>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 nov. 2007, 16:36

Donc tu as bien une structure conditionnelle :wink:

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();
}
 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Yo
Petit nouveau ! | 6 Messages

22 nov. 2007, 16:41

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

d0m
Mammouth du PHP | 1141 Messages

22 nov. 2007, 16:48

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 ?> ...

Yo
Petit nouveau ! | 6 Messages

22 nov. 2007, 16:52

oui c'est bien ce qu'il me semblait donc j'ai rééssayé et cela à fonctionne sans pb ! merci beaucoup !