Bonjour,

Voila j'aimerais avoir votre avis, j'ai une liste déroulante, et lorsque je sélectionne un élément, plutôt que de devoir rafraichir ma page en cause d'un submit, j'aimerais stocker la valeur dans une variable SESSION en jouent avec le onchange.

Le problème c'est que je maitrise pas dutout l'ajax alors je ne vois pas trop comment m'y prendre.

j'ai quand même bossé avant de venir poster, voila vers quoi je me suis tournai, dites moi si pour vous c'est la meilleur solution ou s'il y a plus simple.

$('#critereSelect1').onchange(function(){

                    var link = 'suggestOption.php';

                    var critere = $('#critereSelect1').val();

                    $.post(link, {critere: critereSelect1},
                    function(data){
                        if(data!=null)
                        {

                            $('#critereSelect1').html(data);

                        }

                    });

            });

Ce code permet de récupérer la valeur sur le onchange et de redirigé vers ma page suggestOption qui test le POST.

Voicie le code de ma page suggest :

session_start();
require "localization.php";
if (isset($_GET'lang'])) {
    $_SESSION'langue'] = $_GET'lang'];
    header("Location: " . $_SERVER'PHP_SELF']);
}

if ($_SESSION'langue'] == "fr_FR") {
    if (!empty($_POST'critere1'])) {
        $critere1 = strip_tags($_POST'critere1']);
  $_SESSION'critere1'] = $critere1;

        }
}

Bien entendue ce code marche pas :) sinon je ne posterais pas, alors si ma solution est la bonne quelqu'un saurait'il ou est mon erreur ?

Au cas ou voici le code de mon select:

<form id="CritereSelec" action="usine.php" AUTOCOMPLETE ="OFF" method="post">
                <select name="critere1" id = "critereSelect1" style="width: 98px;" ><option>Aucun<option>Vannes<option>Brides<option>Joints de pompe<option>Connecteurs</select>
                <input type="button" class="submit" id="submit_login" style="width:30px;"value="<?php echo _("Ok"); ?>" />
            </form>

Merci d'avance :)

3 réponses


iluzzion
Auteur
Réponse acceptée

Bon voila j'ai réussit en faisant comme indiqué au dessus, je vous m'est le code avec explication si jamais quelqu'un peut être intéresse.

Donc dans ma page usine.phh, je crée un formulaire avec diverses options:

<form id="CritereSelec" action="suggestOption.php" method="post">
  <select name="critere1" id = "critereSelect1" style="width: 98px;" ><option>Aucun<option>Vannes<option>Brides<option>Joints de pompe<option>Connecteurs</select>
  <input type="button" class="submit" id="submit_login" style="width:30px;"value="<?php echo _("Ok"); ?>" />
  </form>

Plus bas dans ma page je crée une div vide qui contient une form:

<div id="tableau2">
                <form id="resultatSelec" action="suggestOption.php" method="post">

            </form>

   </div>

Le but de cet div, est de récupéré le futur résultat de la requête lors de la sélection d'une option.

Voici le code JS permettant de remplir cet div et de l'afficher:

$('#critereSelect1').change(function(){

                    //Lien vers la page dans laquel on va traiter $critere
                    var link = 'suggestOption.php';                   
                    var critere = $('#critereSelect1').val();//on récupère la valeur selectionnée dans le formulaire

                    $.post(link, {critere: critere},//On envoie en post les paramètres requis
                    function(data){
                            //S'il y a des donnés
                        if(data!=null)
                        {
                               //Alors j'affiche ma div qui est vide
                            $('#resultatSelec').show();
                            $('#resultatSelec').html(data);//Et je la remplie

                        }

                    });

                });

Maintenant je vais vous link ma page suggestOption dans laquel je test le post, et exécute une requête pour remplir un tableau:

<?php
session_start();
require('connect.php');
require "localization.php";
if (isset($_GET'lang'])) {
    $_SESSION'langue'] = $_GET'lang'];
    header("Location: " . $_SERVER'PHP_SELF']);
}

if (isset($_POST'critere'])) {
    $critere1 = strip_tags($_POST'critere']);
    $_SESSION'critere1'] = $critere1;

}
?>
 <table class="features-table2"> 
                    <thead>
                        <?php
// if ($_SESSION'langue'] == "fr_FR") {
// $requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite,fuite.Criticite_Fuite
// FROM fuite,equipement 
// WHERE fuite.Id_equipement=Equipement.Id_Equipement
// AND fuite.Id_SIte=:id_site');
//
//
//
// $requete->execute(array(':id_site' => $_SESSION'Id_Site']));
// } else if ($_SESSION'langue'] == "en_US") {
//
// $requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite_Us,fuite.Criticite_Fuite
// FROM fuite,equipement 
// WHERE fuite.Id_equipement=Equipement.Id_Equipement
// AND fuite.Id_SIte=:id_site');
//
//
// $requete->execute(array(':id_site' => $_SESSION'Id_Site']));
// }
                        if ((isset( $_SESSION'critere1'])) && ($_SESSION'langue'] == "fr_FR")) {
                            $requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite,fuite.Criticite_Fuite
                                                       FROM fuite,equipement 
                                                       WHERE fuite.Id_equipement=Equipement.Id_Equipement
                                                       AND fuite.Id_Site=:id_site
                                                       AND fuite.Type_Fuite=:critere');
                            $requete->execute(array(':id_site' => $_SESSION'Id_Site'], ':critere' => $_SESSION'critere1']));
                        } else if ((isset( $_SESSION'critere1'])) && ($_SESSION'langue'] == "en_US")) {
                            $requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite_Us,fuite.Criticite_Fuite
                                                       FROM fuite,equipement 
                                                       WHERE fuite.Id_equipement=Equipement.Id_Equipement
                                                       AND fuite.Id_Site=:id_site
                                                       AND fuite.Type_Fuite=:critere');
                            $requete->execute(array(':id_site' => $_SESSION'Id_Site'], ':critere' => $_SESSION'critere1']));
                        }
                        $resultat = $requete->setFetchMode(PDO::FETCH_ASSOC);
                        echo '<TABLE class="features-table">';
                        echo ' <tr>';
                        echo' <th class="titreTableau">';
                        echo _('Tag');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Module Equipment');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Level Equipment');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Tag Equipment');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Type of Leak');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Leak Description');
                        echo ' </th>';
                        echo' <th class="titreTableau">';
                        echo _('Leak Criticality');
                        echo ' </th>';
                        echo ' </tr>';
                        ?>
                    </thead>
                    <h1 style="text-align:center"><?php echo _('Leaks AKPO'); ?></h1>
                    <tbody>
                        <?php
                        foreach ($requete as $resultat) {

                            echo ' <tr>';
                            echo ' <td>';
                            echo '<a href="contact.php?Tag=' . $resultat'Id_Fuite'] . '"><img src="images/feuille.png" style="position:relative; margin-top:10px; padding-right:3px;"> </a>' . $resultat'Id_Fuite'] . ' ';
                            echo ' </td>';
                            echo ' <td>';
                            echo $resultat'Module_Equipement'];
                            echo ' </td>';
                            echo ' <td>';
                            echo $resultat'Niveau_Equipement'];
                            echo ' </td>';
                            echo ' <td>';
                            echo $resultat'Tag_Equipement'];
                            echo ' </td>';
                            echo ' <td>';
                            echo $resultat'Type_Fuite'];
                            echo ' </td>';
                            echo ' <td>';
                            if ($_SESSION'langue'] == "fr_FR") {
                                echo $resultat'Description_Fuite'];
                            } else if ($_SESSION'langue'] == "en_US") {
                                echo $resultat'Description_Fuite_Us'];
                            }
                            echo ' </td>';
                            echo ' <td>';
                            echo $resultat'Criticite_Fuite'];
                            echo ' </td>';
                            echo ' </tr>';
                        }
                        ?>

                    </tbody>
                </table>

Voila comme ça vous avez un aperçu :).

Pourquoi après le retour ajax tu fais
$('#critereSelect1').html(data);
?

iluzzion
Auteur

En effet il sert a rien, bon j'ai un peu avancer, mais mon problème c'est qu'en fait je suis pas complétement allé au bout de mon raisonnement, du coup il me encore un peu de boulot avant que ça marche comme je le souhaite.

JE vous explique, donc j'ai un bouton avec diverses option et je veut que lors de la sélection d'une option ma requête qui se fait dans la même page change et soit exécutée avec ce critère en plus.

Voila tous les tests que je faisait :

if ($_SESSION'langue'] == "fr_FR") {
$requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite,fuite.Criticite_Fuite
FROM fuite,equipement 
WHERE fuite.Id_equipement=Equipement.Id_Equipement
AND fuite.Id_SIte=:id_site');

$requete->execute(array(':id_site' => $_SESSION'Id_Site']));
                        } 
else if ($_SESSION'langue'] == "en_US") {
$requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite_Us,fuite.Criticite_Fuite
FROM fuite,equipement 
WHERE fuite.Id_equipement=Equipement.Id_Equipement
AND fuite.Id_SIte=:id_site');

$requete->execute(array(':id_site' => $_SESSION'Id_Site']));
                        }
if ((isset( $_SESSION'critere1'])) && ($_SESSION'langue'] == "fr_FR")) {
$requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite,fuite.Criticite_Fuite
FROM fuite,equipement 
WHERE fuite.Id_equipement=Equipement.Id_Equipement
AND fuite.Id_Site=:id_site
AND fuite.Type_Fuite=:critere');
$requete->execute(array(':id_site' => $_SESSION'Id_Site'], ':critere' => $_SESSION'critere1']));
                        } 
else if ((isset( $_SESSION'critere1'])) && ($_SESSION'langue'] == "en_US")) {
$requete = $bdd->prepare('SELECT fuite.Id_Fuite,equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Type_Fuite ,fuite.Description_Fuite_Us,fuite.Criticite_Fuite
 FROM fuite,equipement 
 WHERE fuite.Id_equipement=Equipement.Id_Equipement
 AND fuite.Id_Site=:id_site
 AND fuite.Type_Fuite=:critere');
 $requete->execute(array(':id_site' => $_SESSION'Id_Site'], ':critere' => $_SESSION'critere1']));
 }

Et le problème de ce code c'est qu'en fait de base on va rentré dans une des boucles sans le paramètre critère vu qu'au chargement de la page rien n'est sélectionné, donc si je ne me trompe pas, je vais devoir faire tous ce code dans ma page suggestOption qui est appelée en Ajax pour construire mon tableau lors de l'appel.

Sinon en gardant le code comme ça, après la sélection d'une option je suis obligé de rafraichir ma page pour voir le résultat.