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] Passage de variables PHP à travers requête AJAX


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut [AJAX] Passage de variables PHP à travers requête AJAX
    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 :
    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>
    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
     
    <?php
    header('Content-Type: text/html; charset=UTF-8'); 
     
    echo "alert('Script lance');"; 
     
    ?>
    Fonctions JavaScript
    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; 
    }

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Tu veux faire quoi exactement? Simplement retirer les projets de l'affichage, ou en parallèle aller les supprimer/modifier dans la bdd?

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Juste les retirer de l'affichage. Là c'est la page de présentation accessible aux visiteurs qui s'amusent à cocher/décocher pour n'afficher que ce qui les intéresse. Il n'y a que de la lecture de base de données. Donc ils peuvent être encore présent dans le code HTML au pire, du moment que l'utilisateur ne le voit pas dans le rendu final.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut,
    Si c'est juste pour afficher ou masquer, il suffit de jouer sur la propriété display de l'élément concerné, pas besoin d'Ajax
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Est ce que tu pourrais préciser ? Car j'ai du mal a voir... Je veux dire, si chaque projet n'avait qu'une catégorie, je pourrais mettre une class CSS portant le nom de la catégorie sur des div entourant les projets et les mettre en "display: none;" quand la catégorie est décochée.

    Le soucis, c'est que certains projets appartiennent à plusieurs catégories, et il faut donc que toutes les catégories référées soient décochées pour que le projet disparaissent. Du coup, il faut qu'au moment où je décoche une catégorie, j'aille voir quelques sont les autres catégories déjà décochées pour en déduire quels projets laisser et quels projets masquer.

    J'avoue que je suis parti sur de l'Ajax / PHP, mais bon, si ca peut se faire autrement, tant mieux. Mais je vois pas trop comment m'en sortir avec juste display là...

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/10/2009, 17h51
  2. [AJAX] passage de variable
    Par ano74 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/07/2007, 08h36
  3. [AJAX] Passage de variable avec espace blanc et insecam
    Par ascito dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/07/2007, 11h51
  4. [AJAX] Passage de variable en ajax
    Par carlatocer dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/02/2007, 14h46

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