Refresh combo en gardant les donnees

renauddero Messages postés 14 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 19 juillet 2006 - 6 juil. 2006 à 14:12
renauddero Messages postés 14 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 19 juillet 2006 - 7 juil. 2006 à 10:11
Bonjours,
je suis actuellement en stage pour un groupe franco-roumaine.
Mon premier projet est un site web permettant la gestion de pipeline.
Mais je me heurte a un probleme la :
Il y a 2 combobox qui doivent etre linked. C'est-a-dire que en selectionnant le materiaux du pipeline, la page s'actualise et la seconde combo affiche les diametre disponible dans ce type de materiaux.
J'ai essaye  avec une fonction refresh en javascript que j'appel lorsque on change la valeur de la premiere combo.
Mais tout s'efface et sa n'affiche rien.

Avez vous une idee pour m'aider?
Si il faut je pourrait afficher des parties du codes en question.
Merci d'avance.

7 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 juil. 2006 à 14:27
0
renauddero Messages postés 14 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 19 juillet 2006
6 juil. 2006 à 14:50
Merci mais moi les donnes sont dans une base de donne.

Le premier combo a des donnees constante mais le deuxieme doit aller
chercher des donnees dans differentes field selon la premiere combo!

De plus, ce script ne permet pas de garder les autres informations ( si
on rajoute des textarea,..)! Mais pour ce second probleme je pense que
je m' y prend mal.

Merci quand meme.

D'autre idees?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 juil. 2006 à 15:16
Le script est adaptable à une base de données...j'utilise un tableau par soucis de portabilité. Mais qu'on cherche dans un tableau ou dans une bdd pour mettre à jour la liste, ça ne change rien...
Ensuite, le script garde toutes les informations...dans sa version non xmlhttp, pour la simple et bonne raison que le formulaire est soumis...donc, les champs saisis sont envoyés, donc récupérables.
Pour faire de même avec la version xmlhttp, il suffit d'externaliser le traitement php qui va mettre à jour la liste déroulante : bref, le mettre dans une autre page que celle du formulaire.
Là encore, le script est un exemple. Ce n'était pas pratique de scinder en plusieurs fichiers.
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
6 juil. 2006 à 15:20
moi j ai utilisé ce que malalam t'a filé et je parcourt des tables pour remplir mes listes selon le choix de l'utilisateur. Et c'est la seule possibilité pour mettre a jour sans recharger la totalité de la page.
--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
6 juil. 2006 à 15:28
bon allez je t envoie ce que j ai fait donc !
tu devras modifier les cible de fichier et evidement le code.
pour ma part j ai 2 select fixe puis 2 select non fixe voici le code

affect.php

<?php
require('config.php');
require('../lib/mysql.lib.php');
$db=new DoliDb($type='mysql', $host, $user, $pass, $name);
if(((!isset($_POST["id_service"])) && (empty($_POST["id_service"]))) && (!isset($_POST["id_entite"])) && (empty($_POST["id_entite"]))){
   
    $bEmploye=false;
    $bService=false;
   
    echo '<script type="text/javascript" src="../js/refresh_affect.js"></script>';
   
    echo '<form method="post" action="trait_affect.php">';
   
    $sSql='SELECT * FROM '.$prefixe.' ldap_mysql';
    $rResult = $db->query($sSql);
    if($rResult){
        echo '<select name="id_employe">';
        while ($row = mysql_fetch_assoc($rResult)){
            if($row["valid"]==1){
                echo '<option value="'.$row["id"].'">'.$row["ldap_auth"].'</option>';
                $bEmploye=true;
            }
        }
        echo '</select>';
    }
    else{
        echo 'Aucun Employ&eacute;';
    }
    if($bEmploye==true){
        $sSql='SELECT * FROM '.$prefixe.' service';
        $rResult = $db->query($sSql);
        if($rResult){
            echo '<select name="id_service" onchange="search(\'divEntite\',\'id_service=\'+this.options[this.selectedIndex].value+\'\');">';
            while ($row = mysql_fetch_assoc($rResult)){
                echo '<option value="'.$row["id_service"].'">'.$row["nom_service"].'</option>';
                $bService=true;
            }
            echo '</select>';
        }
        else{
            echo 'Aucun Service;';
        }
    }
}
if((isset($_POST["id_service"])) && (!empty($_POST["id_service"]))){
    $sSql='SELECT * FROM '.$prefixe.' entite WHERE id_service='.$_POST["id_service"];
    $rResult = $db->query($sSql);
    if($rResult){
        echo '<select name="id_entite" onchange="search(\'divPoste\',\'id_entite=\'+this.options[this.selectedIndex].value+\'\');">';
        while ($row = mysql_fetch_assoc($rResult)){
            echo '<option value="'.$row["id_entite"].'">'.$row["nom_entite"].'</option>';
            $bEntite=true;
        }
        echo '</select>';
    }
    else{
        echo 'Aucune Entite';
    }
   
}
else{
    echo '

';
}

if((isset($_POST["id_entite"])) && (!empty($_POST["id_entite"]))){
        $sSql='SELECT * FROM '.$prefixe.' poste WHERE id_entite='.$_POST["id_entite"];
        $rResult = $db->query($sSql);
        if($rResult){
            echo '<select name="id_poste"';
            while ($row = mysql_fetch_assoc($rResult)){
                echo '<option value="'.$row["id_poste"].'">'.$row["nom_poste"].'</option>';
            }
            echo '</select>';
            echo '';
        }
        else{
            echo 'Aucun Poste';
        }
}
else{
    echo '

';
}

echo '</form>';
 ?>

refresh_affect.js

if(document.all) {
    // Internet Explorer => on instancie l'objet xmlhttp
    var obj = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
    // Mozilla => on instancie l'objet xmlhttp
    var obj = new XMLHttpRequest();
}

function search(location,data){
    var content=document.getElementById(location);

obj.open("POST", '../interface/affect.php'); // on indique quelle page php va servir pour traiter le formulaire, on indique aussi par quelle methode (post)

    obj.onreadystatechange = function() { // fonction selon l'etat de la requete        if (obj.readyState 4 && obj.status 200) // la requete est prete
            content.innerHTML = obj.responseText; // dans ce cas, on affiche le resultat retourne par la page php dans le conteneur
    }
    obj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // header
    obj.send(data); // on envoie la requete
}

PS bon bidouillage

--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie
0
renauddero Messages postés 14 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 19 juillet 2006
6 juil. 2006 à 15:40
Merci beaucoup a tous. Je vais voir si j'arrive a m'en sortir avec ca.
Et merci d'avoir repondu si vite.
Bonne fin de journee a tous. Je vous tien au courant ;-)
0
renauddero Messages postés 14 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 19 juillet 2006
7 juil. 2006 à 10:11
Bon alors j'ai arranger la source, j'ai modifier ce qui m'interressai et j'ai ajouter des petites condition. Je me retrouve avec cela :

<?php
    require('db.php');   
    echo '<script type="text/javascript" src="refresh_affect.js"></script>';



    echo '<form id="form1" method="post" action="trait_affect.php">';
    mysql_select_db($database_conn, $conn);  
    $sSql='SELECT DISTINCT material FROM diametre';
    $rResult = mysql_query($sSql, $conn);
    if($rResult){
        echo '<select name="material" onchange="search(\'diametre=\'+this.options[this.selectedIndex].value+\'\');">'; 
        echo "<option value=''>Selectii</option>";
        while ($row = mysql_fetch_assoc($rResult)){
         switch ($row["material"]) {
         case OT : echo '<option value="'.$row["material"].'">Otel</option>';
         break;
         case PE : echo '<option value="'.$row["material"].'">Polietilena</option>';
         break;
         }
        }
        echo '</select>';
    }
    else{
        echo 'no material;';
    }
if((isset($_POST["material"])) && (!empty($_POST["material"]))){
    $sSql='SELECT inch, exteriorDiameter FROM diametre WHERE material='.$_POST["material"];
    $rResult = mysql_query($sSql, $conn);
    if($rResult){
        echo '<select name="inch" onchange="search(\'diametre=\'+this.options[this.selectedIndex].value+\'\');">';
        while ($row = mysql_fetch_assoc($rResult)){
        if ($_POST["material"]=='PE') {
            echo '<option value="'.$row["ID"].'">'.$row["inch"].'</option>';
        } else {
            echo '<option value="'.$row["ID"].'">'.$row["exteriorDiameter"].'</option>';
        }
        }
        echo '</select>';
    }
    else{
        echo 'no diametre';
    }   
} else {
    echo '

';
}
echo '</form>';
 ?>

Mais le refresh ne se fait pas. J' ai pense a un probleme avec le js, mais je ne trouve pas.
Avez vous des idees?
Merci
0
Rejoignez-nous