Page 1 sur 1

Envoyer deux variables avec une liste

Posté : 26 févr. 2008, 11:46
par pat
Bonjour,

Mon formulaire envoie à l'aide d'une liste déroulante la variable prod = $row_listeproduitunique['id_produit'] mais je voudrais aussi envoyer la variable nomprod = $row_listeproduitunique['produit'] pour avoir le nom du produit dans l'adresse afin d'améliorer le référencement de la page.

Comment dois je faire?
Ci dessous le code de la liste

<form name="form3" method="get" action="guide/choix-guide.php">
          <select name="prod" size="8" class="liste" id="prod" onChange="document.form3.submit()">
            <option value="<?php echo $row_choixproduit['NumProd']; ?>" style="font-weight: bold; text-align:center; color:red; background-color:white"><?php echo $row_choixproduit['produit']; ?></option>
            <?php
do {  
?>
            <option value="<?php echo $row_listeproduitunique['id_produit']?>"><?php echo $row_listeproduitunique['produit']?></option>
            <?php
} while ($row_listeproduitunique = mysql_fetch_assoc($listeproduitunique));
  $rows = mysql_num_rows($listeproduitunique);
  if($rows > 0) {
      mysql_data_seek($listeproduitunique, 0);
	  $row_listeproduitunique = mysql_fetch_assoc($listeproduitunique);
  }
?>
          </select>
          <input name="acti" type="hidden" id="acti" value="<?php echo $row_choixactivite['id_activite']; ?>">
          <input name="cate" type="hidden" id="cate" value="<?php echo $row_choixcategorie['id_categorie']; ?>">
          <input name="region" type="hidden" id="region3" value="<?php echo $row_choixregion['ID_Region']; ?>">
        </form>

Posté : 26 févr. 2008, 11:54
par d0m
Salut,

tu peux ajouter un champ caché contenant le nom et avec dans le nom l'id du produit :
<option value="<?php echo $row_choixproduit['NumProd']; ?>" style="font-weight: bold; text-align:center; color:red; background-color:white"><?php echo $row_choixproduit['produit']; ?></option>
<INPUT TYPE="hidden" NAME="nom_produit_<?php echo $row_choixproduit['NumProd'];?>" VALUE="<?php echo $row_choixproduit['produit']; ?>"
Et ainsi récupérer dans la prochaine page le nom correspondant à l'id du produit selectionné.

Posté : 26 févr. 2008, 12:25
par pat
Mon problème est que $row_listeproduitunique['id_produit'] est une liste de produit et lorsque je click un de ces produits je lance le formulaire avec prod = $row_listeproduitunique['id_produit'] et prod et le nom de la liste. Si je met un champs masqué à la fin la valeur produit = $row_listeproduitunique['produit'] n'obtient pas de valeur car seul la liste connait la valeur selectionnée.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 26 févr. 2008, 12:32
par h0_noMan
Il faut que tu stockes ton tableau $row_listeproduitunique['produit'] dans un ttableau javascript et a chaque onClick sur la liste tu modifie la valeur d'un champ hidden en fonction de l'ID du produit.

Posté : 26 févr. 2008, 12:34
par pat
Il faut que tu stockes ton tableau $row_listeproduitunique['produit'] dans un ttableau javascript et a chaque onClick sur la liste tu modifie la valeur d'un champ hidden en fonction de l'ID du produit.
Alors ça je ne sais pas faire. Je ne sais pas programmer en javascript

Posté : 26 févr. 2008, 12:59
par Xvider
Je ne suis pas non plus un expert mais tu doit pouvoir faire ceci aussi.

Tu remarquera que j'ai viré le form vu que j'envoie les infos différemment via "AJAX".

Après les vrai pros vont surement nous confirmer si ça marche bien et si c'est vraiment adapté.
<select name="prod" size="8" class="liste" id="prod" onchange="submitOnSelect(<?php echo $row_listeproduitunique['produit']; ?>)">
  <option value="<?php echo $row_choixproduit['NumProd']; ?>" style="font-weight: bold; text-align:center; color:red; background-color:white"><?php echo $row_choixproduit['produit']; ?></option>
  <?php
		do 
		{
	    echo("<option value=\"".$row_listeproduitunique['id_produit']."\">".$row_listeproduitunique['produit']."</option>");
		} 
		while ($row_listeproduitunique = mysql_fetch_assoc($listeproduitunique));
		$rows = mysql_num_rows($listeproduitunique);
		if($rows > 0) 
		{
			mysql_data_seek($listeproduitunique, 0);
			$row_listeproduitunique = mysql_fetch_assoc($listeproduitunique);
		}
	?>
</select>
<input name="acti" type="hidden" id="acti" value="<?php echo $row_choixactivite['id_activite']; ?>"/>
<input name="cate" type="hidden" id="cate" value="<?php echo $row_choixcategorie['id_categorie']; ?>"/>
<input name="region" type="hidden" id="region3" value="<?php echo $row_choixregion['ID_Region']; ?>"/>

<div id="contenu"></div>

<script>
//code de mise en place des fonctionnalités de remise à jour
	function getXhr(){

		var xhr=null;
		if(window.XMLHttpRequest){  // test pour navigateurs Mozilla
			xhr = new XMLHttpRequest();
		}else{
			if(window.ActiveXObject){ // test pour Internet Explorer
				try{
					xhr = new ActiveXObject("Msxml2.XMLHTTP");
				} 
				catch (e) {
					xhr = new ActiveXObject("Microsoft.XMLHTTP");
				}
			}else{ // XMLHttpRequest non supporté
				alert("Votre navigateur ne supporte pas les objets XMLHttpRequest");
				xhr = false;
			}
		}
		return xhr;
	}

		function submitOnSelect(produit)
	{
		var xhr = getXhr(); // on récupère l'objet XMLHttpRequest

                xhr.onreadystatechange = function()
		{
			if(xhr.readyState == 4 && xhr.status == 200)
			{ //on attend la fin de transmission
				contenuSelect = xhr.responseText;

				//On met à jour la page
				document.getElementById('contenu').innerHTML = contenuSelect;
			}
		}
		
		idproduit = document.getElementById('prod').value;
		acti = document.getElementById('acti').value;
		cate = document.getElementById('cate').value;
		region = document.getElementById('region').value;
	
		//on désigne la page contenant le code de remplissage
		xhr.open("POST","guide/choix-guide.php",true); 
		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		
		//on envoie la requête
		xhr.send("idproduit="+idproduit+"&nomprod="+produit+"&acti="+acti+"&cate="+cate+"&region="+region);
	}
</script>

Posté : 26 févr. 2008, 13:18
par pat
Je ne suis pas non plus un expert mais tu doit pouvoir faire ceci aussi.

Tu remarquera que j'ai viré le form vu que j'envoie les infos différemment via "AJAX".

Après les vrai pros vont surement nous confirmer si ça marche bien et si c'est vraiment adapté.
<select name="prod" size="8" class="liste" id="prod">
  <option value="<?php echo $row_choixproduit['NumProd']; ?>" style="font-weight: bold; text-align:center; color:red; background-color:white"><?php echo $row_choixproduit['produit']; ?></option>
  <?php
		do 
		{
	    echo("<option value="".$row_listeproduitunique['id_produit']."" onclick="submitOnSelect(".$row_listeproduitunique['produit'].")">".$row_listeproduitunique['produit']."</option>");
		} 
		while ($row_listeproduitunique = mysql_fetch_assoc($listeproduitunique));
		$rows = mysql_num_rows($listeproduitunique);
		if($rows > 0) 
		{
			mysql_data_seek($listeproduitunique, 0);
			$row_listeproduitunique = mysql_fetch_assoc($listeproduitunique);
		}
	?>
</select>
<input name="acti" type="hidden" id="acti" value="<?php echo $row_choixactivite['id_activite']; ?>"/>
<input name="cate" type="hidden" id="cate" value="<?php echo $row_choixcategorie['id_categorie']; ?>"/>
<input name="region" type="hidden" id="region3" value="<?php echo $row_choixregion['ID_Region']; ?>"/>
<script>
//code de mise en place des fonctionnalités de remise à jour
	function getXhr(){

		var xhr=null;
		if(window.XMLHttpRequest){  // test pour navigateurs Mozilla
			xhr = new XMLHttpRequest();
		}else{
			if(window.ActiveXObject){ // test pour Internet Explorer
				try{
					xhr = new ActiveXObject("Msxml2.XMLHTTP");
				} 
				catch (e) {
					xhr = new ActiveXObject("Microsoft.XMLHTTP");
				}
			}else{ // XMLHttpRequest non supporté
				alert("Votre navigateur ne supporte pas les objets XMLHttpRequest");
				xhr = false;
			}
		}
		return xhr;
	}

		function submitOnSelect(produit)
	{
		var xhr = getXhr(); // on récupère l'objet XMLHttpRequest
		
		idproduit = document.getElementById('prod').value;
		acti = document.getElementById('acti').value;
		cate = document.getElementById('cate').value;
		region = document.getElementById('region').value;
	
		//on désigne la page contenant le code de remplissage
		xhr.open("POST","guide/choix-guide.php",true); 
		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		
		//on envoie la requête
		xhr.send("idproduit="+idproduit+"&nomprod="+produit+"&acti="+acti+"&cate="+cate+"&region="+region);
	}
</script>
Désolais mais ça na marche pas. Il ne se passe rien quand je clic sur un produit.

Posté : 26 févr. 2008, 13:57
par Berzemus
un onclick sur les options d'un select ?

Un simple onchange sur le select fait plus que bien son boulot, et ça enlève pas mal de complications.

Posté : 26 févr. 2008, 14:00
par Xvider
j'ai édité mon code précédent en rajoutant ce qu'il manquait dans ce cas pour afficher le contenu de ton autre page dans ta page actuel en fonction du choix dans la combo

Posté : 26 févr. 2008, 14:04
par d0m
Ok j'avais pas vu que c'était pour le référencement.

En PHP pur, tu ne pourras pas à moins d'avoir une liste où l'on sélectionne également le nom du produit.
Il faudra passer par du javascript.
C'est pas grand chose, il suffit comme l'a dit Pat de changer la valeur d'un champ caché.
<INPUT TYPE="hidden" ID="nom_produit_selectionne" NAME="nom_produit_selectionne" VALUE="">
<select name="prod" size="8" class="liste" id="prod" onChange="changerListe(idProduit);">

Code : Tout sélectionner

function changerListe(idProduit){ document.getElementById['nom_produit_selectionne'].value = nomDuProduit[idProduit]; document.form3.submit(); }

Posté : 26 févr. 2008, 15:21
par pat
J' ai ce message d'erreur

Parse error: parse error, unexpected T_STRING, expecting ')' in c:\program files\easyphp1-7\www\guidelabo2\tmpwfbngwukwb.php on line 250

J'ai inclus ton code de la manière suivante mais je ne suis pas sur d'avoir bien fait
<form name="form3" method="get" action="guide/choix-guide.php">
          <INPUT TYPE="hidden" ID="nom_produit_selectionne" NAME="nom_produit_selectionne" VALUE="">
		  <select name="prod" size="8" class="liste" id="prod" onChange="changerListe(idProduit);">
           <?php  function changerListe(idProduit){
  document.getElementById['nom_produit_selectionne'].value = nomDuProduit[idProduit];
  document.form3.submit();
} ?>
			<option value="<?php echo $row_choixproduit['NumProd']; ?>" style="font-weight: bold; text-align:center; color:red; background-color:white"><?php echo $row_choixproduit['produit']; ?></option>
            <?php
do {  
?>
            <option value="<?php echo $row_listeproduitunique['id_produit']?>"><?php echo $row_listeproduitunique['produit']?></option>
            <?php
} while ($row_listeproduitunique = mysql_fetch_assoc($listeproduitunique));
  $rows = mysql_num_rows($listeproduitunique);
  if($rows > 0) {
      mysql_data_seek($listeproduitunique, 0);
	  $row_listeproduitunique = mysql_fetch_assoc($listeproduitunique);
  }
?>
          </select>
          <input name="acti" type="hidden" id="acti" value="<?php echo $row_choixactivite['id_activite']; ?>">
          <input name="cate" type="hidden" id="cate" value="<?php echo $row_choixcategorie['id_categorie']; ?>">
          <input name="region" type="hidden" id="region3" value="<?php echo $row_choixregion['ID_Region']; ?>">
        </form>


Posté : 26 févr. 2008, 15:28
par h0_noMan
changerListe() doit etre une fonction javascript donc entre les balises <SCRIPT></SCRIPT>.

Posté : 26 févr. 2008, 19:10
par pat
Tout compte fait j'ai préféré passer par une page intermédiaire qui me permet en plus de transformer mes caractères afin qu'ils soit affichés correctement dans l'URL.
<?php require_once('../Connections/connectgl.php'); 
$colname_selectprod = "3";
if (isset($_GET['prod'])) {
  $colname_selectprod = (get_magic_quotes_gpc()) ? $_GET['prod'] : addslashes($_GET['prod']);
}
mysql_select_db($database_connectgl, $connectgl);
$query_selectprod = sprintf("SELECT * FROM t_produit WHERE NumProd = %s", $colname_selectprod);
$selectprod = mysql_query($query_selectprod, $connectgl) or die(mysql_error());
$row_selectprod = mysql_fetch_assoc($selectprod);
$totalRows_selectprod = mysql_num_rows($selectprod);
function retireAccents($txt) {
  $masque = "[?!]";
  $txt = eregi_replace($masque, "", $txt);

  $masque = "[àâä@]";
  $txt = eregi_replace($masque, "a", $txt);

  $masque = "[éèêë€]";
  $txt = eregi_replace($masque, "e", $txt);

  $masque = "[ïì]";
  $txt = eregi_replace($masque, "i", $txt);

  $masque = "[ôö]";
  $txt = eregi_replace($masque, "o", $txt);

  $masque = "[ùûü]";
  $txt = eregi_replace($masque, "u", $txt);

  $masque = "[ç]";
  $txt = eregi_replace($masque, "c", $txt);

  $masque = "[&]";
  $txt = eregi_replace($masque, "et", $txt);

  $masque = " +";
  $txt = eregi_replace($masque, "-", $txt);
  
  $masque = "[°]";
  $txt = eregi_replace($masque, "-", $txt);

  return(strtolower($txt));
  }

$produit=$row_selectprod['produit'];
$produit=retireAccents($produit);
$cate=$_GET['cate'];
$prod=$_GET['prod'];
$acti=$_GET['acti'];
$region=$_GET['region'];
$url = "http://www.guidelabo.com/guide/choix-guide.php?produit=$produit&acti=$acti&prod=$prod&cate=$cate&region=$region";
header("location: $url"); 
mysql_free_result($selectprod);
?>