Affichage du scénario sélectionné dans la liste

Fermé
AMARI - 27 mai 2013 à 10:39
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 - 27 mai 2013 à 15:04
Bonjour ,
j'adresse à vous pour m'aider , en fait j'ai ma page scenario.php le but c'est dés que l'user sélectionne un titre de la liste déroulante il l'affiche tout les données liées à ce titre que se trouve dans la BD, pour le moment mon code il m'affiche le liste déroulante avec le 2 exemple que j'ai saisi mais quand je sélectionne rien ni afficher ( pour expliquer mieux normalement dans la page précédente j'ai un formulaire à remplir et je l'enregistre sous un titre que va apparaître par la suite dans ma page scenario.php) mon but c'est quand je sélectionne sur un de ce titre comme je l'ai dit il m'affiche tous le valeurs lié à ce titre sélectionné.
mon problème c'est que je ne sais pas qu'est ce que je fais dans la partie affichage du scénario sélectionné dans la liste voilà mon code , quelqu'un de vous peux m'aider merci d'avance:
code PHP :

<?php
require_once('dbconnect.php');
?>
<?php
$msg_enr_modifs="";
//init compteurs
$nb_insert=0;
$nb_update=0;
$nb_delete=0;

//

//// -- partie enregistrement des modifs scénario ----
if(isset($_POST['enr_modifs'])){
//le bouton enr modifs a été cliqué
// la il faut faire un update des enr mois existants si modif valeurs, ou un insert si mois nouveaux ou un delete si suppression de valeur (but)
//c'est un peu complexe, il faut mémoriser les anciennes valeurs dans des champs input pour chaque mois type="hidden" name="old_P....
//recup des valeurs postées
$Id_user=$_POST['Id_user'];
$cof_eau_du_sol = $_POST['cof_eau_du_sol'];
$niv_de_debordement = $_POST['niv_de_debordement'];
$taux_concentration = $_POST['taux_concentration'];
$pour_etanchite = $_POST['pour_etanchite'];
$niv_depart = $_POST['niv_depart'];
$sal_sol = $_POST['sal_sol'];
$but = $_POST['but'];
$choix_sortie = $_POST['choix_sortie'];
$origine_iragation = $_POST['origine_iragation'];
$sal_eau_entre = $_POST['sal_eau_entre'];
$condition_climatique = $_POST['condition_climatique'];
$annee = $_POST['annee'];
//$Mois = $_POST['Mois'];
$titre=$_POST['titre'];
$commentaire=$_POST['commentaire'];


//on UPDATE d'abord dans la table valeurs_a_saisir les modifs éventuelles de titre et commentaire
$sql_1="UPDATE valeurs_a_saisir SET titre='".$titre."',commentaire='".$commentaire."' WHERE id_scenario='".$id_scenario."'";
$requete1 = $db->query($sql_1) ;

//puis Update ou insert ou Delete dans table valeurs

//on parcours l'array $arrayMois
//foreach($arrayMois as $mois=>$but){ // toujours qd j'ajout la partie mois pour le but
// 3 cas: ajout, modif, supression
if(empty($cof_eau_du_sol) && empty($niv_de_debordement) && empty($taux_concentration)&& empty($pour_etanchite)&& empty($niv_depart)
&& empty($sal_sol)&& empty($but)&& empty($choix_sortie)&& empty($origine_iragation)&& empty($sal_eau_entre)&& empty($condition_climatique)){
//les champs ne sont pas vides mais étaient vides avant, c'est un ajout donc INSERT
$sql='insert into valeurs_a_saisir(Id_user, cof_eau_du_sol, niv_de_debordement, taux_concentration, pour_etanchite, niv_depart, sal_sol, but, choix_sortie, origine_iragation, sal_eau_entre, condition_climatique, annee, Mois, titre, commentaire) values ( "'.$_SESSION['Id_user'].'", "'.$cof_eau_du_sol.'", "'.$niv_de_debordement.'", "'.$taux_concentration.'", "'.$pour_etanchite.'", "'.$niv_depart.'", "'.$sal_sol.'", "'.$arraybut[$mois].'", "'.$choix_sortie.'", "'.$origine_iragation.'", "'.$sal_eau_entre.'", "'.$condition_climatique.'", "'.$annee.'", "'.$Mois.'","'.$titre.'","'.$commentaire.'")';
$requete = $db->query($sql) ;//or die( mysql_error() );

}
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_insert++;

//}

//un ou les champs ont eté modifiés, donc UPDATE
$sql="UPDATE valeurs_a_saisir SET cof_eau_du_sol='".$cof_eau_du_sol."', niv_de_debordement='".$niv_de_debordement."' taux_concentration='".$taux_concentration."'pour_etanchite='".$pour_etanchite."'niv_depart='".$niv_depart."'sal_sol='".$sal_sol."'but='".$arraybut[$mois]."'choix_sortie='".$choix_sortie."'origine_iragation='".$origine_iragation."'sal_eau_entre='".$sal_eau_entre."'condition_climatique='".$condition_climatique."'annee='".$annee."' WHERE Id_user ='".$Id_user."' AND mois='".$mois."'";
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_update++;
if(empty($cof_eau_du_sol) && empty($niv_de_debordement) && empty($taux_concentration)&& empty($pour_etanchite)&& empty($niv_depart)
&& empty($sal_sol)&& empty($but)&& empty($choix_sortie)&& empty($origine_iragation)&& empty($sal_eau_entre)&& empty($condition_climatique)){
//les champs sont vides mais n'étaient pas vides avant, c'est une suppression de valeurs donc DELETE
$sql="DELETE FROM valeurs_a_saisir WHERE Id_user ='".$Id_user."'";
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_delete++;

}
}
//message du nombre d'enr dans la BDD
$msg_enr_modifs='<font color="green">';
if($nb_insert>0) $msg_enr_modifs.=$nb_insert." ajout de lignes de valeurs<br />";
if($nb_update>0) $msg_enr_modifs.=$nb_update." lignes de valeurs modifiées<br />";
if($nb_delete>0) $msg_enr_modifs.=$nb_delete." lignes de valeurs suprimées<br />";
$msg_enr_modifs.='</font>';



///// ---------------------
////----- Partie recherche des scenari pour cet utilisateur --------
//recup id_utilisateur dans la variable de session
$Id_user = (isset($_SESSION['Id_user'])) ? $_SESSION['Id_user'] : null;
if ($Id_user != null){
if(isset($_POST['liste_scenario'])){
$scenario=$_POST['liste_scenario'];
} else {
$scenario="";
}

//si il y un ou des scénario, on affiche la page avec la liste déroulante
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<title>ESPACE PRIVE </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="styles.css" rel="stylesheet" type="text/css">
<style type="text/css">
.input_mois {
background-color:#A9AEAD;
text-align:center;
}
</style>
</head>
<body>
<br> <br>
<p align="center" class="titre"><strong>- : : : Vos scénari : : : -</strong></p>
<p align="center">
<form name="form_liste" id="15" method="POST" action="">
<select name="liste_scenario" onchange="submit();">
<option value="">-- Choisissez un scénario --</option>

<?php

$strSQL = "SELECT * FROM valeurs_a_saisir WHERE valeurs_a_saisir.Id_user = $Id_user";

$res2 = $db->query($strSQL);

while($row= mysqli_fetch_array($res2)){
$fd = $row['titre'];
echo "<option value='
'>".$fd."</option>"; // ici je ne sais pas quoi mettre dans le value
}
?>
</select>
</form>
Ou <a href="valeur.php">Saisir un nouveau scénario</a><br />

</p>
<?php

//affichage du message éventuel d'enregistrement de modifs
if($msg_enr_modifs!="") echo $msg_enr_modifs;

// ---- Partie affichage du scénario sélectionné dans la liste (deuxiéme affichage de la page) -----
if(isset($_POST['liste_scenario'])){
if($_POST['liste_scenario'] !=""){
$sql="SELECT * FROM valeurs_a_saisir WHERE Id_user='".$Id_user."' AND id_scenario='".$_POST['liste_scenario']."' ";

$requete_sc = $db->query($sql);
$donnees_scenario=mysqli_fetch_array($requete_sc); //pas de boucle while car un seul résultat
$sql="SELECT * FROM valeurs_a_saisir WHERE id_scenario='".$_POST['liste_scenario']."' ";
$requete_val = $db->query($sql);
$array_val=array();


?>

4 réponses

[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
Modifié par [Dal] le 27/05/2013 à 13:12
Salut AMARI,

Je n'ai que survolé ton code, qui est trop long et contient de nombreuses parties hors sujet par rapport à ta question.

Je comprends que la partie pertinente est :

<form name="form_liste" id="15" method="POST" action="">
<select name="liste_scenario" onchange="submit();">
<option value="">-- Choisissez un scénario --</option>

<?php

$strSQL = "SELECT * FROM valeurs_a_saisir WHERE valeurs_a_saisir.Id_user = $Id_user";

$res2 = $db->query($strSQL);

while($row= mysqli_fetch_array($res2)){
$fd = $row['titre'];
echo "<option value='
'>".$fd."</option>"; // ici je ne sais pas quoi mettre dans le value
}
?>
</select>
</form>

Tu peux faire cela de plusieurs façons.
Si tu prévois un onchange="submit();", comme tu le fais dans ton code, cela signifie que tu vas traiter le changement avec Javascript... sauf que, sauf erreur, tu n'as définit aucune fonction Javascript s'appelant "submit()".

1.

Alternativement, tu pourrais faire un POST des valeurs modifiées, et recharger la page en affichant dans la zone où tu veux afficher le résultat, les données appropriées, après avoir récupéré la valeur sélectionnée avec $_POST.

C'est le plus facile à faire.

2.

Si tu tiens à utiliser Javascript, pour éviter un rechargement de page, il te faudra utiliser AJAX.

Voilà un exemple de ce que tu peux générer pour ton Html et Javascript :

<!DOCTYPE html>
<html>
<head>
<script>

function changeScenario()
{
// récupérer la sélection
var scenSelect = document.getElementById("liste_scenario");
var scenSelectValue = scenSelect.options[scenSelect.selectedIndex].value;
// faire une requête AJAX avec la scenSelectValue récupérée

var xmlhttp;
if (scenSelectValue.length==0)
  {
  document.getElementById("spanScenario").innerHTML = "";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("spanScenario").innerHTML = xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getScenarioDetails.php?q="+scenSelectValue,true);
xmlhttp.send();
}
</script>
</head>
<body>

<select id="liste_scenario" onchange="changeScenario();">
<option value="" disabled selected style="display:none;">-- Choisissez un scénario --</option>
<option value="1">val 1</option>
<option value="2">val 2</option>
<option value="3">val 3</option>
</select>

<p>Texte à afficher : <span id="spanScenario"></span></p>

</body>
</html>

Avec un exemple d'un fichier getScenarioDetails.php qui pourrait contenir quelque chose comme cela :

<?php
// Tableau pour l'exemple avec les détails de chaque scénario
// toi, tu récupéreras les données dans ta BDD
$a[]="Détails du scénario 1";
$a[]="Détails du scénario 2";
$a[]="Détails du scénario 3";

// obtenir le paramètre q provenant de l'URL
$q=$_GET["q"];

// TODO : vérifier que c'est bien une valeur numérique, 
// comprise entre 0 et 2 (nos 3 éléments), avant de 
// faire une requête à la BDD ou de traiter l'information 
// récupérée

// renvoyer le scénario correspondant
// dans notre exemple, on pioche dans le tableau

echo $a[$q];

?>

C'est plus compliqué, mais c'est plus joli.

C'est inspiré de http://www.w3schools.com/ajax/ajax_aspphp.asp


Dal
0
Salut Dal ,
Merci pour ta réponse , en fait pour mon code j'en ai une page pour saisir les données dans un formulaire et j'enregistre ces données avec un titre x qui va après apparaître dans la liste déroulante , jusqu'à là on est bon par contre après je veux quand je sélectionne ce titre x j'arrive à récupérer et afficher les données de ma base lié à ce titre , là je suis bloquée dans cette partie d'affichage comment je peux faire. Merci
0
Tout simplement, quand je clic sur un des choix de ma liste déroulante j'aimerais que ça affiche dans la même page les données de ce choix. c'est qu'est ce que je voudrais merci
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
Modifié par [Dal] le 27/05/2013 à 14:10
Oui, j'ai bien compris.

Je t'ai donné 2 méthodes, dont une (la plus compliquée car utilisant AJAX) avec du code d'exemple, avec du code qui fonctionne sur l'exemple que je t'ai donné.

Je te suggère de prendre mon code, de le mettre sur ton serveur, et de voir comment il fonctionne.

Si tu ne comprends toujours pas ce qu'il fait, ou comment l'utiliser, pose la question ici.


Dal
0
d'accord alors si je prend le premier exemple il faut que je le mettre après mes lignes des codes qui existe déjà ? et pour cette portion de code don ton primer exemple j'ai sais ça sert quoi
<select id="liste_scenario" onchange="changeScenario();">
<option value="" disabled selected style="display:none;">-- Choisissez un scénario --</option>
<option value="1">val 1</option>
<option value="2">val 2</option>
<option value="3">val 3</option>
</select>
parce pour moi j'ai déjà fait la liste déroulante avec php et pour les valeurs dans la liste c'est à dire les titres il vont être ajouté selon chaque nouveau enregistrement.
voilà le code de ma liste déroulante :

$strSQL = "SELECT * FROM valeurs_a_saisir WHERE valeurs_a_saisir.Id_user = $Id_user";

$res2 = $db->query($strSQL);

//$row = mysql_fetch_array($res2);
while($row= mysqli_fetch_array($res2)){
$fd = $row['titre'];
echo "<option value='".$row['Id_user'].";

'>".$fd."</option>";
}
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
Modifié par [Dal] le 27/05/2013 à 15:12
Salut AMARI,

As tu testé mon code comme je te le demandais ?

Cette partie du code html :

<select id="liste_scenario" onchange="changeScenario();">
<option value="" disabled selected style="display:none;">-- Choisissez un scénario --</option>
<option value="1">val 1</option>
<option value="2">val 2</option>
<option value="3">val 3</option>
</select> 

Est destinée à te montrer :

- comment on écrit une liste déroulante dont la sélection n'est pas destinée à être postée (donc non encadrée de <form> et </form>), mais traitée par Javascript, et ne comportant donc pas la directive POST, qui est inutile dans ce cas
- comment on référence l'élément dans le DOM avec un "id" pouvant être récupéré dans la fonction Javascript changeScenario()
- comment on crée un premier élément inactif comportant un texte d'aide, qui n'est pas ensuite sélectionnable dans la liste déroulante ">-- Choisissez un scénario --<"
- comment on remplit la liste, avec des valeurs utiles dans "value", récupérées ultérieurement dans changeScenario();

Mon programme n'est pas à copier-coller dans ton code. En revanche, il fonctionne, car je l'ai testé.

Ton code est long et non testable car je ne dispose pas de ta base de données, alors je ne vais pas m'amuser à coder en aveugle.

Bien sûr que tu génères ton code Html (et éventuellement Javascript aussi d'ailleurs) avec ton script Php. Fais le en mettant un contenu significatif à la place de <option value="1">val 1</option>, etc. et adapte aussi le reste du code à ton cas, après l'avoir testé et en avoir compris le fonctionnement.

Mon code te montre bien d'autres choses.

Teste le, et essaye d'en comprendre le fonctionnement avant de te lancer dans son intégration dans tes pages.


Dal
0