Bonjour,Bonjour,

J'essaye de faire un site en MVC en PHP, et là je bloque car je souhaiterais après l'exécution d'un formulaire de mise à jour faire une redirection vers la page d'accueil.

Mais le header location ne fonctionne pas car il y a du HTML avant, j'ai vu qu'on pouvait utiliser ob_start mais je ne sais pas comment l'utiliser dans mon cas, c'est à dire avec l'architecture MVC.

Pouvez-vous m'aidez svp ?

Voici mon code :

mon formulaire d'édition

<h2>Edition</h2>

<form action="index.php?p=edit&id=<?= $_GET['id'] ?>" method="post">

<label>Nom</label>

<input type="text" name="nom" value="<?= $user1['nom'] ?>" />

<label>Prénom</label>

<input type="text" name="prenom" value="<?= $user1['prenom'] ?>" />

<br />

<input type="submit" value="Modifier" />

</form>

<?php

header("location:index.php");

?>

ce qu'il y a dans ma page d'index qui appel mon formulaire :

<?php

    ob_start();

if (isset($_GET['p']) && $_GET['p'] == "insert") {

require_once('controller/insert.php');

} elseif (isset($_GET['p']) && $_GET['p'] == "edit") {

require_once('controller/edit.php');

} else {

require_once('controller/page.php');

}

    ob_end_flush()

?>

j'ai l'erreur suivante :

Warning: Cannot modify header information - headers already sent by (output started at ...

6 réponses


keulu
Réponse acceptée

c'est que t'as encore du texte qui sort avant... faut pas que tu ai de echo / print / var_dump etc.... avant

Fait ta partie traitement avant l'affichage de contenu HTML

lilou778
Auteur

je suis un peu perdu avec l'architecture MVC, je ne sais pas trop comment faire.

en MVC, faut partir du principe que tu ne pourra pas faire de redirection dans tes vues... toutes les redirections doivent se faire dans des controlleurs (avant le traitement html)

si tu utilise un framework, tu dois avoir des methodes de redirection.

sinon, tu peux utiliser effectivement le header('location:xxxxx'); mais dans un controlleur.

exemples :

  • si un formulaire ne se valide pas, redirection. (après validation du formulaire, donc dans le controlleur avant de réaficher ton formulaire)
  • si un user n'a pas le droit d'acccès a une page. (idem, les checks se font dans le controlleur)

très important de bien hierarchisé ton code.

lilou778
Auteur

j'ai essayé de le mettre dans le controller mais j'ai la même erreur.

lilou778
Auteur

merci pour ton aide j'ai trouvé une solution dans laquelle je ne fais plus appel de mes vues dans mes controlleurs mais dans ma page d'index, et j'ai placé le PHP tout en g-haut de ma page d'index.