11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Après une longue recherche afin de récupérer par JS des informations issues d'une base de données SQL, sans passer par AJAX, je suis tombé sur un exemple approuvé par d'autres utilisateurs.

Je vous le poste ci-dessous :


//Fonction pour mettre à jour les joueurs d'une équipe
function changelineup(form,activeselect)
{
	form.activeselect.options.length=0;	
			
	choixlineup = document.getElementById('team').selectedIndex.value ;
			
	switch (choixlineup)
	{
		<?php

		/*On recherche tous les types dans les catégories qui créérons les 'case'*/
		$sql = "SELECT DISTINCT(cid) FROM team";
		$result = mysql_query($sql);

		while ($row = mysql_fetch_array($result))
		{
		?>			
			case ('<?php echo $row[0];?>'):

			<?php

			/*Pour chaque team on cherche tous les joueurs associés que l'on met dans une variable*/
			$sql2 = "SELECT DISTINCT(pseudo) FROM users WHERE team='".$row[0]."' OR team2='".$row[0]."' OR team3='".$row[0]."' OR team4='".$row[0]."' OR team5='".$row[0]."'";
			$result2 = mysql_query($sql2);
							
			$i = 0;
							
			while ($row2 = mysql_fetch_array($result2))
			{		
			        ?>	
				form.activeselect.options['<?php echo $i;?>'] = new Option('<?php echo $row2[0];?>','<?php echo $row2[0];?>');	
			        <?php
				$i++;
			}
			?>
			break;
		<?php
		}
		?>
	}
}



Et voici mon appel de fonction :


echo "<tr><td><b>Player1 :&nbsp;</b><select name=\"player1\" id=\"player1\" onClick=\"changelineup(this.form,this.name)\"><option value=\"\">" . _NONE . "</option>\n";
  
	if ($team != "")
	{
		$sql_team = mysql_query("SELECT cid FROM " . TEAM_TABLE . "");
		$nb_team = mysql_num_rows($sql_team);
        
		if ($nb_team > 0) $where = "WHERE team = '" . $team . "'"; else $where = "WHERE niveau > 1"; 

		$sql = mysql_query("SELECT pseudo FROM " . USER_TABLE . " " . $where . " ORDER BY  pseudo");

		while (list($pseudo) = mysql_fetch_array($sql))
		{
			$nick_team = $pseudo;

                        if ($player1 == $nick_team)
                       {
                               $checked3 = "selected=\"selected\"";
                       } 
                       else
                       {
                               $checked3 = "";
                       } 

			echo "<option value=\"" . $nick_team . "\" " . $checked3 . ">" . $nick_team . "</option>\n";

		}
	}
   
echo "</select>";



Le but de ce script est de mettre à jour dynamiquement une liste de joueurs étant affilié à une équipe sélectionnée préalablement. Quand on change d'équipe la liste de joueurs se met à jour dynamiquement.

Pour le moment, lorsque je choisis une équipe, je n'ai aucun joueur qui vient s'ajouter dans ma liste, celle-ci restant vide.


Pourriez-vous m'aider ? Pensez-vous que ce script fonctionne correctement avec l'usage que j'en souhaite ?

En vous remerciant,

Killa.
tepaze a écrit :
Salut,

Et ca te fournit quoi comme code HTML ?


Bah rien.

Ma liste ne contient que l'option par défaut
<option value=\"\">" . _NONE . "</option>\n"; 
Bonjour,

tout d'abord, ton retour Ajax ne ferme ni le tr ni le td qui contiennent ton select.

Ensuite... es-tu sûr de ce que te retourne ton appel mysql ? As-tu essayé d'exécuter ta requête " à la main " dans phpMyAdmin ?

S'il n'y a pas de résultat dans ton select, c'est forcément qu'il n'y a pas de retour dans ta requête sql... essaye de faire des echo de tes requêtes, exécute les à la main, et tu verras si le problème ne vient pas de celles-ci.
Bonjour,

Il y a deux problèmes principaux avec ce script (je passe sur l'utilisation de tableaux de mise en page, et sur l'absence d'élément LABEL):

1. Il mélange allègrement JavaScript et PHP. C'est le genre de truc à éviter. Si le script côté client (JavaScript) a besoin d'informations issues de la base de données, il faut générer ces données en préalable en dehors du script JS lui-même. Par exemple:
- Les données de la base, récupérées en PHP, peuvent servir à générer un code HTML propre, et les scripts JS se contenteront d'exploiter les données présentes dans le HTML.
- Les données de la base, récupérées en PHP, peuvent servir à générer un code JavaScript succinct qui permet de déclarer ces données dans une variable JavaScript (dans un Array ou un objet, par exemple).
Dans tous les cas, le coeur de ton script JS sera à part, et ne sera pas généré en PHP.

2. Il est codé «à l'ancienne», en JS intrusif, avec un attribut HTML pour l'évènement plutôt qu'un gestionnaire d'évènement DOM (et du click plutôt que du change?). Il est très linéaire et écrit des tas de code redondant au lieu de boucler sur des Array, par exemple.

Avec ça plus le mélange JS/PHP, j'ai du mal à lire ce script et comprendre son fonctionnement exact. Il faudrait voir le code HTML et JavaScript généré pour pouvoir débuguer tout ça.
fvsch a écrit :
Bonjour,

Il y a deux problèmes principaux avec ce script (je passe sur l'utilisation de tableaux de mise en page, et sur l'absence d'élément LABEL):

1. Il mélange allègrement JavaScript et PHP. C'est le genre de truc à éviter. Si le script côté client (JavaScript) a besoin d'informations issues de la base de données, il faut générer ces données en préalable en dehors du script JS lui-même. Par exemple:
- Les données de la base, récupérées en PHP, peuvent servir à générer un code HTML propre, et les scripts JS se contenteront d'exploiter les données présentes dans le HTML.
- Les données de la base, récupérées en PHP, peuvent servir à générer un code JavaScript succinct qui permet de déclarer ces données dans une variable JavaScript (dans un Array ou un objet, par exemple).
Dans tous les cas, le coeur de ton script JS sera à part, et ne sera pas généré en PHP.

2. Il est codé «à l'ancienne», en JS intrusif, avec un attribut HTML pour l'évènement plutôt qu'un gestionnaire d'évènement DOM (et du click plutôt que du change?). Il est très linéaire et écrit des tas de code redondant au lieu de boucler sur des Array, par exemple.

Avec ça plus le mélange JS/PHP, j'ai du mal à lire ce script et comprendre son fonctionnement exact. Il faudrait voir le code HTML et JavaScript généré pour pouvoir débuguer tout ça.


C'est vrai que ma mise en page est en mode "old-school", mais il s'agit ici d'une partie d'une page de test, j'ai été au plus vite, c'est tout ^^

Donc, si j'ai bien compris, mon php présent dans le script JS n'est interprété qu'au chargement de la page et le fait d'appeler le script n'effectue aucune action sur ce PHP ?

Il faudrait donc que j'enregistre l'ensemble de la table sur laquelle je fais la requête dans un array PHP et que j'utilise le JS pour effectuer des traitements sur ce tableau ?!? C'est possible ça ?


J'ai fait la modif sur "onChange", bête erreur de ma part...


En ce qui concerne le gestionnaire d'évènement DOM, je galère encore pour coder "à l'ancienne", je vais attendre de me perfectionner pour voir cela ^^

Merci.
Killaman a écrit :
Donc, si j'ai bien compris, mon php présent dans le script JS n'est interprété qu'au chargement de la page et le fait d'appeler le script n'effectue aucune action sur ce PHP ?

Ce n'est pas ce que j'ai dit, mais c'est pas faux. Smiley smile

Killaman a écrit :
Il faudrait donc que j'enregistre l'ensemble de la table sur laquelle je fais la requête dans un array PHP et que j'utilise le JS pour effectuer des traitements sur ce tableau ?!? C'est possible ça ?

Oui, c'est possible... si tu génères un objet ou un tableau JavaScript à partir de ton tableau PHP.