SELECT

Fermé
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024 - Modifié le 25 oct. 2022 à 15:42
 Quasimur - 26 oct. 2022 à 13:16

Bonjour,

Je sollicite votre aide pour intégrer un select (avec des données issues de ma BSS SQL) dans le code ci-dessous.

<?php	
	session_start();    //on démarre une session
	//on verifie si au moins une variable est enregsitrées dans la session
	if(isset($_SESSION['log']) and $_SESSION['sa'] == 1)
	{
	include ('entete.php');	
?>	
	<div class="ligne_top"></div>
	<div class="row">
		<div class="col-md-12">		
			<form method="post" action="saisie_compta_ok.php">
					<table id="compta" width="98%">
						<tr>
							<th class="center">Date</th>
							<th>Regl.</th>
							<th>Cat.</th>
							<th>Ref.</th>
							<th class="center">Libellé</th>                                          	                                        
							<th class="center">Débit</th>
							<th class="center">Crédit</th>
							<th> </th>   
						</tr>                                                                                     
					</table>
							
				<script langage="javascript">	

					var Compteur = 0;
					//--------------------------
					function Delete_Ligne( obj_){
					var Parent;
					var Obj = obj_;
					if( Obj){
						//-- tant que pas la balise <TR>
						do{
						Obj = Obj.parentNode;
						}while( Obj.tagName != "TR")
						//-- Recup du parent
						Parent = Obj.parentNode;
						//-- Suppression de la ligne
						if( Parent){
						Parent.deleteRow( Obj.rowIndex)
						}
					}
					}
					//----------------------
					function Create_Ligne(i){
						//-- compteur pour le FUN
						
						//-- Get objet tableau
						var O_Table = document.getElementById('compta');
						//-- Get nombre de ligne du tableau
						var NbrLigne = O_Table.rows.length;
						//-- Position d'insertion
						var Pos = NbrLigne;
						
						var ligne_a_creer= i;
						var j;
						for(j=0; j<ligne_a_creer; j++){
							Compteur++;
							//-- Insertion d'une ligne
							O_Row  = O_Table.insertRow( Pos);
							//-- Insertion des cellules
							
							O_Cell = O_Row.insertCell(-1);
							O_Cell.innerHTML = '<div class="center"><input type="text"  name="datea[]" size="12px" onfocus="addCalendar(this);" /></div><div class="separateur"> </div>';
							
							O_Cell = O_Row.insertCell(-1);
							O_Cell.innerHTML = '<div class=""><select name="regl[]"><option value=""></option><option value="1">Chq</option><option value="2">Esp</option><option value="3">Vir</option><option value="4">CB</option><option value="5">Prel</option></select></div><div class="separateur"> </div>';
							
							O_Cell = O_Row.insertCell(-1);
							O_Cell.innerHTML = '<div class=""><select name="vente[]"><option value=""></option><option value="1">Banque</option><option value="2">FFB/Comité</option><option value="3">Adhésions</option><option value="4">Loisirs</option><option value="5">Divers achats</option><option value="6">Droits de table</option><option value="7">Entretien</option><option value="8">Assurances</option><option value="9">Dons</option></select></div><div class="separateur"> </div>';
								
							O_Cell = O_Row.insertCell(-1);
							O_Cell.innerHTML = '<div class=""><input type="text" name="ref[]" size="10px" /></div><div class="separateur"> </div>';
							
							O_Cell = O_Row.insertCell(-1);
							O_Cell.innerHTML = '<div class="center boder_1"><input type="text" id=imput_lib"" name="libelle[]" size="50"/></div><div class="separateur"> </div>';  
							
							O_Cell = O_Row.insertCell(-1);
							O_Cell.innerHTML = '<div class="center"><input type="text" name="debit[]" size="10px" /></div><div class="separateur"> </div>';
							
							O_Cell = O_Row.insertCell(-1);
							O_Cell.innerHTML = '<div class="center"><input type="text" name="credit[]" size="10px" /></div><div class="separateur"> </div>';
							
							if(NbrLigne==1){
								O_Cell = O_Row.insertCell(-1);
								O_Cell.innerHTML = '<div class="" style="text-align:center;height:18px;"> </div><div class="separateur"> </div>';
							}else{
								O_Cell = O_Row.insertCell(-1);
								O_Cell.innerHTML = '<div class="" style="text-align:center;height:18px;"><input type="image" src="img/supp.png" onClick="Delete_Ligne(this)" /></div><div class="separateur"> </div>';	  
							}	
						}
					}
				</script>
					<table>
						<tr><th><input class="btn btn-primary btn-sm" type="button" onClick="Create_Ligne(1)" value="Ajouter ligne" /></th></tr>
						<tr><th><input class="btn btn-success btn-sm" type="submit" name="enregistrer" value="Enregistrer" /> </th></tr>	
					</table>		 
			</form>	
		</div>		
	</div>			
</div>		
<?php
include ('footer.php');
}else{
	//il  n'existe pas de connexion, on revoie la page erreur
	header('location:erreur.php');
}

Je souhaite le mettre au niveau du select :  vente

Merci d'avance pour votre aide


Macintosh / Chrome 106.0.0.0


2 réponses

Salut,

pour faire une requête vous devez vous connecter à la base de données. Ensuite en PHP vous pouvez utiliser PDO. Quant à la requête en elle même vous pouvez la tester directement sur la console SQL de votre base de données(BDD) et devez l'écrire en SQL.

"select : vente" ne veut rien dire il y a une syntaxe précise à appliquer comme pour tout langage de programmation. Par exemple

SELECT * FROM vente;

Renvoit toutes les données de la table de données vente si elle existent.

Vous n'obtiendrez pas un résultat exploitable directement puisque c'est une "liste" ou "pointeur" qui doit doit donc être traitée de la sorte.

Attention aussi à la différence de traitement serveur(PHP et côté base de données) et celle côté client. Vous ne pouvez faire cela côté client(par exemple directement dans le HTML ou le Javascript de la page) sauf en utilisant la méthode AJAX qui prépare en amont les résultats de manière asynchrone. Sinon vous devez tout faire côté serveur donc effectuer la requête et son traitement côté PHP ce qui est la manière la plus utilisée, AJAX servant à faire des requêtes sans avoir à recharger la page et faire appel à nouveau au serveurs PHP et de la base de données donc est utile dans des situations spécifiques.

Avec quelques recherches vous trouverez les réponses à tout cela ainsi que des tutos complets qui vous expliqueront tout cela avec plus de détails.

Voir par là pour commencer:

https://fr.wikipedia.org/wiki/Architecture_trois_tiers

https://www.php.net/manual/fr/book.pdo.php

https://sql.sh/

0
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
25 oct. 2022 à 17:16

Re,

Mon problème et que je n'arrive pas à l'intégrer dans le script JS.

J'ai tenté avec un include d'une page PHP.

<select id="vente" name="vente">
<option value="0"></option>
<?php
	$sql_vente = 'SELECT id_vente,lib FROM vente';
	try{
		$req_vente = $pdo->prepare($sql_vente);
		$req_vente->execute();
		while($res = $req_vente->fetch()){
			$id_vente = $res['id_vente'];
			$lib = $res['lib'];
			$selected = '';
			if ( $vente == $id_vente ) {$selected = 'selected="selected"';}		
				echo '<option value='.$id_vente.' '.$selected.'>'.$lib.'</option>';											
		     }	
	}catch(Exception $e){
		echo " Erreur ! ".$e->getMessage();
		echo " Les datas : " ;
		print_r($data);
	}     
?>
</select>

Merci de votre aide


0

Salut,

oui forcément comme j'ai tenté d'expliquer précédemment PHP(Hypertext Preprocessor) fonctionne sur le serveur avant que la page existe dans le navigateur et JavaScript uniquement quand la page existe et est chargée. Donc il ne peuvent pas communiquer ensemble sauf en utilisant la méthode/astuce AJAX qui rends les données asynchrones.

Une fois la page chargée il n'y a plus de PHP et JavaScript ne fonctionne que lorsque la page est chargée donc il ne peuvent évidemment pas communiquer ensemble directement.

AJAX comme son nom l'indique(Asynchronymous JavaScript And XML) rends les données asynchrones en créant un fichier (XML, JSON ou n'importe quel fichier de données brutes) de méta-données qui est ensuite utilisé lorsqu'il est nécessaire dans la page.

Que n'arrivez vous pas à intégrer d'ailleurs? Il serait utile de préciser parce que si vous voulez intégrer une requête SQL dans JavaScript de la page HTML c'est impossible autant que contraire au principe de fonctionnement des pages dynamiques; voir (lire et comprendre) le premier lien que j'ai mis dans le message précédent sur l'architecture 3 tiers qui sépare 3 parties différentes et rends utile un langage serveur comme PHP pour assurer la sécurité de la base de données qui n'est jamais accessible directement par le navigateur:

https://fr.wikipedia.org/wiki/Architecture_trois_tiers#/media/Fichier:3tier-fr.png

Sans utiliser AJAX qui est pour des besoins particuliers(modifier une page dynamiquement sans avoir à la recharger ce qui rends un site plus rapide car la requête est faite avant qu'elle soit utilisée) rien ne vous empêche d'utiliser les données générées par PHP en HTML car c'est bien là le domaine de JavaScript: manipuler la page HTML et ses contenus aussi nommée DOM.

Donc ici les balises HTML 'option's générées à partir des données de la BDD peuvent être accessibles et modifiées comme tout élément de la page existant.

Par exemple en utilisant

document.getElmenentsByTagName('option')
/** à noter que getElementsByTageName est déconseillé(à éviter) car une méthode lente et exigeante en ressources comparée à un getElementById par exemple ce qui vous force à utiliser des id et compter celles ci avec quelque chose de plus subtil, par exemple en comptant le nombre d'option enfants d'un tag select */
/* 
autre remarque sur le HTML : un select/option(liste déroulante) doit sémantiquement être un élément de formulaire FORM et même fonctionnel cela nuit au référencement car votre document sera mal formé.
*/
0
Quasimur > Quasimur
26 oct. 2022 à 13:16

Concrétement si votre HTML (en partie généré par PHP) ressemble à cela:

<select id="vente" name="vente">
<option value="0">0</option>
<option value="A">ananas</option>
<option value="B">bijou</option>
<option value="C">couscous</option>
</select>
/* vous pouvez faire cela et n'importe quoi d'autre possible avec le JavaScript sur le HTML bien que vous ne disiez pas ce que vous voulez faire...*/

console.log('il y a une liste de '+document.getElementById('vente').childNodes.length+' choix possibles')

console('la valeur du 3ème choix est '+document.getElementById('vente').childNodes[2].value)
0