IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

erreur lors de la validation d'un formulaire : Cannot modify header information - headers already sent by


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut erreur lors de la validation d'un formulaire : Cannot modify header information - headers already sent by
    Bonjour,
    j'ai une erreur quand je valide un formulaire pour supprimer une categorie dans une page. j'ai un require'header' dans cette page
    L'erreur est le suivant :
    Cannot modify header information - headers already sent by (output started at C:\wamp64\www\projet\elements\header.php:84) in C:\wamp64\www\projet\model\modelCategories.php on line 56
    Quand je regarde les lignes concernées dans mon header je soupçonne que mes ligne de balisage php posent problème
    j'ai supprimé l'indentation à ces lignes et l'erreur est passé sur ma ligne de <?php endif?>.

    voici mon code à partir du if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php if(! $estConnecte):?>
                                <a class ="nav-link  px-3" href="vueLogin.php">
                                <i class="bi bi-person"  style="font-size: 1.2rem;"></i>Connexion/Inscription
                                </a>
    <?php else:?>
                                <li class="nav-item dropdown btnCategories">
                                <a class ="  nav-link  px-3 dropdown-toggle" href="#"  data-bs-toggle="dropdown">
                                    Vos Collections
                                </a>
                                <div class="collectionsRec dropdown-menu">
     
                                </div>
                            </li>
                                <li class="nav-item  text-center">
                                <a class ="nav-link p-0 m-0 px-3 deconnexion" href="vueLogin.php">
                                    <form method="POST" class="m-0 p-0">
                                        <input class ="mb-0 " d-inline type="submit" name="deconnexion" value="Deconnexion">
                                    </form>
                                </a>
                                <i class="mt-0 pt-0 d-inline">
    <?php echo 'Bonjour '.$_SESSION['pseudo']?></i>
    <?php endif?>
    merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 323
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 323
    Billets dans le blog
    17
    Par défaut
    Ton script est mal indenté et dur à lire.

    Où est header() ? Il ne faut pas afficher/envoyer de HTML/JS et ni le moindre caractère avant d'appeler header().

  3. #3
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    dans la page administration.php ou j'ai mon formulaire il est à la première ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php require '../elements/header.php'?>
    je voudrais préciser que si j'ajoute une catégorie ou je modifie je n'ai pas de tout d'erreur, l'erreur survient quand je clique sur supprimer une catégorie, dans ma barre de navigation j'ai un menu deroulant avec les catégories et collections peut être cela pose problème.

    J'ai remis l'indentation et j'ai toujours l'erreur sur ma ligne endif

    mon code avec indentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <div class="header container-fluid mb-4 sticky-top px-0">
                <nav class= " navbar navbar-expand-md  px-5">
                    <a class="navbar-brand nav-link" href="">Palais Pates</a>
                    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"></span>
                    </button>
                    <div class="collapse navbar-collapse justify-content-between" id="navbar">
                        <ul class= "navbar-nav mx-5">
                            <li class="nav-item">
                                <a class ="nav-link  px-3" href="../view/vueRecettes.php">
                                    Home
                                </a>
                            </li>
                            <li class="nav-item dropdown btnCategories">
                                <a class ="  nav-link  px-3 dropdown-toggle" href="#"  data-bs-toggle="dropdown">
                                    Catégories
                                </a>
                                <div class="dropdown-menu">
                                    <?php $categories = $categoriesController->getCategories();?>
                                    <?php foreach($categories as $categ) :?>
                                    <a class="dropdown-item"  href="./vueCategorie.php?id=<?php echo $categ['id_cat']?>"><?php echo $categ["nom"]?></a>
                                    <?php endforeach ?>    
                                </div>
                            </li>
                        </ul>
                        <ul class= "navbar-nav ms-5 align-items-center">
                            <li class="nav-item">
                             <?php if(!$estConnecte):?>
                                <a class ="nav-link  px-3" href="vueLogin.php">
                                    <i class="bi bi-person"  style="font-size: 1.2rem;"></i>Connexion/Inscription
                                </a>
                                <?php else:?>
                                <li class="nav-item dropdown btnCategories">
                                    <a class ="  nav-link  px-3 dropdown-toggle" href="#"  data-bs-toggle="dropdown">
                                    Vos Collections
                                </a>
                                <div class="collectionsRec dropdown-menu">
     
                                </div>
                            </li>
                                <li class="nav-item  text-center">
                                    <a class ="nav-link p-0 m-0 px-3 deconnexion" href="vueLogin.php">
                                        <form method="POST" class="m-0 p-0">
                                            <input class ="mb-0 " d-inline type="submit" name="deconnexion" value="Deconnexion">
                                        </form>
                                    </a>
                                <i class="mt-0 pt-0 d-inline">
                                <?php echo 'Bonjour '.$_SESSION['pseudo']?></i>
                                <?php endif?> 
                            </li>
                            <li class="nav-item">
                                <a class ="nav-link  px-3" href="#">
                                    <i class="bi bi-mailbox"  style="font-size: 1.2rem;"></i> Nous Contacter
                                </a>
                            </li>
                        </ul>
                    </div> 
                </nav>
            </div>
    Désole quand je fais le copier-coller il y à quelques ligne qui bouge.
    Je trouve étrange parce que j'ai quasiment une page similaire collections.php et quand j'ajoute ou modifie la collection pas de problème mais si je veux supprimer la collection j'ai le meme souci.
    Merci

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    Séb. demandait où est l'utilisation de la fonction "header".
    d'après le message d'erreur, c'est dans le fichier modelCategories.php ligne 56 et vous envoyez des caractères dans le fichier header.php à la ligne 84.

  5. #5
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    ah pardon je croyais que l'erreur pouvais venir de mon fichier header.php, dans mon modelCategories c'est une ligne de ma fonction pour supprimer les catégories
    la fonction est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function delByCategorie($id_cat) {
                    $req = $this->bdd->prepare ("DELETE FROM categories WHERE id_cat= :id_cat 
                                                AND NOT EXISTS(SELECT * from recettes where recettes.fkidCat = categories.id_cat)");
                    $req->bindParam(':id_cat', $id_cat);
                    $req->execute();
                    $requete = $req->fetch();
     
                    if(!$requete) {
                        header('location: administration.php?erreurDelCat=1');
                    }
                }
    la ligne 56
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      header('location: administration.php?erreurDelCat=1');
    Je voulais mettre des variables dans mon URL en cas d'erreur, peut etre c'est cela le problème ? (j'ai le meme souci dans la page collections en faisant une fonction similaire pour ajouter des variable erreurs dans l'URL)
    Je viens de tester d'enlever la barre de navigation(header.php) et l'URL change.
    merci encore pour votre aide

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    la fonction "header" envoie un entête http donc il faut qu'il n'y ait eu aucun affichage à ce moment.

    pour mieux organiser vos fichiers (et cette organisation vous permettra d'utiliser "header") je vous conseille de mettre dans des fichiers séparés le code qui fait de l'affichage et le code qui modifie des données.
    donc dans l'affichage vous aurez par exemple une liste de catégories avec des cases à cocher pour indiquer les catégories à supprimer. et cette liste sera dans une balise "form" qui envoie vers un fichier "supprimer_categories.php"
    ensuite dans supprimer_categories.php, vous lisez dans $_POST la liste des identifiants, vous faites la suppression et ensuite vous redirigez (avec header) vers la page avec liste de catégories.

    il y a aura que ça dans le fichier supprimer_categories.php ce qui vous permettra aussi de mieux vous représenter l'organisation de votre application. et ensuite si vous faite l'ajout d'une catégorie, vous aurez un nouveau fichier "nouvelle_categorie.php" avec le formulaire de création des champs et vous aurez un nouveau fichier "creer_categorie.php" qui s'occupe juste de créer la catégorie puis redirige vers la page avec liste de catégories.

  7. #7
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    je vous remercie pour vos conseils et vos explications. Au fur à mesure que j'avance dans mon projet je me rends compte que avant de commencer à coder le travail en amont de la réflexion et l'organisation du projet est primordiale, cela évite énormément de souci lors du codage. Je vais faire comme vous m'avez conseillé et surtout j'ai revu hier l'indentation de toutes mes pages c'est beaucoup plus lisible
    Encore merci à tous de me consacrer votre temps et transmettre vos compétences
    bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Exécuter du PHP lors de la validation d'un formulaire
    Par UniX31 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/06/2007, 10h36
  2. problème de doublon lors de la validation d'un formulaire
    Par barouz dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 01/06/2007, 10h45
  3. Facelets et erreur lors de la validation
    Par sir_gcc dans le forum JSF
    Réponses: 2
    Dernier message: 01/05/2007, 15h35
  4. Help pour ouverture d'un popup lors de la validation d'un formulaire
    Par vrossi59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/07/2006, 19h57
  5. Ouvrir une popup lors de la validation d'un formulaire
    Par pod1978 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/11/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo