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

PHP & Base de données Discussion :

[Doctrine] Listes déroulantes et JQuery


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Par défaut [Doctrine] Listes déroulantes et JQuery
    Bonjour,

    je me prends la tête depuis plusieurs jours avec JQuery...
    J'ai une page avec un formulaire contenant plusieurs listes déroulantes à mettre à jour en Ajax en fonction des choix effectués par l'utilisateur.

    Je vais limiter l'exemple à 2 listes car j'ai juste besoin de comprendre le principe.

    J'ai deux tables "pays" et "region" avec une association "paysregionville" dont voici les schémas :

    Table pays :

    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
     
    Pays:
      tableName: pays
      columns:
        id:
          type: string(2)
          fixed: true
          primary: true
          autoincrement: true
        nom:
          type: string(45)
        devise_id:
          type: integer(1)
          notnull: true
        volume_id:
          type: integer(1)
          notnull: true
        langue_id: integer(1)
      relations:
        Devise:
          local: devise_id
        Volume:
          local: volume_id
        Langue:
          local: langue_id
    table region:

    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
     
    Region:
      tableName: region
      columns:
        id:
          type: integer(4)
          primary: true
          autoincrement: true
        niveau:
          type: integer(1)
          notnull: true
        nom:
          type: string(165)
          notnull: true
        code:
          type: string(10)
          default: ''
        region_id:
          type: integer(4)
          default: null
      relations:
        Region:
          local: region_id
          foreign: id
          foreignAlias: Regions
    table paysregionville:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Paysregionville:
      tableName: paysregionville
      columns:
        pays_id:
          type: string(2)
          fixed: true
          primary: true
        region_id:
          type: integer(4)
          primary: true
        ville_id:
          type: integer(4)
          primary: true
    Voici mon formulaire avec les listes déroulantes :

    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
     
    <?php use_helper('Object'); ?>
    <?php use_helper('Javascript'); ?>
    <div class="menu">
        <form id="filtres" method="post">
            <span class="filtre">Pays
              <?php
              $liste = '<option value="0"></option>';
              foreach ($pays as $p):
                $liste .= '<option value="'.$p['id'].'">'.$p['nom'].'</option>';
              endforeach;
              echo select_tag('idPays', $liste) ?>
            </span>
            <span class="filtre">Région 1
            <?php echo select_tag('region1', '<option value="0">&nbsp;</option>)') ?>
            </span>
        </form>
    </div>
    Voici le fichier javascript permettant de faire la mise à jour de la liste region1 en fonction de la valeur de la liste pays :

    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
     
    $(document).ready(function(){
      $('#idPays').change(function() { 
        $.ajax({ 
          url: "?????", 
          type: "POST", 
          data: $(this).val(), 
          success: function(regions){ 
            $('#region1').html(regions);
            } ,
            error: function(msg){
              alert("erreur : "+msg);
            }
        });
      });
    });
    Je ne sais pas quoi mettre dans l'URL, j'ai déjà essayé plein de choses mais impossible d'accéder au script PHP que voici :

    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
     
    <?php
    if(isset($_POST['idPays'])) { 
    	$idPays = $_POST['idPays'];
     
      $q = Doctrine_Query::create()
      ->select('r.id AS id, r.nom AS nom')
      ->from('Region r, Pays p, Paysregionville prv')
      ->where('r.id = prv.region_id')
      ->andWhere('p.id = prv.pays_id')
      ->andWhere('r.niveau = ?', 1)
      ->andWhere('p.id = ?', $idPays)
      ->orderBy('r.nom');
     
      $aRegions1 = $q->fetchArray();
     
    	if(is_array($aRegions1) && count($aRegions1) > 0) {
     
    	  foreach($aRegions1 as $region) { 
    	    echo '<option value="'.$region['id'].'">'.$region['nom'].'</option><br />'; 
    	  }
    	} else {
    	  echo '<option>Aucune r&eacute;gion de premier niveau dans ce pays</option>'; 
    	}
    } else { 
      echo '<option>Impossible de trouver la liste des r&eacute;gions</option>'; 
    }
    ?>
    Voici où se situent les différents fichiers :

    formulaire:
    C:\wamp\www\mc2\apps\moderation\modules\mfStations\templates\indexSuccess.php

    script javascript:
    C:\wamp\www\mc2\web\js\region1.js

    script PHP:
    C:\wamp\www\mc2\apps\moderation\modules\mfStations\actions\getRegions1.ajax.php
    ça fait presque une semaine que je me bats avec ça sans obtenir de résultat et je commence sérieusement à désespérer...
    Merci d'avance à celui qui saura m'aider!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Salut, ne desepere pas tu vas tres certainement trouver une solution ici.

    Intuitivement je dirais que tu dois placer dans ton appel ajax le nom de l'action.
    un truc de ce genre:
    /moderation.php/mfStations/getRegions

    je ne comprends pas ton fichier getRegions1.ajax.php, tu devrais normalement avoir une method getRegions dans ton fichier actions.php

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 117
    Par défaut
    Alors la je ne peux pas reelement t'aider... Juste deux choses :

    Tu as le plugin sfFormExtraPlugin qui gère ca... Tu as un bon tuto pour savoir comment l'utilisé...

    La deuxième chose... Quand tu fais appel à de l'ajax en symfony, tu peux le faire comme si tu utiliser une url, avec ton nom de module, et ton action. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          	$j.ajax({
            	type: "POST",
            	url: "/utilisateur/getPassword",
            	data : "exPassword="+value,
            	success:function(data){
    						if(data==1)
    						{
       ....
    Ensuite dans ton module/actions, tu fais du genre :

    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
      public function executeGetPassword(sfWebRequest $request)
      {
      	$password = $request->getParameter('exPassword');
     
     		$user = $this->getUser();
     
     		$bonPassword = $user->checkPassword($password);
     
     		if($bonPassword != '')
     			echo 1;
     		else
     			echo 0; 
     
      	return sfView::NONE;
      }
    Voila en espérant que cela t'as un peu aidé pour avancer.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Par défaut
    Bonjour,

    merci pour vos réponses.

    j'ai trouvé ce qu'il fallait mettre dans l'URL j'obtiens bien un résultat mais le problème maintenant est que ma liste déroulante ne contient qu'un élément...

    J'ai créé une fonction executeGetRegions1 dans action.class.php que voici :

    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 executeGetRegions1()
      {
        if(isset($_POST['idPays'])) { 
          $idPays = $_POST['idPays'];
     
          $q = Doctrine_Query::create()
          ->select('r.id AS id, r.nom AS nom')
          ->from('Region r, Pays p, Paysregionville prv')
          ->where('r.id = prv.region_id')
          ->andWhere('p.id = prv.pays_id')
          ->andWhere('r.niveau = ?', 1)
          ->andWhere('p.id = ?', $idPays)
          ->orderBy('nom');
     
          $this->aRegions1 = $q->fetchArray();
        }
      }
    Mon template qui s'appelle maintenant getRegions1Success.php contient ça :

    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
     
    <?php
        if(isset($aRegions1)) {
        // echo '<option>'.var_dump($aRegions1).'</option>';
        if (count($aRegions1) > 0) {
          foreach($aRegions1 as $region) { 
            echo '<option value="'.$region['id'].'">'.$region['nom'].'</option>'; 
          }
        } else {
          echo '<option>Aucune r&eacute;gion de premier niveau dans ce pays</option>'; 
        }
      } else {
        echo 'erreur';
      }
    ?>
    Ma liste déroulante se charge bien mais n'affiche que le premier élément retourné par la requête....
    Lorsque j'exécute la requête dans PHPMyAdmin ça me retourne bien tous les résultats...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Par défaut
    Je vais devenir fou!

    lorsque je fais : $this->aRegions1 = $q->count();

    $aRegions1 vaut 2 (ce qui est normal)

    et lorsque je fais : $this->aRegions1 = $q->fetchArray();

    count($aRegions1) vaut 1...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    C'est bien un count($this->aRegions1) que tu as fait ?
    et non pas un count($aRegions1)

    Je vais devenir fou!
    lorsque je fais : $this->aRegions1 = $q->count();
    $aRegions1 vaut 2 (ce qui est normal)
    et lorsque je fais : $this->aRegions1 = $q->fetchArray();
    count($aRegions1) vaut 1...

Discussions similaires

  1. Liste déroulante avec JQuery [bug Firefox]
    Par Cyck Simons dans le forum jQuery
    Réponses: 3
    Dernier message: 26/11/2012, 21h23
  2. Créer une liste déroulante avec jquery et json
    Par beegees dans le forum jQuery
    Réponses: 2
    Dernier message: 30/04/2012, 11h46
  3. Réponses: 4
    Dernier message: 20/01/2012, 19h46
  4. Réponses: 0
    Dernier message: 09/03/2009, 19h01

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