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

Symfony PHP Discussion :

Symfony 4.2 : appeler fichier PHP depuis JS


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Par défaut Symfony 4.2 : appeler fichier PHP depuis JS
    Bonjour à tous,

    Je suis sous Symfony 4.2, et j'exécute sur une twig côté client, de la vue donc :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        function changeListener(){
              $("#Selector").slideDown().load("public/absenceUpdate.php", {
    				id: $(this).closest('tr').find('#abs_id').val(),
    				valider: $(this).closest('tr').find('.valider').val()
              });
     }
    Mon problème : Je dois donc viser un fichier PHP pour réaliser faire un UPDATE en BDD.
    Le truc, c'est que je ne sais pas où je dois mettre ce fichier PHP Pour l'appeler.
    Quel règle dois-je suivre pour que cela fonctionne? Pour rappel, voici la racine initiale d'un projet symfony (donc du mien) :
    Nom : symfony.png
Affichages : 536
Taille : 24,3 Ko
    Peut-être faut-il le placer dans src et dans un sous-dossier (Controller? ...)

    Merci d'avance!

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut
    J'appellerais une action d'un contrôleur, comme ceci :

    Contrôleur :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /**
     * @Route("/toto/update", name="...")
     */
    public function update(...) {
        ...
        // mise à jour en DB
        ...
        // code html à renvoyer
        $html = "<div>...</div>";
     
        return $html;
    }

    Côté client :

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function changeListener(){
        $("#Selector").slideDown().load("/toto/update", {
            id: $(this).closest('tr').find('#abs_id').val(),
            valider: $(this).closest('tr').find('.valider').val()
        });
    }

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut
    Évidemment il faudra un peu modifier mon exemple pour tenir compte de tes paramètres id et valider.

    Donc la route ressemblerait à "/toto/update/{id}/{valider}" ou quelque chose comme ça, et donc côté JS tu dois ajouter les deux valeurs derrière l'URL appelée par load().

    Une autre possibilité est de conserver la route "/toto/update" et l'appel côté JS reste inchangé, par contre côté contrôleur tu injectes l'objet Request en paramètre de l'action et tu récupères les valeurs comme ça :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
     * @Route("/toto/update", name="...")
     */
    public function update(Request $request) {
        $id = $request->get("id");
        $valider = $request->get("valider");
        ...
        ....
    }

  4. #4
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Par défaut
    Salut,
    Merci pour tes réponses, elles m'ont beaucoup aidé.
    Mon Ajax semble bien tourner et appeler la fonction, mais l'insertion en base ne se fait pas.
    Pourtant grâce à symfony je peux analyser les paramètres passés, et ce sont bien les 2 entiers attendus:
    Nom : aaaaaa.png
Affichages : 431
Taille : 15,0 Ko

    Voici ma fonction d'insertion :
    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
     
      public function update(Request $request) {
        try { $bdd = new PDO('mysql:host=localhost;dbname=XXXX', 'XXXX', 'XXXX', array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));}
    		catch (Exception $e) {
    			die('Erreur : ' . $e->getMessage()) ; }
    		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
        $id = $request->get("id");
        $valider = $request->get("valider");
     
        if ($id != NULL){
          $update = $bdd->prepare('UPDATE abscences_justif SET id = :id, valider = :valider WHERE id = :id');
          $update->execute(array(
            'id' => $id,
            'valider' => $valider
              ));
        }
      }
    Peut-être que c'est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $request->get("id");
    qui ne tourne pas? J'ai tenté de faire des "echo", sans succès puisque c'est du côté Controller.
    Merci d'avance

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut
    Au lieu de faire un echo tu peux faire un dd, juste après l'initialisation de tes variables :

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $id = $request->get("id");
    $valider = $request->get("valider");
     
    dd($id, $valider);

    Cela fait un affichage de ces deux variables, et termine l'exécution.
    Ça te permettra de voir si elles contiennent bien les valeurs envoyées par la requête.

  6. #6
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Par défaut
    Merci pour ton retour.
    En effet j'ai vérifié, mes 2 variables sont bien récupérées, pas de doute là dessus.
    J'ai modifié un peu ma fonction pour utiliser le Repository de Symfony.
    Ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      public function updateState(EntityManagerInterface $em, Request $request) {
     
        $id = $request->get("id");
        $valider = $request->get("valider");
        $updatingState = $em->getRepository(AbsencesJustifications::class)->UpdateStateEmargement($em, $id, $valider);
     
        return $updatingState;
      }
    Et la fonction en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public function UpdateStateEmargement($em, $id, $valider)
        {
            return $em->createQuery(
            "UPDATE App\Entity\AbsencesJustifications a 
            SET a.valider = '".$valider."'
            WHERE a.id = '".$id."'
            "
            )->getResult(); 
        }
    Petit hic : mon return me donne l'erreur suivante :
    Nom : error.png
Affichages : 413
Taille : 25,7 Ko
    Ce que je souhaite de ma fonction, c'est simplement qu'elle s'exécute ma fonction (et éventuellement qu'elle me donne un retour côté client pour que j'affiche un span "Tout s'est bien passé").
    Rappel : Je suis sous Symfony 4.2
    Merci d'avance

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

Discussions similaires

  1. appeler un fichier php depuis un fichier javascript
    Par freddy000 dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2011, 11h10
  2. Appel en JS d'un fichier PHP depuis page HTML ?
    Par Ehjoe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/08/2009, 13h22
  3. Appel fichier PHP depuis page HTML
    Par luc1310 dans le forum Langage
    Réponses: 5
    Dernier message: 03/10/2008, 15h17
  4. Exécuter un fichier PHP depuis un .bat
    Par zalalus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 26/11/2007, 13h44
  5. [PHP-JS] Appeler du PHP depuis l'HTML
    Par blanchonvincent dans le forum Langage
    Réponses: 5
    Dernier message: 14/11/2007, 08h10

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