xmlhttprequest : au secours !

Eléphanteau du PHP | 43 Messages

23 mars 2007, 11:19

Bonjour,

je me bats depuis 2 jours avec cette technique intéressante mais complexe pour moi qui ne connais pas vraiment javascript.

voici ce que je veux obtenir : dans un formulaire, j'ai 2 menus : un menu établissements, un menu psychologues. Quand je sélectionne un établissement, je voudrais que le psychologue attaché à cet établissement soit automatiquement sélectionné dans le second menu. Je mets ça sous forme de menu parce que l'utilisateur doit pouvoir modifier le choix du psycho (il y a des cas où c'est nécessaire). J'ai fait ci-dessous un test que je vous soumets, car il ne marche pas. J'avoue avoir recopié des trucs sans tout comprendre ...

Si vous pouvez m'éclairer, ou me signaler des pistes pour piger tout ça, je veux bien (j'ai déjà épluché le tuto de toutjavascript, mais je trouve qu'il est fait pour les bêtes de code !)

Merci d'avance
Corinne M

Voici le code de la page html principale :

<html>
<head>
<script>
function requestmenu(form)
{
var liste1 = form.elements["menuEtb"];
var liste2 = form.elements["menuPsy"];
var index = liste1.selectedIndex;

var xhr_object = null;
xhr_object = new XMLHttpRequest(); // appli à usage interne : je ne teste que sous firefox pour l'instant
xhr_object.open("POST", "menuderoulant.php", true);
xhr_object.onreadystatechange = function anonymous() {
if(xhr_object.readyState == 4)
eval(xhr_object.responseText);
}
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = "etb="+escape(menuEtb.options[index].value)+"&form="+f.name+"&select=menuPsy";
xhr_object.send(data);
}
}
</script>
</head>

<body>
<form class="CenteredForm" name="formulaire" id="formulaire" action="" method="" onsubmit="return false;">
<fieldset>
<div class="Left">Etablissement :
<select name="menuEtb" id="menuEtb" class="ButtonL" onchange="requestmenu(this.form)">
<option value="" selected="selected"></option>
<!-- menu simplifié et en dur pour le test : 5 villes, avec leur ID dans la base de données comme valeur -->
<option value="1">rennes</option>
<option value="2">vannes</option>
<option value="3">nantes</option>
<option value="4">brest</option>
<option value="5">angers</option>
</select>
&nbsp;&nbsp;&nbsp;Psychologue :
<select name="menuPsy" id="menuPsy" class="ButtonL">
<!-- menu psychologues -->
<option value="" selected="selected"></option>
<option value="1">durand</option>
<option value="2">dupont</option><br />
<option value="3">dugenou</option>
</select>
</div>

</fieldset></form>
</body>
</html>

voici le code de la page "menuderoulant.php" qui traite la requête :

<?
// ça sert à quoi ce header ?
header('Content-type: text/html; charset=iso-8859-1');

// ici je mets ce qu'il faut pour me connecter à la base de donénes

// je cherche l'établissement dont l'id est transmis en paramètre
// je pourrai ainsi récupérer l'id du psycho attaché à cet établissement
$query = "SELECT * FROM `etablissements` WHERE `etb_ID` = '".$_POST["etb"]."'";
$result = mysql_query($query);

// pourquoi des echo ?
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';

// pour simplifier l'exemple je considère que la base de données a renvoyé 1 établissement et qu'il n'y a pas d'erreur
$ligne = mysql_fetch_array($result);

// et là, SVP que dois-je mettre pour demander à modifier la sélection du menuPsy ?
// j'ai vu des ex où on alimentait entièrement un menu, mais rien pigé : sais pas comment adapter
// je veux que dans menuPsy soit select la ligne correspondant à l'ID du psy concerné

mysql_close();

?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mars 2007, 17:23

Modération :
cmils, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


Quant à ton problème, tu peux jeter un coup d'oeil au tutoriel sur les listes déroulantes liées disponible dans le forum FAQ.

Sinon et pour répondre à quelques une de tes interrogations :
// ça sert à quoi ce header ?
header('Content-type: text/html; charset=iso-8859-1');
A dire dans quel jeu de caractères se trouvent les informations affichées. Par exemple un charset anglais ne gère pas les accents, ces caractères seraient interprétés différement..
// pourquoi des echo ?
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';
Tu es en train de générer du code javascript avec php, les echo insereront ce code dans ta page :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 43 Messages

15 mai 2007, 16:04

OK merci !
- je vais regarder de près la manière de citer du code.
- Pour le reste, je vais éplucher le post de forum indiqué.

Merci pour les suggestions
Corinne

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 09:44

Par exemple un charset anglais ne gère pas les accents, ces caractères seraient interprétés différement..
T'es sur de ca ?
Il ont des accents pourtant en anglais... :-/

lem
Eléphant du PHP | 108 Messages

21 mai 2007, 10:06

Bouh ! :arrow:
Lem.