IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

liste dynamique php associé a une base de données mysql


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut liste dynamique php associé a une base de données mysql
    Bonjour à tous !

    Etant nouvelle dans le monde de javascript, j'ai essayé de mettre dans une première une liste déroulante les champs de mes tables, puis, de faire apparaitre dans une deuxième liste toutes les valeurs correspondantes à ce champs lorsque la sélection de la première change mais sans grand succès...

    Grâce à mon code, j'ai réussi à récuperer tout les champs dans la première liste, mais lors du changement de sa valeur, aucune autre liste déroulante n'apparait

    Je vous montre donc mon code en espérant que vous pourrez m'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <?php
    echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
    ?>
    <html  xml:lang="fr" >
    <head>
    <script type="text/javascript" src="./arrayPHP2JS.js" charset="iso_8859-1"></script>
    <script type="text/javascript" src="./changeValeur.js" charset="iso_8859-1"></script>
     
    	<title> Base de données ARECOFA </title>
    	</title>
    	<br/><br/><u><font size=+50 color=seagreen> <center> Test : </center></font></u>
    	<br/><br/><br/><br/>
    	<?php
    	$link=mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
    	mysql_select_db("arecofa");
    	$req=mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='produit' or TABLE_NAME='fabricant'") or die ("requete impossible");
    	$champs=array();
    	while ($row = mysql_fetch_array($req))
    		{//echo "colonne : $row[0] <br/>";
    		if ($row[0] != "num_fabricant" and $row[0] != "num_de_produit" and $row[0] != "photo")
    			{$recherche=mysql_query("select $row[0] from produit, fabricant ");
    			$id = 0;
    			$temoin_t=0;
    			$temoin=array();
    			//echo "champs : <br/>";
    			while($ligne = mysql_fetch_assoc($recherche))
    				{$p = $row[0];
    				$v = $ligne[$row[0]];
    				//echo "$v <br/>";
    				$b=0;
    				foreach ($temoin as $cle => $val)
    					{if ($val == $v)
    						{$b=1;
    						}
    					}
    				if ( $b==0 and $temoin_t==0)
    					{$champs[$p]=array();
    					$champs[$p][0]=$row[0];
    					$champs[$p][1] = array();
    					$champs[$p][2] = array();
    					$temoin_t=1;
    					}
    				if ($b==0)
    					{$champs[$p][1][$id] = $v;
    					$champs[$p][2][$id] = $ligne[$row[0]];
    					$id++;
    					$temoin[] = $v;
    					}
    				}
    			}
    		}
    		$chaine = htmlspecialchars(serialize($champs), ENT_QUOTES);
    		?>
    		<script type="text/javascript">
    		/* <![CDATA[ */
    		<!--
    		/*
    		* Ici, on transmets la chaîne sérialisée à JavaScript 
    		* pour la transformer en tableau indexé JavaScript 
    		*/
    		var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
    		var tab = tableau.retour();
    		// -->
    		/* ]]> */
    		</script>
    	</head>
    	<body style="background:lightgreen" link=darkgreen vlink=green>
    		<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgprod">
    		<legend>Sélectionnez un champs</legend>
    		<select name="champs" id="champs" onchange="changeValeur(tab,this.value);">
    		  <option value="vide">- - - Choisissez un champs - - -</option>
    			<?php
                            /* Construction de la première liste : on se sert du tableau PHP */
                            $nbr = count($champs);
                            foreach($champs as $nr => $nom)
                                    {
                                    ?>
    				<option value="<?php echo($nr); ?>"><?php echo($nr); ?></option>
    				<?php
                                    }
                            ?>
    		</select>
    	  <span id="blocValeur"></span><br />
    	  <input type="submit" name="ok" id="ok" value="Envoyer" />
    		</form>
    	</body>
    </html>
    puis mon fichier javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    /* On crée la fonction qui va construire la seconde liste déroulante */
    function changeValeur(tab, champs)
    	{if(champs != "vide")
    		{var nbd = tab[champs][1].length;
    		var form_d  = '<select name="valeur" id="nom_valeur">';
    		form_d  += '<option value="vide">- - - Choisissez une valeur - - -</option>';
    		for(var j = 0;  j < nbd; j++)
    			{if (tab[champs][1][j] != undefined)
    				{form_d += '  <option value="'+ tab[champs][1][j] +'">'+ tab[champs][2][j] +'<\/option>';
    				}
    			}
    		form_d += '<\/select>';
        }
        else
        {
            form_d = "";
        }
        document.getElementById("blocValeur").innerHTML = form_d;
    }
    Merci à ceux qui sont arrivé à me lire jusqu'ici, si vous avez des réponses...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    J'ai une question en qui ma vient en regardant ton code JS...

    As-tu vérifié le "texte" du code généré par la fonction changeValeur() ?
    Plus précisément, je vois que dans 2 cas sur 3 tu as échappé le slash de la fermeture de balise dans la construction de la liste déroulante.
    ('</option>', '<\/option>' et '<\/select>')

    devyan


    devYan.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci pour la réponse,

    Le code à été testé sur un autre cas où il fonctionne parfaitement donc je ne pense pas que ça vienne de là. Depuis le post, j'ai un peu avancé; en effet, j'ai découvert que l'erreur "unterminated string literal" été généré à cause de la transformation du tableau php en javascript.

    Je pense que c'est cette ligne qui ne lui plait pas :
    $champs[$p][0] = $row[0];

    En effet, le foreach sur le tableau me marque un warning, alors que sur l'autre cas dont je parlais tout a l'heure, il n'y a pas de warning...

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Je pense avoir résolu mon problème :

    Il semblerai que les espaces que contiennent les champs que j'ai mis dans le tableau php empêche sa transcription en javascript

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment associer snort à une base de données Mysql
    Par Sayorano dans le forum Sécurité
    Réponses: 1
    Dernier message: 06/03/2014, 03h04
  2. [AJAX] lier deux listes déroulantes alimenté par une base de données (Mysql)
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 01h06
  3. Réponses: 2
    Dernier message: 28/06/2006, 20h34
  4. Réponses: 11
    Dernier message: 08/06/2006, 18h07
  5. [Conception] creation de fiche dynamique a partir d'une base de données
    Par badnane2 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/06/2006, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo