Page 1 sur 1
Affichage d'un résultat selon l'option dynamqiuement choisi
Posté : 23 juil. 2008, 09:03
par Cypher_PHP
bonjour
je sollicite vos aides..
je ne trouve pas comment afficher un résultat après avoir choisi l'option dans la liste dynamique
il s'agissait d'afficher les noms d'école après avoir choisi le numéro d'établissement dans la liste.
je pense que c'est lié à un manque d'interactivité donc le java script est indispensable, exact ? sinon?
...
<tr>
<td><span style="font-weight: bold;">RNE de l'établissement </span>: <small><span style="font-style: italic;">le rne ne s'affichera pas sur le livret</span></small></span></td>
<td><SELECT name="list_rne">
<?php
//connexion au serveur de la base
mysql_connect($dbhost, $dblogin, $dbpass)
or die("erreur de connexion au serveur $dbhost");
//connexion à la base de données
mysql_select_db($dbbase) or die("erreur de connexion a la base de donnees");
$sql = "SELECT rne FROM $dbtable2 ";
$query = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while($result=mysql_fetch_array($query)){
echo "<option value=".$result['rne'].">".$result['rne']."</option> ";
}
?>
</SELECT> </td>
</tr>
<tr>
<td><span style="font-weight: bold;">Nom de l'établissement </span>:</td>
<td><textarea cols="50" rows="1" name="<?php
$sql = "SELECT rne, etprco, uaidnc FROM $dbtable2 where rne ='$rne' ";
$query = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$rne = $_POST['rne'] ;
if ($result=mysql_fetch_array($query)) {
echo $result['etprco']." ".$result['uaidnc'];
}
;
?>"></textarea></td>
</tr>
...
merci beaucoup
Posté : 23 juil. 2008, 09:50
par vince_weed
En effet c'est typiquement une action à réaliser en JS.
Le plus simple je pense serai d'appeler une fonction javascript sur un évenement OnChange de ta liste déroulante et de modifier la valeur du textearea dans cette fonction.
Posté : 23 juil. 2008, 13:39
par Invité
oui c'est ce que j'ai pensé et je viens d'ajouter mais ce ne bouge pas donc
il manque encore des éléments mais je ne sais quoi mettre ni où...
voici mon code incomplet:
<?php
include('inc_mysql.php');
?>
<html>
<body>
<table>
<form method="post" action="beta2_result2.php" name="form_livret">
<tr>
<td><span style="font-weight: bold;">RNE de l'établissement </span>: <small><span style="font-style: italic;">le rne ne s'affichera pas sur le livret</span></small></span></td>
<td><SELECT name="list_rne" onchange="this.form.elements['list_rne'].options[this.form.elements['list_rne'].value">
<?php
//connexion au serveur de la base
mysql_connect($dbhost, $dblogin, $dbpass)
or die("erreur de connexion au serveur $dbhost");
//connexion à la base de données
mysql_select_db($dbbase) or die("erreur de connexion a la base de donnees");
$sql = "SELECT rne FROM $dbtable2 ";
$query = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while($result=mysql_fetch_array($query)){
echo "<option value=".$result['rne'].">".$result['rne']."</option> ";
}
?>
</SELECT> </td>
</tr>
<tr>
<td><span style="font-weight: bold;">Nom de l'établissement </span>:</td>
<td><?php
$rne = $_POST['rne'] ;
$sql = "SELECT rne, etprco, uaidnc FROM $dbtable2 where rne ='$rne' ";
$query = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//$rne = $_POST['rne'] ;
$result=mysql_fetch_array($query);
echo $result['etprco']." ".$result['uaidnc'];
?></td>
</tr>
</table>
</form>
</body>
</html>
Posté : 23 juil. 2008, 13:53
par guilt92
Bonjour,
Cela ne pourra pas fonctionner comme cela : si je ne me trompe pas, $rne devrait correspondre à la valeur passée dans la premiere liste ? Sauf que ton $_POST["rne"] ne pourra être récupéré que si il y a un rafraîchissement de la page suite à un submit du formulaire (sur le onChange du select)
Pour faire ce que tu veux tu as 3 possibilités :
* Tout en PHP, inconvénient : la page se rafraichit au moment du choix
* Tout en javascript, inconvénient : il faut stocker toutes les valeurs de ta table dans un tableau en js => performance pas terrible
* En AJAX, idéal mais plus compliqué si tu es débutant
Regarde
le tutorial de Cyrano sur les listes déroulantes liées, qui au final traite du même sujet que ton problème. Il présente les 3 solutions, a toi de voir laquelle tu préfères.
Posté : 23 juil. 2008, 14:27
par Invité
merci beaucoup
je vais étudier et bien sûr je vais prendre PHP 100% malgré leur défaut de performance.
franchement, on ne voit que très peu de différence dans les performances...
merci

Posté : 23 juil. 2008, 14:31
par chrislabricole
Très peu ?? euh... peut-être pas....
C'est plus agréable d'avoir une liste qui change toute seule sans recharger la page que le contraire...
La meilleur des solutions est ajax, après celle que tu as choisie, et la solution tout en javascript
Mais c'est vrai que si t'es débutant, garde ta solution et tu reviendra plus tard sur ça et tu mettras en place AJAX.
Par contre, si t'as le courage et que t'as pas peur, tu peux suivre le tuto de
Cyrano (Lien ci-dessus), il est très fais, les sources sont très très bien commentées, à ce moment là, tu peux les modifier pour l'adapter à se que tu veux faire.

Posté : 23 juil. 2008, 14:33
par guilt92
Petite précision :
C'est la solution javascript qui peut présenter un problème de performance en cas de tables importantes.
La solution php ne pose aucun problème, si ce n'est celui du rafraichissement, et est peut être la plus simple à mettre en oeuvre

Posté : 23 juil. 2008, 14:41
par chrislabricole
Exact, se qui pose problème avec Javascript, c'est surtout le taille du fichier Javascript au final, et le temps d'exécution, avec PHP, c'est le rechargement, et avec AJAX bah... les 2 avantages des 2 sont réunis

Posté : 25 juil. 2008, 10:24
par Cypher_PHP
rebonjour
malheureusement non, je ne connais rien l'AJAX et très peu de JS donc pour l'isntant, je me concentre sur PHP.
j'ai presque réussi : il manque un truc. en fait, quand je clique un rne, le resultat s'affiche mais le problème est que la liste se recharge pour s'initialiser.
donc j'aimerais que le fait de cliquer un rne soit inchangée au moment de l'affichage du résultat
c'est possible??
merci encore
<?php
include('inc_mysql.php');
?>
<html>
<head>
</head>
<body>
<table>
<form method="POST" action="" name="choix_rne" id="choix_rne" >
<tr>
<td><span style="font-weight: bold;">RNE de l'établissement </span>: <small><span style="font-style: italic;">le rne ne s'affichera pas sur le livret</span></small></td>
<td><SELECT name="rne" id="rne" onchange="document.forms['choix_rne'].submit();">
<?php
//connexion au serveur de la base
mysql_connect($dbhost, $dblogin, $dbpass)
or die("erreur de connexion au serveur $dbhost");
//connexion à la base de données
mysql_select_db($dbbase) or die("erreur de connexion a la base de donnees");
$sql = "SELECT rne FROM $dbtable2 order by rne";
$query = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while($result=mysql_fetch_array($query)){
echo "<option value=".$result['rne'].">".$result['rne']."</option> ";
}
mysql_free_result($query);
?>
</SELECT> </td>
</tr>
<tr>
<td><span style="font-weight: bold;">Nom de l'établissement </span>:</td>
<td><?php
$sql2 = "SELECT rne, dept, etprco, uaidnc FROM $dbtable2 WHERE rne = '$rne'";
$query2 = mysql_query($sql2)or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
if($result2=mysql_fetch_array($query2))
{
$rne = $_POST['rne'] ;
echo $result2['etprco']." ".$result2['uaidnc']."( ".$result2['dept']." ) ". $result2['rne']."<br />";
}
mysql_free_result($query2);
?></td>
</tr>
</table>
</form>
</body>
</html>
Posté : 25 juil. 2008, 10:30
par guilt92
Oui, c'est possible
Il te suffit de jouer avec l'attribut selected quand tu crées ta liste rne :
il faut que tu décompose ta création d'option pour faire un truc du genre :
<?php
echo "<option value=".$result['rne'];
if(isset($_POST['rne']) && $result['rne']==$_POST['rne']) echo " selected='selected'";
echo ">........";
?>
Comme ca si la valeur POST et définie et qu'elle correspond à une option du select, elle sera sélectionnée par défaut

Posté : 25 juil. 2008, 11:18
par Invité
ca marche
merci beaucoup
je comprends mieux
Posté : 25 juil. 2008, 11:19
par Invité
oups désolé c'est moi qui vient de poster. une déconnexion imprévue
à plus
Posté : 25 juil. 2008, 11:20
par Cypher_PHP
oh encore
excuse moi
ces deux derniers messages sont postés par moi
encore désolé