Bonjour,
J'aimerais réaliser une fonction AJAX qui permet de mettre a jour une liste des projets selon que l'on coche ou décoche des checkbox, chacune correspondant a un type de projet. Donc c'est tout bête, par défaut toutes les checkbox sont cochées et tous les projets apparaissent. Si on décoches une checkbox, les projets liés à cette catégorie disparaissent de l'affichage.
Il faut préciser qu'un projet peut avoir plusieurs catégories et dans ce cas toutes les catégories liées à ce projet doivent être décochées pour qu'il disparaisse. Les projets sont stockés dans une base de données MySQL. De même, les catégories sont générées à partir de la base de données (ce qui signifie qu'a tout moment, il suffit d'entrer une nouvelle catégorie en base de données pour que tout le code suive)
Donc je me suis dis que le plus simple, c'était de faire une requete AJAX qui s'enclenche a chaque clic sur une checkbox et appelle un script php qui va lui générer la liste à afficher.
Le soucis, c'est que je ne vois actuellement aucun moyen de savoir quelles checkbox sont cochées et lesquelles sont décochées au sein dudit script... Au départ, j'ai naivement créé un array dans lequel je stocke les id des catégories à afficher. Mais le script php ne peut pas accéder à cette variable.
Seconde idée, j'ai voulu mettre le array dans la variable $_SESSION, mais là encore, il semblerait que le script ne puisse pas accéder a cette variable. Du coup, comme j'ai vaguement l'impression que mon script n'arrive a accéder a rien en dehors de lui même, je me suis senti un peu paumé.
Troisième idée, mettre la variable dans l'appel de la méthode javascript, mais déjà je sais pas faire, et ensuite je saurais pas comment retourner la liste mise à jour.
Donc voila... je suis totalement bloqué et fais appel a une âme charitable qui aurait une idée géniale pour faire en sorte de pouvoir connaitre l'état des ma liste de checkbox au sein de mon script PHP.
Je vous mets ci dessous les petits bouts de code déjà faits, mais je suis pas sur qu'ils soient très utiles dans le fond...
Merci d'avance !
Fichier PHP pour l'affichage :
Fichier PHP 'liste_projets.php' de script (vide ou presque vu que j'ai pas accès aux catégories pour gérer l'affichage... mais l'alert marche correctement !)
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 $stmt_categories = $dbh->prepare("SELECT * FROM ".$name_db.".".$table_categorie." ORDER BY name_".$lang." ASC"); $stmt_categories->execute(); $display_categories = array(); ?> <div id="col_right" class="col_right"> <div class="cr_area"> <h1><?php echo(getMessage('projets_categories',$lang));?></h1> <ul class="projet"> <?php while($row_categorie = $stmt_categories->fetch(PDO::FETCH_ASSOC)) { $display_categories[] = $row_categorie["id"]; echo('<li><input type="checkbox" checked="true" value="'.$row_categorie["id"].'" onchange="javascript:reRenderProjectsCategorie(this.value);"></input>'.$row_categorie["name_".$lang]."</li>"); } ?> </ul> </div> </div> <div id="content" class="content"> <div class="cadre"> <h1><?php echo(getMessage('projets',$lang));?></h1> <div id="liste_projets"> <?php $_SESSION["display_categories"] = $display_categories; $stmt_getCategories = $dbh->prepare("SELECT C.id, C.name_".$lang." FROM ".$name_db.".".$table_lien_projet_categorie." L, ".$name_db.".".$table_categorie." C WHERE L.id_projet = :id AND L.id_categorie = C.id"); $stmt_getProjets = $dbh->prepare("SELECT * FROM ".$name_db.".".$table_projet); $stmt_getProjets->execute(); $isOneProjet = false; while($row_projet = $stmt_getProjets->fetch(PDO::FETCH_ASSOC)) { $projet = new projet($row_projet); $projet->affiche(); $isOneProjet = true; } if(!$isOneProjet) { echo(getMessage("projets_noProjet",$lang)); } ?> </div> </div> </div>
Fonctions JavaScript
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php header('Content-Type: text/html; charset=UTF-8'); echo "alert('Script lance');"; ?>
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 function getXmlHttpObject() { var objXMLHttp = null; if (window.XMLHttpRequest) { objXMLHttp=new XMLHttpRequest(); } else if (window.ActiveXObject) { objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP"); } return objXMLHttp; } function reRenderProjectsCategorie(act) { xmlHttp = getXmlHttpObject(); if (xmlHttp == null) { alert("Votre navigateur ne supporte pas les requêtes HTTP."); return false; } var url_script = 'scripts/liste_projets.php'; xmlHttp.open("POST", url_script, true); xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); xmlHttp.send("id_cat="+act); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") eval(xmlHttp.responseText); } return true; }
Partager