Bonjour,

Débutant dans le développement , pourriez vous m'aiguiller sur le projet que je souhaite réaliser :

Voici les étapes que j'ai réalisé pour le moment :
1 - connexion à une base de donnée ( via la methode PDO )
2 - récupération des données issues de la base ( MSSQL ) dans un menu déroulant. .
id groupe - nom groupe - debut formation - fin formation

je bloque à l'étape 3 :

3 - Lorsque je sélectionne un groupe dans le menu déroulant , je souhaite effectuer une deuxième requête ( déjà prête et fonctionnelle ) qui m'affiche les membres de ce groupe. ( de préférence sans changer de page )

D’après mes premières lecture, il s'agirait de passer par du javascript/JQuery mais j'avoue que je suis perdu après ... Comment feriez vous? Merci.

Voici mon code pour le moment :


<?php

$pdo = new PDO("sqlsrv:Server=SRV-TEST\TEST_MSSQL,50000;Database=TESTDATA", "CLIENT", "Password");

if( $pdo ) {
     echo "Connexion établie.<br />";
}else{
     echo "La connexion n'a pu être établie.<br />";
     die( print_r( sqlsrv_errors(), true));
}


$sql1="select dbo.groupe.nom_groupe AS GROUPE,dbo.calendrier.date_deb AS DEBUT,dbo.calendrier.date_fin AS FIN
FROM dbo.GROUPE,dbo.FORMATION,dbo.CALENDRIER

WHERE calendrier.DATE_DEB > '20180101'
AND calendrier.code_calendrier = groupe.code_calendrier
AND groupe.code_formation = formation.code_formation

ORDER BY groupe.nom_groupe";

$result1= $pdo->query($sql1);

//echo $sql1;

echo "<br>";


echo '<select id="CHOIX"> <option value="">Choisir un Groupe</option>';
     foreach ($result1 as $CHOIX) 
     {
          echo '<option value="'.($CHOIX['id']).'">'.$CHOIX['GROUPE']."$nbsp ----- du ".$CHOIX['DEBUT']."$nbsp au: ".$CHOIX['FIN'].'</option>';
     }

     echo '</select>';


$result1->closeCursor();
?>


Modifié par avb (21 Oct 2019 - 14:16)
Et l'eau,

juste en coup de vent (pseudo code) :
html

<form>
<label>
<select>
<option>
<option>
<option>
etc.
</select>
<submit />
</form>


php

if(!empty($post))
clean_data($post)
valide_data($post)
select_data($post)


js:

select.change(function(){
fetch ....

})

ajax
Bonjour, inutile de prendre du jquery, le problème est basique de l'AJAX
deux PHP
Un qui créera ta page html contenant un malheureux javascript qui à chaque fois qu'il sera appelé, questionnera (sans quitter ta page) un autre php c'est cet autre php qui appellera PDO/MySql et fera la mise en page qu'il renverra a ta page .
C'est vraiment très facile à réaliser et tu as 1000 applications toutes prêtes ! Smiley cligne
Jean-Pierre-Bruneau a écrit :

Un qui créera ta page html contenant un malheureux javascript qui à chaque fois qu'il sera appelé, questionnera (sans quitter ta page) un autre php


oué, pour cela tu es obliger de passer par Ajax.

Enfin.. Ajax permet de ne pas "recharger" la page tout en envoyer un requêtes (ajax) à ton php.
A une URL qui pointe vers ton fichier.
Merci .Je suis parti avec de l'AJAX comme vu sur l'exemple : https://siddh.developpez.com/articles/ajax/

Je récupère bien mes groupes dans ma 1ere liste mais pas mes apprenants/membres dans la seconde. Surement des problème avec l'AJAX/javascript et l'échange de mon id ( code_groupe) via la méthode POST ? Dur quand on débute ..

Voici le index.php avec le javascript:

Code :

<html>
	<head>
		<title>EXPORT </title>
		<script type='text/javascript'>
 
			function getXhr(){
                                var xhr = null; 
				if(window.XMLHttpRequest) // Firefox et autres
				   xhr = new XMLHttpRequest(); 
				else if(window.ActiveXObject){ // Internet Explorer 
				   try {
			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
			            } catch (e) {
			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
			            }
				}
				else { // XMLHttpRequest non supporté par le navigateur 
				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
				   xhr = false; 
				} 
                                return xhr;
			}
 
/**
			* Méthode qui sera appelée sur le click du bouton
			*/
			function go(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
            // On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('apprenant').innerHTML = leselect;
					}
				}


// Ici on va voir comment faire du post
xhr.open("POST","include/traitement.php",true);
				// ne pas oublier ça pour le post
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				// ne pas oublier de poster les arguments
				// ici, l'id du groupe
				sel = document.getElementById('GROUPE');
				idgroupe = sel.options[sel.selectedIndex].value;
				xhr.send("CODE_GROUPE="+idgroupe);
			}
		</script>
	</head>



    <body>
		<form>
			<fieldset style="width: 900px">
				
				<label>Groupe</label>
      
        <select name='GROUPE' id='GROUPE' onchange='go()'>
        <option value='-1'>Choisir un Groupe</option>

   <?php
        /* Fetch records and display in a loop */
   
        $pdo = new PDO("sqlsrv:Server=SRV-TEST\TEST_MSSQL,50000;Database=TEST", "Client", "Password");
        
        if( $pdo ) {
          echo "Connexion établie";
   
     }else{
          echo "La connexion n'a pu être établie.<br />";
          die( print_r( sqlsrv_errors(), true));
     }




    $sql1="select dbo.groupe.code_groupe AS CODE_GROUPE,dbo.groupe.nom_groupe AS GROUPE,dbo.calendrier.date_deb AS DEBUT,dbo.calendrier.date_fin AS FIN
    FROM dbo.GROUPE,dbo.FORMATION,dbo.CALENDRIER
    
    WHERE calendrier.DATE_DEB > '20180101'
    AND calendrier.code_calendrier = groupe.code_calendrier
    AND groupe.code_formation = formation.code_formation
    
    ORDER BY groupe.nom_groupe";

    $result1= $pdo->query($sql1);

//    echo $sql1;
    
    while ($row=$result1->fetch() )

{

  echo "<option value='".$row["CODE_GROUPE"]."'>".$row["GROUPE"]."</option>";

}
?>

</select>

<label>Apprenants</label>
				<div id='apprenant' style='display:inline'>
				<select name='apprenant'>
					<option value='-1'>Liste des Apprenants</option>
				</select>
				</div>
			</fieldset>
		</form>
	</body>
</html>



et voici le code du fichier traitement.php :

Code :

 
 
 
<?php
	echo "<select name='apprenant'>";
	if(isset($_POST["idgroupe"])){
 
		$pdo = new PDO("sqlsrv:Server=SRV-TEST\TEST_MSSQL,50000;Database=TEST", "Client", "Password");
 
        $sql2="select DISTINCT dbo.APPRENANT.CODE_APPRENANT AS CODE_APPRENANT,dbo.APPRENANT.NOM_APPRENANT AS NOM_APPRENANT,dbo.apprenant.prenom_apprenant AS PRENOM_APPRENANT,CONCAT(dbo.apprenant.NOM_APPRENANT,' ',dbo.APPRENANT.prenom_apprenant) AS NOM_PRENOM_APPRENANT


        FROM dbo.apprenant,dbo.groupe,dbo.stat_apprenant
        
        WHERE groupe.nom_groupe=".$_POST["idgroup"]."
        AND dbo.groupe.code_groupe=dbo.stat_apprenant.code_groupe
        AND dbo.stat_apprenant.code_apprenant=dbo.apprenant.code_apprenant";
 
        $result2= $pdo->query($sql2);
 
        while ($row=$result2->fetch() )
 
        {
 
          echo "<option value='".$row["CODE_APPRENANT"]."'>".$row["NOM_APPRENANT"]."</option>";
 
    }
	}
	echo "</select>";
?>
JENCAL a écrit :

oué, pour cela tu es obliger de passer par Ajax.
Enfin.. Ajax permet de ne pas "recharger" la page tout en envoyer un requêtes (ajax) à ton php.
A une URL qui pointe vers ton fichier.

Oh l'Ami, tu dormais quand tu as répondu
Tu réponds à mon message en précisant tu es obligé de passer par AJAX oui je l'avais écrit en majuscule...
Ensuite tu dit envoyer une requête (ajax) ????
Pas du tout le php (html) principal questionne le PHP charger de gérer AJAX, en lui passant des POST avec les valeurs que ce PHP traduira en requétes Mysql, et préparera le texte résultat qu'il renverra à la page du visiteur dans son DIV réponse !
Modifié par Jean-Pierre-Bruneau (24 Oct 2019 - 00:52)
C'est bon j'ai corrigé mes errreurs, cela fonctionne tres bien !
Merci pour tous vos conseils.

3 eme étape :
J'aimerai rajouter un bouton "EXPORT CSV" afin d'exporter les données au format CSV de mon 2eme select . Est ce possible? Si oui comment?
Jean-Pierre-Bruneau a écrit :

Oh l'Ami, tu dormais quand tu as répondu


Hmmm, c'est possible..
Jean-Pierre-Bruneau a écrit :

Ensuite tu dit envoyer une requête (ajax) ????

Oui .. bon, requête HTTP c'est pareil, c'est pour faire plus court.

Jean-Pierre-Bruneau a écrit :

Pas du tout le php (html) principal questionne le PHP


Là c'est toi qui dormait ? Smiley smile
avb a écrit :
C'est bon j'ai corrigé mes errreurs, cela fonctionne tres bien !
Merci pour tous vos conseils.

3 eme étape :
J'aimerai rajouter un bouton "EXPORT CSV" afin d'exporter les données au format CSV de mon 2eme select . Est ce possible? Si oui comment?


Oui c'est possible mais il faut le codé.
Tu as deux choix, soit en JS, soit en PHP.
A ce niveau y'a pas mal de tuto sur le net, c'est très simple, je te conseil quand même de le gérer en PHP. Après chacun ses choix.