8768 sujets

Développement web côté serveur, CMS

Bonjour Smiley ravi ,
Voila j'aurais besoin de votre aide, je rencontre un problème par rapport au header, je fais simplement un header('location: ....... ') pour revenir sur une autre page, dès que ma condition est finis, mais j'ai un message d'erreur qui est :

Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\projets\STAGE\WordPress\wp-includes\formatting.php:5699) in D:\xampp\htdocs\projets\STAGE\WordPress\wp-content\plugins\mindmap-plugin-v01\Creation_mind_map.php on line 19


J'ai essayé plusieurs choses que j'avais vus sur des forums, comme désinstaller et re installé mon plugin, essayer d'enlever les espaces inutiles etc ... mais rien n'y fait.

Voici le code de la page du header :

<?php
require_once "Init.php";
// Instanciation des DAO
$MindMapDAO = new MindMapDAO();
// Récupère l'ID dans l'URL
$id_mind_map = isset($_GET['id_mind_map']) ? $_GET['id_mind_map'] : null;
// Lecture du formulaire
$submit = isset($_POST['submit']);

if ($submit) {
    
    // Crée un objet lignes à l'image des données
    $nom_mind_map = isset($_POST['nom_mind_map']) ? $_POST['nom_mind_map'] : null;
    
    $mindmap= new Mindmap(array(
      'nom_mind_map'=>$nom_mind_map
    ));
    // Ajoute l'enregistrement dans la BD
    $MindMapDAO->insert($mindmap);

    // Redirection vers la liste des lignes
    header('Location:http://localhost/projets/STAGE/WordPress/wp-admin/admin.php?page=MyMindMap_Acceuil');
} else {
    // Formulaire non soumi
    // Initialise l'objet métier
    $mindmap = new Mindmap();
}
?>


Pouvez-vous m'aider ? Merci Smiley biggrin
tu ne dois pas avoir de echo ou ligne blanche, espace dans tes fichiers avant cette ligne sans quoi PHP aura déjà envoyé les entêtes http.

Donc vérifie qu'il n'y a pas d'espace qui traine au début ou à la fin de tes fichiers php. Note que pour tes fichiers tu peux uniquement ouvrir la balise <?php et omettre la balise de fin ?> :

<?php // toujours à la première ligne

// ton code
// ...

// pas de balise de fermeture


ce qui évite d'avoir quelconques espaces qui trainent


Cela peut aussi arriver si tu as la signature BOM activé dans ton éditeur de code. Donc à désactiver si c'est le cas.
Modifié par bacasable (06 Feb 2020 - 10:22)
Je suis obligé mettre la balise du fin de php ?> , sinon ça ne prendra pas en compte mon HTML

<?php
require_once "Init.php";
// Instanciation des DAO
$MindMapDAO = new MindMapDAO();
// Récupère l'ID dans l'URL
$id_mind_map = isset($_GET['id_mind_map']) ? $_GET['id_mind_map'] : null;
// Lecture du formulaire
$submit = isset($_POST['submit']);

if ($submit) {
    
    // Crée un objet lignes à l'image des données
    $nom_mind_map = isset($_POST['nom_mind_map']) ? $_POST['nom_mind_map'] : null;
    
    $mindmap= new Mindmap(array(
      'nom_mind_map'=>$nom_mind_map
    ));
    // Ajoute l'enregistrement dans la BD
    $MindMapDAO->insert($mindmap);

    // Redirection vers la liste des lignes
    header('Location:http://localhost/projets/STAGE/WordPress/wp-admin/admin.php?page=MyMindMap_Acceuil');
} else {
    // Formulaire non soumi
    // Initialise l'objet métier
    $mindmap = new Mindmap();
}
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Création Mind Map</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>  
        <link rel="stylesheet" type ="text/css" href="Css/FREDI.css">
    </head>
    <body>
        <?php include "Menu.php"; ?>
        <div class="py-5 text-center">
                <h2>Création d'un Mind Map</h2>
                <p class="lead">Rentrez vos informations pour permettre de créer votre Mind Map.</p>
            </div>
        <?php require_once "MindmapForm.php";?>
        <br><br><br><br><br><br><br><br><br><br><br><br><br>
    </body>
</html>


Comment ça la signature BOM ?
Administrateur
Bonjour,

BOM comme dans "UTF-8 sans BOM" que l'on trouve dans les éditeurs de texte à la rubrique encodage. Du temps où UTF-8 n'était pas un réflexe (ah les erreurs entre les encodages ISO-8859-15 et UTF-8, que du bonheur Smiley biggol ), on se retrouvait avec ce caractère affiché sous forme de diamant/losange noir avec un point d'interrogation blanc "<?>".
Si tu utilises Atom, ST ou VSCode peu de chances que ce soit ça.
Je te laisse chercher "encodage" dans les articles et tuto ici, c'était un vrai sujet il y a quelques années.

Je ne pratique plus PHP mais je tenterais bien d'ouvrir une balise <?php après ton code HTML sans la fermer et peut-être déjà de coller la balise fermante existante à la balise du Doctype ?
Modifié par Felipe (06 Feb 2020 - 10:57)
Ici oui forcément mais pour que ce soit bien clair il faut vérifier dans tout les fichiers que tu as appelé en amont qu'il n'y ai pas d'espaces blanc. Donc dans ton fichier Init.php, ta classe MindMapDAO, etc...
J'ai tout inspecter normalement il n'y à plus d'espace Smiley smile .
Mais toujours le même message qui s'affiche

Je code avec VSCode ^^
Modifié par MlleYouma (06 Feb 2020 - 11:35)
Il y a forcément quelque chose qui fait que tes entêtes sont envoyées avant ta redirection.

Essaye de mettre ton header(...) à la première ligne de ton plugin et tu verras bien si cela fonctionne ou non. Si c'est pas le cas il faudra chercher ailleurs dans ton wordpress sinon c'est que tu as des espaces, echo, print, BOM quelque part dans ton code.
Hello

Je confirme.

Ce que l'erreur te dit c'est qu'il ne fera pas la redirection CAR tu as fais un echo, ou un print ou un truc du genre AVANT le header location....

Regarde bien dans ton INIT.PHP ou dans ton inser() dao qu'il n'y a pas un var_dump ou un echo qui traine que tu n'aurais pas vue.

et surtout, regarde cette ligne :
Creation_mind_map.php on line 19


Et si vraiment tu veux forcer la redirection alors à la place du header tu fais de js.

echo("<script>location.href = 'Location:http://localhost/projets/STAGE/WordPress/wp-admin/admin.php?page=MyMindMap_Acceuil';</script>");

Modifié par JENCAL (07 Feb 2020 - 10:15)
Si je met le header(..)... à la première ligne cela ne fonctionne pas, voici le message d'erreur :
Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\projets\STAGE\WordPress\wp-includes\formatting.php:5699) in D:\xampp\htdocs\projets\STAGE\WordPress\wp-content\plugins\mindmap-plugin-v01\Creation_mind_map.php on line 2


Après peut être que je mets un mauvais lien, dans mon header j'ai mis ça :
header('Location:http://localhost/projets/STAGE/WordPress/wp-admin/admin.php?page=Menu_MindMap');

Modifié par MlleYouma (07 Feb 2020 - 10:23)
MlleYouma a écrit :
Si je met le header(..)... à la première ligne cela ne fonctionne pas


Sans connaitre le projet en entier c'est dur, peut être que ton fichier est appellé par un autre fichier qui lui à une sortie print ou autres.

Sinon essaye ma solution avec le js dans l'écho
JENCAL a écrit :


Sans connaitre le projet en entier c'est dur, peut être que ton fichier est appellé par un autre fichier qui lui à une sortie print ou autres.

Sinon essaye ma solution avec le js dans l'écho


J'ai fais toutes tes indications, malheureusement ceci n'a pas marché, mais je vais essayer le js pour forcer Smiley cligne .

Mais je dois juste mettre ça a :
 echo("<script>location.href = 'Location:http://localhost/projets/STAGE/WordPress/wp-admin/admin.php?page=Menu_MindMap';</script>");

A la place de mon "header" dans le php ?
Modifié par MlleYouma (07 Feb 2020 - 10:34)
Oui, par contre j'ai mal écrit, c'est comme ça



echo("<script>document.location.href = 'http://localhost/projets/STAGE/WordPress/wp-admin/admin.php?page=MyMindMap_Acceuil';</script>");
Meilleure solution
JENCAL a écrit :
Oui, par contre j'ai mal écrit, c'est comme ça



echo("&lt;script&gt;document.location.href = 'http://localhost/projets/STAGE/WordPress/wp-admin/admin.php?page=MyMindMap_Acceuil';&lt;/script&gt;");



Je te remercie encore JENCAL, ça marche ! Tu es d'une grande aide ! merci encore Smiley cligne Smiley ravi
Modifié par MlleYouma (07 Feb 2020 - 10:56)