[RESOLU] recupérer valeur liste deroulante sur la même page

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] recupérer valeur liste deroulante sur la même page

par Invité » 28 juil. 2006, 01:49

Tu fait un script en Java Script
du style
<SCRIPT LANGUAGE="JavaScript">function ChangeValeur(formulaire){ ... }</SCRIPT>
Puis dans ton select
<select size="1" onChange="ChangeValeur(this.form)" name="Liste">
Voilà ... apres tu met ce que tu veux .... et grâce à ta fonction en JavaScript, tu récupere ta valeur et tu l'envoie pour affichage

:)

par sabine45 » 16 mai 2006, 16:45

en effet, ça marche.
merci à tous


bonne fin de journée

par sadeq » 16 mai 2006, 16:41

j'ai essayé avec ton code, mais ça ne maffiche rien du tout, j'ai une page blanche, avec le code modifier grace a vos commentaires j'ai plus que le probleme avec la liste deroulante qui se reinitialise.
onChange="document.location.href='grcpt2.php?matgc=' + this.options[this.selectedIndex].value;">"; 
J'ai effacé par erreur un print ($ld), tu dois pouvoir le remettre à sa place.

Ou bien je te le fait, tiens :
<html> 
<head> 

<title>Les grands comptes</title> 
<script language="javascript"> 
function choisir(truc, truc2, truc3, truc4) 
{ 
window.opener.document.enreg.mat.value= truc; 
window.opener.document.enreg.gc.value= truc2; 

self.close();} 

</script> 
<style type="text/css"> 
<!-- 
.Style1 {font-family: Tahoma} 
--> 
</style> 
</head> 
<body> 

<span class="Style1"> 
<?php 

include_once("connexion.php"); 
    
?> 

</span> 
<p align="left" class="Style1">&nbsp;</p> 
<form name="enreg" method="GET" > 
<?php 
$Req = mysql_query("SELECT nom_gc, matricule_gc FROM grand_compte where nom_gc<>''ORDER BY nom_gc"); 

//Le nom de la liste est matgc, onChange le matricule sera envoyé dans $_GET["matgc"] 
$ld = "<SELECT NAME='matgc' onChange='enreg.submit();'>"; 
$ld .= "<OPTION VALUE=0>Choisissez</OPTION>"; 
// On boucle sur la table 
// + sélectionner l'option déjà choisie 
while ( $row = mysql_fetch_array($Req)) { 
    $nom = $row["nom_gc"]; 
    $mat = $row["matricule_gc"]; 
    $option_selected = ($_GET["matgc"] && $mat == $_GET["matgc"]) ? " SELECTED " : ""; 
    $ld .= "<OPTION VALUE='$mat'  $option_selected>$nom</OPTION>"; 
} 
$ld .= "</SELECT>"; 

//Afficher la liste
print ($ld);
?> 
</form> 
<?php 

if ($_GET["matgc"]) { ?> 
<p align="left" class="Style1">&nbsp;    </p> 
<p class="Style1"></p> 
<p class="Style1"></p> 
<table width="100%"  border="1"> 
  <tr align="center" valign="middle"> 
    <td width="9%" class="Style1">Matricule du site </td> 
    <td width="17%" class="Style1">Adresse</td> 
    <td width="6%" class="Style1">Code postal </td> 
    <td width="21%" class="Style1">Ville</td> 
  </tr> 
<?php 

// on crée la requête SQL 
//+ Filtrage par matgc reçu de la liste des matricules 
$reqsql2 = mysql_query("SELECT `lieux`.`matricule_lieux`, `lieux`.`ad_rue_lieux`, `cp_ville`, `ville`, `nom_gc`, lieux.site 
from `lieux`, `ville`, `grand_compte` 
where `grand_compte`.`matricule_gc`=`lieux`.`matricule_gc` 
and `lieux`.`code_ville`=`ville`.`code_ville` 
and `lieux`.`matricule_gc`='$grcpt' order by `ville` 
and `grand_compte`.`matricule_gc` = '$_GET[matgc]' 
"); 

while ($rep = @mysql_fetch_object($reqsql2)) { 
            $mat = $rep->matricule_lieux; 
            $ad = $rep->ad_rue_lieux; 
            $cp = $rep->cp_ville; 
            $vil = $rep->ville; 
            $gc = $rep->nom_gc; 
              $sit= $rep->site; 
?> 
    
  <tr align="center" valign="middle"> 
    
    <td class="Style1"><a href="#" onClick="javascript:choisir('<?php echo $mat; ?>' , '<?php echo $gc; ?>' , '<?php echo $ad." ".$cp." ".$vil ?>', '<?php echo $sit; ?>' )" ><?php echo $mat; ?></a></td> 
    <td class="Style1"><?php echo $ad ?></td> 
    <td class="Style1"><?php echo $cp ?></td> 
    <td class="Style1"><?php echo $vil ?></td> 
  </tr> 

<?php 
} 
?> 
</table> 
<?php 
} 
?> 
<div align="center" class="Style1"></div> 
</body> 
</html>

par timide » 16 mai 2006, 16:17

Si tu utilise sa:
onChange="document.location.href='grcpt2.php?matgc=' + this.options[this.selectedIndex].value;\">";
$option_selected = ($_GET["matgc"] && $mat == $_GET["matgc"]) ? " SELECTED " : "";
 
par ça:
$option_selected = ($_REQUEST["matgc"] && $mat == $_REQUEST["matgc"]) ? " SELECTED " : "";
Et je pense que ça doit marcher!

par sabine45 » 16 mai 2006, 15:56

j'ai essayé avec ton code, mais ça ne maffiche rien du tout, j'ai une page blanche, avec le code modifier grace a vos commentaires j'ai plus que le probleme avec la liste deroulante qui se reinitialise.
onChange=\"document.location.href='grcpt2.php?matgc=' + this.options[this.selectedIndex].value;\">"; 

par sadeq » 16 mai 2006, 15:50

Je viens de lire ton code et compris ce que tu veux faire :
je t'ai déjà conseillé d'utiliser un submit dans onChange, je reconfirme mais pour que ta requête prenne en compte le matricule sélectionné il faut ajouter dans le where une condition qui lui correspond.

Voici, un corrigé de ton code qui charge la 2° requête selon le matricule choisi dans la liste et tout ce passe sur la même page.
Sans oublier de rappeler à l'utilisateur le matricule déjà choisi bien sûr.
<html> 
<head> 

<title>Les grands comptes</title> 
<script language="javascript"> 
function choisir(truc, truc2, truc3, truc4) 
{ 
window.opener.document.enreg.mat.value= truc; 
window.opener.document.enreg.gc.value= truc2; 

self.close();} 

</script> 
<style type="text/css"> 
<!-- 
.Style1 {font-family: Tahoma} 
--> 
</style> 
</head> 
<body> 

<span class="Style1"> 
<?php 

include_once("connexion.php"); 
   
?> 

</span> 
<p align="left" class="Style1">&nbsp;</p> 
<form name="enreg" method="GET" > 
<?php 
$Req = mysql_query("SELECT nom_gc, matricule_gc FROM grand_compte where nom_gc<>''ORDER BY nom_gc"); 

//Le nom de la liste est matgc, onChange le matricule sera envoyé dans $_GET["matgc"]
$ld = "<SELECT NAME='matgc' onChange='enreg.submit();'>"; 
$ld .= "<OPTION VALUE=0>Choisissez</OPTION>"; 
// On boucle sur la table 
// + sélectionner l'option déjà choisie
while ( $row = mysql_fetch_array($Req)) { 
    $nom = $row["nom_gc"]; 
    $mat = $row["matricule_gc"]; 
    $option_selected = ($_GET["matgc"] && $mat == $_GET["matgc"]) ? " SELECTED " : "";
    $ld .= "<OPTION VALUE='$mat'  $option_selected>$nom</OPTION>"; 
} 
$ld .= "</SELECT>"; 

?> 
</form> 
<?php 

if ($_GET["matgc"]) { ?> 
<p align="left" class="Style1">&nbsp;    </p> 
<p class="Style1"></p> 
<p class="Style1"></p> 
<table width="100%"  border="1"> 
  <tr align="center" valign="middle"> 
    <td width="9%" class="Style1">Matricule du site </td> 
    <td width="17%" class="Style1">Adresse</td> 
    <td width="6%" class="Style1">Code postal </td> 
    <td width="21%" class="Style1">Ville</td> 
  </tr> 
<?php 

// on crée la requête SQL 
//+ Filtrage par matgc reçu de la liste des matricules
$reqsql2 = mysql_query("SELECT `lieux`.`matricule_lieux`, `lieux`.`ad_rue_lieux`, `cp_ville`, `ville`, `nom_gc`, lieux.site 
from `lieux`, `ville`, `grand_compte` 
where `grand_compte`.`matricule_gc`=`lieux`.`matricule_gc` 
and `lieux`.`code_ville`=`ville`.`code_ville` 
and `lieux`.`matricule_gc`='$grcpt' order by `ville`
and `grand_compte`.`matricule_gc` = '$_GET[matgc]'
"); 

while ($rep = @mysql_fetch_object($reqsql2)) { 
            $mat = $rep->matricule_lieux; 
            $ad = $rep->ad_rue_lieux; 
            $cp = $rep->cp_ville; 
            $vil = $rep->ville; 
            $gc = $rep->nom_gc; 
              $sit= $rep->site; 
?> 
   
  <tr align="center" valign="middle"> 
   
    <td class="Style1"><a href="#" onClick="javascript:choisir('<?php echo $mat; ?>' , '<?php echo $gc; ?>' , '<?php echo $ad." ".$cp." ".$vil ?>', '<?php echo $sit; ?>' )" ><?php echo $mat; ?></a></td> 
    <td class="Style1"><?php echo $ad ?></td> 
    <td class="Style1"><?php echo $cp ?></td> 
    <td class="Style1"><?php echo $vil ?></td> 
  </tr> 

<?php 
} 
?> 
</table> 
<?php 
} 
?> 
<div align="center" class="Style1"></div> 
</body> 
</html>

par sabine45 » 16 mai 2006, 15:41

Bon la premiere marche ça m'affiche bien les enregistrement dans le tableau, par contre la liste deroulante s'initialise. Et se met sur choissisez, vous savez d'ou cela vient ?
merci

par timide » 16 mai 2006, 15:16

Pour sa 1er solution je verait plutot sa :
$ld = "<SELECT NAME='grcpt' onChange=\"document.location.href='grcpt2.php?matgc=' + this.options[this.selectedIndex].value;\">"; 
Pour la 2e sa:
<form name="enreg" action="grcpt2.php" method="post" >
Mais je me trompe peut etre!

par sabine45 » 16 mai 2006, 14:58

j'ai essayé les deux méthodes,
la première ça ne me marque pas de message d'erreur mais fonctionne pas
la deuxième, quand je choisi un enregistrement reinitialise aussitot la liste et reviens sur choississez

par sadeq » 16 mai 2006, 14:41

dans ton onChange t'as oublié la propriété "href" de "location" :
corrigé :
....
$ld = "<SELECT NAME='grcpt' onChange='document.location.href='grcpt2.php?matgc=' + this.options[this.selectedIndex].value;'>";
...
Mais avec ça tu réinvente un submit pour rien. tu peux déclencher le submit par onChange sans demander un chargement par "location.href" puisque t'as un formulaire.
Corrigé:
<form name="enreg" method="post" > 
<?php 
....
....
$ld = "<SELECT NAME='grcpt' onChange='enreg.submit();'>"; 
....
....

par sabine45 » 16 mai 2006, 14:36

bon pour lerreur , jai effacer la ligne et ça n e me marque plus lerreur mais ça ne fonctionne toujours pas.
Donc j'ai refais la premiere solution et le message d'erreur est ligne 33 objet attendu

ligne 33 c'est juste après include_once("connexion.php");

par sabine45 » 16 mai 2006, 14:21

<html>
<head>

<title>Les grands comptes</title>
<script language="javascript">
function choisir(truc, truc2, truc3, truc4)
{ 
window.opener.document.enreg.mat.value= truc;
window.opener.document.enreg.gc.value= truc2;

self.close();}

function Changevaleur() // l'attribut n'est pas utilisé, alors pourquoi le garder ? :)
{
// certains navigateur n'acceptent pas l'accès direct au value d'un select il vaut donc mieux suivre le dom pour préciser que l'on veut la valeur de l'option choisie :
    var matgc = document.enreg.grcpt.options[document.enreg.grcpt.selectedIndex].value;

    window.location.href = "grcpt2.php?matgc="+matgc;
}
</script>
<style type="text/css">
<!--
.Style1 {font-family: Tahoma}
-->
</style>
</head> 
<body>

<span class="Style1">
<?php

include_once("connexion.php");
  
?>

</span>
<p align="left" class="Style1">&nbsp;</p>
<form name="enreg" method="post" action="">
<?php
 $Req = mysql_query("SELECT nom_gc, matricule_gc FROM grand_compte where nom_gc<>''ORDER BY nom_gc"); 
 $ld = "<SELECT NAME='grcpt' onChange='document.location='grcpt2.php?matgc=' + this.options[this.selectedIndex].value;'>";
$ld .= "<OPTION VALUE=0>Choisissez</OPTION>";
// On boucle sur la table
while ( $row = mysql_fetch_array($Req)) {
    $nom = $row["nom_gc"];
    $mat = $row["matricule_gc"];
    $ld .= "<OPTION VALUE='$mat'>$nom</OPTION>";
}
$ld .= "</SELECT>";
?>
<?php
print $ld;;
 if(isset($_GET['matgc']))
{$matgc=$_GET['matgc'];
} 
?>
</form>
<?php

if ($matgc <> '') { ?>
<p align="left" class="Style1">&nbsp;    </p>
<p class="Style1"></p>
<p class="Style1"></p>
<table width="100%"  border="1">
  <tr align="center" valign="middle">
    <td width="9%" class="Style1">Matricule du site </td>
    <td width="17%" class="Style1">Adresse</td>
    <td width="6%" class="Style1">Code postal </td>
    <td width="21%" class="Style1">Ville</td>
  </tr>
<?php

// on crée la requête SQL
$reqsql2 = mysql_query("SELECT `lieux`.`matricule_lieux`, `lieux`.`ad_rue_lieux`, `cp_ville`, `ville`, `nom_gc`, lieux.site
from `lieux`, `ville`, `grand_compte`
where `grand_compte`.`matricule_gc`=`lieux`.`matricule_gc`
and `lieux`.`code_ville`=`ville`.`code_ville`
and `lieux`.`matricule_gc`='$grcpt' order by `ville`");



while ($rep = @mysql_fetch_object($reqsql2)) {
			$mat = $rep->matricule_lieux;
    		$ad = $rep->ad_rue_lieux;
    		$cp = $rep->cp_ville;
    		$vil = $rep->ville;
    		$gc = $rep->nom_gc;
  			$sit= $rep->site;
?>
  
  <tr align="center" valign="middle">
  
    <td class="Style1"><a href="#" onClick="javascript:choisir('<?php echo $mat; ?>' , '<?php echo $gc; ?>' , '<?php echo $ad." ".$cp." ".$vil ?>', '<?php echo $sit; ?>' )" ><?php echo $mat; ?></a></td>
    <td class="Style1"><?php echo $ad ?></td>
    <td class="Style1"><?php echo $cp ?></td>
    <td class="Style1"><?php echo $vil ?></td>
  </tr>

<?php
}
?>
</table>
<?php
}
?>
<div align="center" class="Style1"></div>
</body>
</html>

j'ai changé quelque trucs sans importance.

j'ai testé aussi la derniere solution de Ryle mais toujours l'erreur d'afficher

quand j'ai double cliquer ça m'affiche :

certains problèmes pourraient empêcher cette page Web de s'afficher ou de fonctionner correctement.
après ça m'affiche un problème de syntaxe ligne 37
et ligne 37 j'ai :
<p align="left" class="Style1">&nbsp;</p>

par timide » 16 mai 2006, 13:50

Tu peux nous envoyer ton code stp (html + javascript)
Merci

par Ryle » 16 mai 2006, 13:49

Tu dois pouvoir l'essayer comme ça aussi, mais je ne pense pas que cela change grand chose :

Code : Tout sélectionner

<select ... onChange="document.location='nomdetapage.php?mat=' + this.options[this.selectedIndex].value;">
sinon renvoi nous un p'tit bout de code que l'on voit ce que tu as fait :)

(quand tu double-clic sur le point d'exclamation lorsqu'il y a une erreur javascript, il devrait t'afficher une boite avec le(s) message(s) d'erreur.. ca peut être interessant d'y jeter un coup d'oeil également :))

par sabine45 » 16 mai 2006, 13:44

bon je sais je commence a être chiante!!!
donc j'ai essayer les 2 méthodes la premiere, ça me met un petit panneau orange avec le point dexclamation (erreur quoi) donc ça ne marche pas. Et la deuxieme, ça me fait rien du tout.
De plus ça ne m'envoie pas la valeur dans l'url