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

AJAX Discussion :

[AJAX] Ajouter un critère à un filtre


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut [AJAX] Ajouter un critère à un filtre
    Bonjour à tous,

    J'ai des input text, lorsque je tape un caractère dans une de ces inputs, j'appelle une fonction :

    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
     
    function filtre(secteur)
    {
        //je selectionne le table dont l'id est table_de_selection
    	var tableau = document.getElementById('table_de_selection');
    	//je selectionne les inputs de ce table
    	var zonedetexte = tableau.getElementsByTagName('input');
    	var valeurs_inputs = '';
    	var id_inputs = '';
    	var tableau_data={};
     
    	//je cree mon tableau associatif en javascript
    	// tableau_data[zonedetexte[z].id] ==> la cle 
    	// zonedetexte[z].value ==> la valeur
    	for(z=0;z<6;z++)
    	{
    		tableau_data[zonedetexte[z].id] = trim(zonedetexte[z].value);
     
    	}
    	//transforme un tableau js en une string json
    	var to_send = JSON.stringify(tableau_data);
    En plus de ces input text, j'ai une liste de sélection (select).

    J'aimerais simplement ajouter le critère choisi par la liste déroulante dans la chaine sql qui ressemble à ceci si j'encode la lettre e dans l'input nom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT societes.*, societes_secteurs.id AS Tss_id, societes_secteurs.ID_societe, societes_secteurs.ID, societes_secteurs.ID_secteur, secteurs.id AS Ts_id, secteurs.denomination, secteurs.numero FROM societes JOIN societes_secteurs ON societes.id = societes_secteurs.ID_societe JOIN secteurs ON secteurs.numero = societes_secteurs.ID_secteur WHERE Nom LIKE 'e%'
    Les noms de la table sociétés commençant par 'e' s'afficheront alors à l'écran.

    Voici le code de ma liste déroulante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php 
                                                                                                                                            include('includes/connexion.php');
                                                                                                                                            echo '<select size=1 id="sel_secteurs" onchange="filtre(this.value);">'."\n";
                                                                                                                                            echo '<option value="-1">--Choisissez un secteur--</option>'."\n";
                                                                                                                                            $result = mysql_query("SELECT * FROM secteurs");
                                                                                                                                            while($data =  mysql_fetch_array($result))
                                                                                                                                            {
                                                                                                                                                    $secteur_string = utf8_encode($data['denomination']);
                                                                                                                                                    echo '<option value="'.$data[2].'">'.$secteur_string.'</option>';
                                                                                                                                            }
                                                                                                                                            echo '</select>'."\n";
                                                                                                                                            //mysql_close();
                                                                                                                                    ?>
    Je voudrais donc pouvoir rechercher les sociétés dont le nom commencent pas "e" par exemple ET dont le secteur est par exemple la comptabilité.

    Voici le code PHP au cas où cela serait utile :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    <?php
    include('../includes/connexion.php');
    //session_start();
    //var_dump($_POST);
     
    //transforme le json en tableau associatif (true indique que l'on veut un tableau associatif)
    $ligne = json_decode($_POST['to_send'],true);
     
    //var_dump($ligne);
     
    //$sql = "SELECT * FROM ".$_POST['table']." WHERE ".$_POST['champ']." LIKE '".$_POST['valeur']."%'";
     
    //je cree un tableau nomme array
    $where = array();
    //parcours de mon tableau associatif nomme $ligne
    foreach($ligne as $field => $value) {
            if($value != '') $where[] = "$field LIKE '$value%'";
    }
    //quand le tableau est cree, je l'implose, je le transforme en chaine de caracteres
    $where = implode (' AND ', $where);
    //echo $where;  Nom LIKE 'd%' AND CP LIKE '7%'
    //je peux ensuite utiliser le resultat pour ma chaine sql finale
    //cette requête permet de sélectionner les sociétés et les secteurs par rapport au filtre
    $sql = "SELECT societes.*, societes_secteurs.id AS Tss_id, societes_secteurs.ID_societe, societes_secteurs.ID, societes_secteurs.ID_secteur, secteurs.id AS Ts_id, secteurs.denomination, secteurs.numero FROM societes JOIN societes_secteurs ON societes.id = societes_secteurs.ID_societe JOIN secteurs ON secteurs.numero = societes_secteurs.ID_secteur WHERE $where";
     
    //SELECT * FROM societes INNER JOIN societes_secteurs ON societes.ID = societes_secteurs.ID_societe INNER JOIN secteurs ON secteurs.id = societes_secteurs.id_secteur ";
    echo $sql; 
    $query_filtre = mysql_query($sql);
     
    //si il n'y a pas de résultat avec la requete, j'inclus le formulaire vierge.
    $nbre_resultats = mysql_num_rows($query_filtre);
    if( $nbre_resultats < 1)
    {
            include('../includes/ajout_societé.php');
            return;
    }
     
    $Tableau_Noms_Des_Champs = array();
    //$nombre = mysql_num_rows($query_filtre);
    //si je ne  mets pas ce if, j'ai un warning
    if(!empty($where))
    {
            for($j=0;$j<mysql_num_fields($query_filtre);$j++) 
            { 
               $Tableau_Noms_Des_Champs[] = mysql_field_name($query_filtre, $j); 
            }
    }
     
    $i = 0;
    $n = 0;
    $valeur_originale ="";
    $retour = '<table border="2" style="border-color:#339900;border-style:solid;">'; 
     
    if(!empty($where))
    {
            while($row = mysql_fetch_array($query_filtre,MYSQL_ASSOC)) 
                    {
                            $j=1;
                            $i++;
                            $cible = $row[$Tableau_Noms_Des_Champs[0]];
                            $nom_cible = $Tableau_Noms_Des_Champs[0];
                            //echo 'la cible vaut ' . $cible;
                            $retour.= '<tr><td align="center"><input type="button" value="'.$cible.'" onclick="afficher_remarques(this.value);"/> </td>';
                            foreach($row as $NomCol => $Valeur)
                            {       //je n'affiche que les colonnes nécessaires
                                    if(($NomCol != 'ID')&&($NomCol != 'Tss_id')&&($NomCol != 'ID_societe')&&($NomCol != 'ID_secteur')&&($NomCol != 'Ts_id'))
                                    {
                                            //1 je parts d'ici, je vais dans la fonction update_enregistrement
                                            $retour.= '<td><input type="text" name="new[' . $row['ID'] . '][' . $NomCol . ']" id="new[' . $row['ID'] . '][' . $NomCol . ']" value="'.$Valeur.'" onchange="this.style.backgroundColor = \'yellow\'"';
                                            /*$retour.= '<td><input type="button" name="MAJ" value="MAJ" onclick="document.getElementById(\'new[' . $row['ID'] . '][' . $NomCol . ']\').style.backgroundColor = \'white\', update_enregistrement(document.getElementById(\'new[' . $row['ID'] . '][' . $NomCol . ']\').value,\''.$_POST['table'].'\',\''.$NomCol.'\',\''.$cible.'\',\''.$nom_cible.'\')" /></td>';*/                
                                                    //$retour.= 'onfocus="'.$valeur_originale.'=this.value";alert(\''.$valeur_originale.'\')';
                                            $retour.= '</td>';
                                            $j++;
                                    }       
                            }
                            $retour.= '</tr>';
                    }
    }
     
     
     
    $retour.='</table>';
    echo $retour;
     
    ?>
    Merci d'avance pour votre aide.

    Beegees

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    En fait, il te faut envoyer le value de ton select, donc il faut que le value soit contenu dans ton json si j'ai bien compris.

    Si j'ai bien lu ton code, tu sélectionnes tous tes input, tu récupères ensuite la valeur des 6 premiers input puis tu les mets en json.

    A cela, il te faut ajouter la valeur du ou des select.

    Pour cela, il te faut travailler avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau.getElementsByTagName('select');
    Puis parcourrir les select et récupérer leur valeur à intégrer dans tableau_data

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/02/2008, 10h02
  2. Construire un critère de filtre en utilisant des ComboBox
    Par mary17 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 20/04/2007, 09h19
  3. [AJAX] Ajout input avec valeur venant de XML
    Par zulot dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/02/2007, 12h05
  4. Ajout de critères dans Select utilisé par xp_sendmail
    Par bd0606 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 28/05/2004, 17h02

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