Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/05/2011, 13h14   #1
Membre Expert
 
Avatar de beegees
 
Homme David Vincent (l'homme qui a vu les extra-terrestres)
Développeur Web
Inscription : mars 2004
Messages : 3 239
Détails du profil
Informations personnelles :
Nom : Homme David Vincent (l'homme qui a vu les extra-terrestres)
Âge : 37
Localisation : Belgique

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

Informations forums :
Inscription : mars 2004
Messages : 3 239
Points : 1 046
Points : 1 046
Par défaut 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 :
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 :
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 :
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 :
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
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 17h44   #2
Membre éclairé
 
Homme Damien Attanasio
Développeur informatique
Inscription : février 2007
Messages : 340
Détails du profil
Informations personnelles :
Nom : Homme Damien Attanasio
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2007
Messages : 340
Points : 307
Points : 307
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 :
tableau.getElementsByTagName('select');
Puis parcourrir les select et récupérer leur valeur à intégrer dans tableau_data
madevilts est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h50.


 
 
 
 
Partenaires

Hébergement Web