Partage
  • Partager sur Facebook
  • Partager sur Twitter

besoin d'aide pour transider des données par url

envoyer des donnee grace à la fonction onchange="this.form.submit()"

Sujet résolu
    4 mars 2021 à 12:27:54

    Bonjour, je suis bloqué depuis hier et je ne sais d'où viens le problème que je n'arrive pas à resoudre .je viens donc ici pour demander le l'aide.

    En fait le developpe en architecture MVC . Le but de projet est de "gérer un établissement scolaire". Mais le module qui me crée une tonne de problème est "la gestion des programmes".

    voici l'architecture du projet

    -un dossier controller contenant les controllers

    -un dossier views contenant les views

    -et un fichier index.php se setuant à la racine du projet

    L'objectif est de lister tout les programme par :

    année(Ex: 2010/2011)

    filière(Ex: TGI)

    classe(Ex: 1ere annee)

    j'arrive bien a liste tous ces paramètres.

    voici le code selection de ces trois elements depuis le fichier programmes.view.php

     <form class="form-inline" method="GET">
    Années scolaire : &nbsp
    <select name="anneeScolaire" class="form-control" onchange="this.form.submit()">
       <?php foreach($anneesScolaire as $anneeScolaire):?>
          <option <?php if($anneeScolaire == $choixAnnee) echo 
          "selected"?>><?= $anneeScolaire ?></option>
       <?php endforeach ?>
    </select>
     Niveau: &nbsp
    <select name="id_filiere"  class="form-control" onchange="this.form.submit()">
        <?php foreach($filieres as $filiere):?>
             <option value="<?= $filiere['id_filiere'] ?> <? 
                 php if($filiere['id_filiere'] === $filiere) 
                 echo "selected"?>"><?= 
                 strtoupper($filiere['libelle_filiere']) ?> 
             </option>
        <?php endforeach ?>
    </select>
    Classe: &nbsp
    <select name="classe"  class="form-control" 
         onchange="this.form.submit()">
        <option value="0" <?php if($classe == 0) echo 
             "selected"?>>Toutes les classes</option>
       <option value="1" <?php if($classe == 1) echo 
            "selected" ?>>1<sub>ère</sub> Année</option>
       <option value="2" <?php if($classe == 2) echo 
         "selected" ?>>2<sub>ème</sub> Année</option>
    </select>


    Voici le code qui me permet de recuperer les donnees transidées dans l'url après avoir selectionner un des parametres citer ci-dessus.

    ce code est dans le programmes.controller.php

    function getPageProgrammes(){
        if(isset($_GET)){
            debug($_GET);
        }
        if(isset($_GET["anneeScolaire"])){
            $choixAnnee = $_GET['anneeScolaire'];
            echo $choixAnnee;
        }else {
            $choixAnnee = anneeScolaireActuelle();
            echo $choixAnnee. '<br>';
        }
        if(isset($_GET["id_filiere"]) && 
            ctype_digit($_GET["id_filiere"])){
            $filiere = $_GET['filiere'];
            echo $filiere;
        }else{
            $filiere = 1;
            echo $filiere .'<br>';
        }
        if(isset($_GET["classe"])){
            $classe = $_GET['classe'];
            echo $classe;
        }else{
            $classe = 0;
            echo $classe;
        }
        $classe = "";
        if($classe == 0) $classe = "";//Toutes les classes
        if($classe == 1) $classe = "1ere annee";
        if($classe == 2) $classe = "2eme annee";
        
        $matieresProg = 
         getProgrammesFromBd($choixAnnee,$filiere,$classe);
        //debug($matieresProg);
        $anneesScolaire = getAnneesScolaire(); //la liste 
          des années scolaire
        $filieres = getFilieresFromBd();
        require_once('views/programmes/programmes.view.php');
    }

    Nb:Toutes les fonctions de recuperation des données dans la base de données fonctionnent à merveille

    voici le code de mon fichier index qui sert de routage à l'application

    index.php 

    Nb: c'est juste un extrait de index.php consernant le module programme

    require_once'controllers/programmes.controller.php';
    if(isset($_GET['route'])){
        $page = $_GET['route'];
        switch($page){
            case "programmes":
                getPageProgrammes();
            break;


    Lorsque je selectionne un des parametres Ex : Années scolaire les differents parametres et leurs valeurs sont automatiquement transmis dans l'url . voici le resultat dans l'url après une selection

    MVC/programmes?anneeScolaire=2020%2F2021&id_filiere=13+&classe=1

    Mon soucis est que ces données transmis dans l'url ne parviennent pas à arriver dans mon fichier programmes.controller.php car lorsque  

    j'essaie de debuger les resultat dans mon fichier programmes.controller.php .

    -le code un extrait

    function getPageProgrammes(){
        if(isset($_GET)){
            debug($_GET);
        }
    }


    voici le resultat retourné

    Array
    (
        [route] => programmes
    )

    Espérant avoir bien detaillé mon souccis . Je compte sur vous pour avoir une aide. Merci.


    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2021 à 13:32:12

      Ca sent une "feature" automatique d'Apache (DirectoryIndex, négociation de contenu, AcceptPahInfo) ou une réécriture foireuse.

      MVC/ c'est la racine du projet ?

      Il y a un fichier programme.quelque chose ou un répertoire programme dedans ?

      Des règles de réécriture, je suppose pour "traduire" l'URL en $_GET['route'] ?

      var_dump($_SERVER['REQUEST_URI']); ?

      -
      Edité par julp 4 mars 2021 à 13:33:02

      • Partager sur Facebook
      • Partager sur Twitter
        4 mars 2021 à 14:52:02

        Merci. Je ne comprends pas trop mais.......

        Oui MVC/ C'est la racine du projet : le dossier contenant tous les dossiers et fichiers du projet

        selon l'architecture que j'ai voulu  faire, les fichiers de chaque module sont rangés dans "un dossier comportant son nom .EX: tous le fichiers

        (ajouter_programme.view.php,modifier_programme.view.php,supprimer_programme.view.php, et prorammes.view.php sont dans un dossier "programmes"

        et tous ces dossiers consernant la vue sont rangés dans un dossier views

        Ex: views/programmes/programmes.view.php

        Tous les controllers de chaque module sont rangés dans un dossier 'controllers' 

        Ex: controllers/programme.controller.php

        -Les règles d'ecriture des URL 

        <?php
        define("URL",str_replace("index.php","",(isset($_SERVER["HTTPS"])? "https" : "http")."://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]"));
        

        Cette ligne de code me permet d'obtenir un Url commencant depuis la racine du projet à chaque demande d'action ou URL

        Ex : http://localhost/MVC/

        Ex2: A la demande de la liste des programme l'URL devient : http://localhost/programmes

        Merci .....

        • Partager sur Facebook
        • Partager sur Twitter
          4 mars 2021 à 15:41:37

          > Ex2: A la demande de la liste des programme l'URL devient : http://localhost/programmes

          Il ne manque pas /MVC/ là ?

          > -Les règles d'ecriture des URL

          Non, réécriture : tu n'as pas un fichier .htaccess ?

          > var_dump($_SERVER['REQUEST_URI']); ?

          Tu n'as pas donné cette information.

          Pas évident de comprendre ton arborescence, surtout que tu ne réponds pas directement à ma question : faire un tree dans la console ?

          HS :

              $classe = "";
              if($classe == 0) $classe = "";//Toutes les classes
              if($classe == 1) $classe = "1ere annee";
              if($classe == 2) $classe = "2eme annee";
          

          Si tu écrases $classe par '', elle ne peut pas ensuite valoir 0 ou 1 ni 2.

          -
          Edité par julp 4 mars 2021 à 15:43:19

          • Partager sur Facebook
          • Partager sur Twitter
            4 mars 2021 à 15:56:36

            OUI oui une erreur

            Ex2: A la demande de la liste des programme l'URL devient : http://localhost/programmes le vrai resulat est :

            http://localhost/MVC/programmes et non http://localhost/programmes

            lorsque j'execute var_dump($_SERVER['REQUEST_URI']);  le resultat retourné est :

            string(15) "/MVC/programmes"

            Quand je fait une selection avec un parametre Ex; anneeScolaire

            var_dump($_SERVER['REQUEST_URI']); return  

            string(65) "/MVC/programmes?anneeScolaire=2011%2F2012&id_filiere=13+&classe=0"

            Le souccis est que je n'arrive pas à recuperer les differentes valeurs. 

            MERCI..

            • Partager sur Facebook
            • Partager sur Twitter
              4 mars 2021 à 15:58:41

              > string(65) "/MVC/programmes?anneeScolaire=2011%2F2012&id_filiere=13+&classe=0"

              > Le soucis est que je n'arrive pas à récupérer les différentes valeurs.

              Tu les as là ($_SERVER['REQUEST_URI'] étant la "vraie" URL finale) donc tu devrais les retrouver en $_GET sinon c'est que tu fais une redirection ou écrases $_GET quelque part dans ton code entre temps.

              Par contre, hors sujet mais si je ne m'abuse, le + donne un espace qui vient du " manquant pour mettre fin au value de l'option de l'echo de $filiere['id_filiere']

              -
              Edité par julp 4 mars 2021 à 16:04:52

              • Partager sur Facebook
              • Partager sur Twitter
                4 mars 2021 à 19:20:18

                Merci .. 

                j'ai enlevé le signe + de mon url mais je n'arrive toujours pas à recupérer les differentes valeurs. A mon avis le problème viens du point d'interrogation (?) au sein de l'url  : string(65) "/MVC/programmes?anneeScolaire=2011%2F2012&id_filiere=13+&classe=0"

                Car dans mes autres fichiers du projet pour transmettre les données dans l'url je fais . voir le code

                <a href="<?= URL ?>modifier_filiere&idFiliere=<?= 
                    $filiere['id_filiere']?>" title="editer">
                  <span class="glyphicon glyphicon-edit btn btn-info"> 
                  </span>
                </a>

                je met donc & et non ?

                ou <?= URL ?> = http://localhost/MVC/ et "modifier_filiere" est la  route permettant d'accéder au fichier de modification de la filiere en question 

                Lorsque je debug la super global GEt permettant de recupérer l'id d'une filiere à modifier cela me donne 

                le code: 

                function getPageModifierFiliere(){
                    
                    if(isset($_GET)){
                        debug($_GET);
                    }
                    if(!empty($_GET['idFiliere']) && 
                    ctype_digit($_GET['idFiliere'])){
                 

                resulat

                Array
                (
                    [route] => modifier_filiere
                    [idFiliere] => 13
                )
                 
                Mais lorsque je debug le GET du programme
                il me return Array
                (
                    [route] => programmes
                )
                Je ne sais comment faire pour remplacer le ? par &
                • Partager sur Facebook
                • Partager sur Twitter
                  4 mars 2021 à 19:25:48

                  > je mets donc & et non ?

                  Ce devrait être un ? c'est la caractère qui débute la query string, à moins que la valeur de ta constante URL se termine par ?route= ? Enfin, je ne sais pas, on ne sait pas sur quoi tu bases ton routage (et c'est pour ça que j'avais précédemment mentionné une réécriture d'URL et demandé le contenu de ton .htaccess dont j'attends toujours la réponse) => D'où sort $_GET['route'] ?

                  > Mais lorsque je debug le GET du programme

                  Pour quelle URL ? La même URL ne produit pas deux résultats différents, si ? (à moins d'écraser $_GET entre temps)

                  On n'est pas sur ta machine pour tester mais si en plus c'est déjà confus pour toi, on ne va pas aller loin.


                  Je ne sais pas si c'est encore une erreur (potentiellement due à l'éditeur) mais si tu ne mets pas de paramètre route dans tes URL (en query string) et que $_GET['route'] apparaît quand tu fais un print_r de $_GET, elle n'apparaît pas par enchantement, il y a forcément quelque chose qui la met en place, non ?

                  -
                  Edité par julp 4 mars 2021 à 19:40:50

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 mars 2021 à 9:43:35

                    Bonjour julp et merci pour les interventions .

                    Je vous envoie le contenu de mon fichier .htaccess , il est situé à la racine du projet

                    #REECRITURE D'URL
                    RewriteEngine On
                    
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-d
                    
                    RewriteRule ^(.*)$ index.php?route=$1

                    - le code du menu peremettant de choisir les actions

                    Nb: un extrait

                     <ul class="nav navbar-nav">URL
                         <li><a  href="<?= URL ?>stagiaires">Les 
                           stagiaires</a> 
                          </li>
                        <li><a  href="<?= URL ?>filieres">Les filières</a> 
                        </li>
                        <li><a  href="<?= URL ?>utilisateurs">Les 
                       utilisateurs</a></li>
                        <li><a  href="<?= URL ?>matieres">Les matières</a> 
                         </li>
                         <li><a  href="<?= URL ?>programmes">Les 
                        programmes</a> 
                        </li>
                    </ul>

                    - le code permettant de la réecriture d'url (config.php) situé dans un dossier config

                    <?php
                    define("URL",str_replace("index.php","",(isset($_SERVER["HTTPS"])? "https" : "http")."://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]"));
                    

                    - le fichier index permettant le routage situé à la racine du projet

                    Nb: un extrait

                    require_once'config/config.php'; //le fichier de réécriture d'url
                     
                    require_once'controllers/filiere.controller.php';
                    require_once'controllers/programmes.controller.php';
                    if(isset($_GET['route'])){
                        $page = $_GET['route'];
                        switch($page){
                            case "filieres":
                                getPageFiliere();
                                break;
                            case "ajouter_filiere":
                                getPageAjouterFiliere();
                    //require_once"views/filieres/ajouter_filiere.view.php";
                            break;
                            case "modifier_filiere":
                                getPageModifierFiliere();  //require_once"views/filieres/modifier_filiere.view.php";
                            break;
                            case "supprimer_filiere":
                                getPageSuppressionFiliere();   //require_once"views/filieres/supprimer_filiere.view.php";
                            break;
                            case "programmes":
                                getPageProgrammes();
                    //require_once"views/programmes/programmes.view.php";
                            break;


                    Merci .





                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 mars 2021 à 11:45:13

                      Je ne comprends même plus ton problème : un coup tu nous dis que les paramètres ?anneeScolaire=2020%2F2021&id_filiere=13+&classe=1 sont là (en $_GET), l'autre non. Ils y sont ou pas au final ? Ca concerne des URL différentes ?

                      > RewriteRule ^(.*)$ index.php?route=$1

                      Il manque l'option QSA sinon tu perds la query string d'origine.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 mars 2021 à 12:07:03

                        Les paramètres s'affichent bel et bien dans l'url :http://localhost/MVC/programmes?anneeScolaire=2011%2F2012&id_filiere=13&classe=0

                        Quand j'ai fait var_dump($_SERVER['REQUEST_URI']); 

                        Il me renvoie bel et bien les paramètres et leurs valeurs :

                        string(64) "/MVC/programmes?anneeScolaire=2020%2F2021&id_filiere=13&classe=2"

                        Mais quand je fait var_dump($_GET) IL retourne: array(1) { ["route"]=> string(10) "programmes" } Mais pas les paramètes et leurs valeurs .C'est ce que je ne comprend pas.

                        Il manque l'option QSA sinon tu perds la query string d'origine : QSA q'est- ce que c'est ? et comment l'utilisé ?

                        Merci ..

                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 mars 2021 à 13:52:08

                          ok Merci  pour tes reponses . j'ai enfin aboutir à mon resultat . le problème venait de mon fichier .htaccess

                          le code AVANT

                          RewriteEngine On
                          
                          RewriteCond %{REQUEST_FILENAME} !-f
                          RewriteCond %{REQUEST_FILENAME} !-d
                          
                          RewriteRule ^(.*)$ index.php?route=$1 

                          resultat: array(1) { ["route"]=> string(10) "programmes" }

                          APRES

                          RewriteEngine On
                          
                          RewriteCond %{REQUEST_FILENAME} !-f
                          RewriteCond %{REQUEST_FILENAME} !-d
                          
                          RewriteRule ^(.*)$ index.php?route=$1 [QSA,L]

                          resultat  array(4) { ["route"]=> string(10) "programmes" ["anneeScolaire"]=> string(9) "2019/2020" ["id_filiere"]=> string(2) "13" ["classe"]=> string(1) "1" }

                          Merci Merci Merci et Merci

                          • Partager sur Facebook
                          • Partager sur Twitter

                          besoin d'aide pour transider des données par url

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown