Page 1 sur 1

Probleme de tableau

Posté : 05 janv. 2007, 11:49
par Gico
Bonjour
j'essaie de créer une formulaire avec autocomplettion a partir de la librairie scriptaculous. J'ai un probleme qui semble venir d'un tableau PHP.
Je vais essayer de faire simple:

dans mon fichier PHP j'ai une un tableau qui doit contenir une liste de nom

Si je le code en dur :
$liste=array(" Marcel", "george', "gilles");
Mon script d'autocompletion fonctionne parfaitement;

Si je créé dynamiquement ce tableau à partir d'une requete:
$liste=array();
do {
array_push($liste, $row_clients['noms']);
}
while ($row_noms = mysql_fetch_assoc($noms));
Le script d'autocompletion n'affiche plus qu'une partie des possibilites, le premier nom commençant par la premiere lettre tapée, mais plus rien à la seconde. ex : je tape "g", il ne me propose que "george", si je tape "gi", plus rien.
Je ne crois pas que ça vient de javaScript, c'est le tableau dynamique qui pose problème. Pourtant si je fait un print_r, le tableau semble correctement formaté, et affiche tous les noms.

Merci pour votre aide.

Posté : 05 janv. 2007, 12:29
par fred9999
reagrde bien ton $liste=array(" Marcel", "george', "gilles");

après gorges il y a un ' et non un "

Posté : 05 janv. 2007, 16:00
par Gico
merci, faute de frappe.. dans mon code il est bon.

Posté : 05 janv. 2007, 16:59
par Ryle
C'est peut être qu'un autre soucis de frappe mais :
$liste=array(); 
do { 
array_push($liste, $row_clients['noms']); 
} 
while ($row_noms = mysql_fetch_assoc($noms)); 
Tu stockes dans $row_noms et tu utilises $row_clients dans le push ...

Posté : 05 janv. 2007, 17:23
par Gico
Tu as raison d'etre frappé ! c'est encore une erreur de portage de code!!!helas mon prob n'est pas la dedans
sorry :roll:

il fallait bien lire :

$liste=array();
do {
array_push($liste, $row_noms['noms']);
}
while ($row_noms = mysql_fetch_assoc($noms));

Posté : 05 janv. 2007, 17:31
par Ajoloca
Bonjour,

Je pense que ton PB vient de ta boucle, au premier passage tu n'as pas encore de valeurs.
Essaie ceci
$liste=array();
while ($row_noms = mysql_fetch_assoc($noms)) {
   $liste[] = $row_noms['noms']);
}

Posté : 05 janv. 2007, 18:04
par Gico
essayé ça marche pas mieux, je crois que c'est un prob de formatage de tableau.
ma boucle ne donne pas un tableau equivalent :

$liste=array(" Marcel", "george', "gilles");

le script ne doit par percevoir les guillemets, ou la virgule.. je sais pas.. mais le probleme est là. Encore une fois codé en dur ainsi le tableau avec les même valeurs fonctionne avec le script.

Merci

Posté : 05 janv. 2007, 18:10
par Ajoloca
Essaie ceci et montre le résultat
$liste=array();
while ($row_noms = mysql_fetch_assoc($noms)) {
   $liste[] = $row_noms['noms']);
}
echo '<pre>' . print_r($liste) . '</pre>';

Posté : 05 janv. 2007, 18:19
par Gico
Array ( [0] => marcel [1] => georges [2] => gilles )
1

c'est quoi ce 1 ?
je viens de noter un truc bizarre, la script oublie l'entrée 0 de la base, il ne prend les valeurs qu'a partir de la seconde entrée de la base(il y a ne entrée avant "marcel" donc). je ne sais si ça a un rapport. Ma requete extrait bien toutes les données pourtant.

Posté : 05 janv. 2007, 18:23
par Ajoloca
Montre un peu plus de code (construction de requête, exécution)

Posté : 05 janv. 2007, 19:15
par Gico
Entre temps j'ai réecris mes bases de données, les noms ont changés mais le probleme reste entier( helas), alors voila tout le code de la page :

<?php require_once('Connections/projet.php'); 

mysql_select_db($database_projet, $projet);
$query_clients = "SELECT clients.id, clients.societe FROM clients";
$clients = mysql_query($query_clients, $projet) or die(mysql_error());
$row_clients = mysql_fetch_assoc($clients);
$totalRows_clients = mysql_num_rows($clients);
 
// tableau des clients_societe

$liste=array();
while ($row_clients = mysql_fetch_assoc($clients)) {
   $liste[] = $row_clients['societe'];
} 

echo '<pre>' . print_r($liste) . '</pre>'; 
//
//recuperation de la saisie de l'internaute
$saisie=$_POST['client'];

// si l'internaute a saisi au moins un caractere
if ($saisie != "")
{
//on crée la liste
echo '<ul>';

//on verfifie que la saisie est dans le tableau $liste
foreach ($liste as $client)
{
	if(substr($client,0,strlen($saisie))==strtolower(stripslashes($saisie)))
	{ 
	echo '<li>'.($client).'</li>';
	}
} 
echo '</ul>';
}

mysql_free_result($clients);
?>
j'ai toujours ce probleme de premiere valeur de la table qui n'apparait pas,

Posté : 05 janv. 2007, 19:18
par Ajoloca
C'est normal,

Avant ton while() tu fais
$row_clients = mysql_fetch_assoc($clients); 
Donc tu as fait une lecture et le pointeur est déplacé à l'enregistrement suivant (le 2).

Posté : 05 janv. 2007, 19:37
par Gico
Ok, merci ce prob est resolu, mais le prob principal non. comment se fait-il que ma boucle ne donne pas un code equivalent à :

$liste=array("marcel", "gilles"); ?

Posté : 06 janv. 2007, 02:40
par Gico
Ok j'ai compris mon erreur, a cause de la ligne
if(substr($client,0,strlen($saisie))==strtolower(stripslashes($saisie)))
Le script n 'accepte que les mots en minuscule, il fallait faire ceci our que les valeur du tableau puisse être évaluées
while ($row_clients = mysql_fetch_assoc($clients)) {
   $liste[] = strtolower($row_clients['societe']);
}