Probleme de tableau

Eléphant du PHP | 294 Messages

05 janv. 2007, 11:49

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.

Mammouth du PHP | 592 Messages

05 janv. 2007, 12:29

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

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

Eléphant du PHP | 294 Messages

05 janv. 2007, 16:00

merci, faute de frappe.. dans mon code il est bon.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 janv. 2007, 16:59

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 ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 294 Messages

05 janv. 2007, 17:23

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));

ViPHP
ViPHP | 1961 Messages

05 janv. 2007, 17:31

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']);
}
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 294 Messages

05 janv. 2007, 18:04

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

ViPHP
ViPHP | 1961 Messages

05 janv. 2007, 18:10

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>';
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 294 Messages

05 janv. 2007, 18:19

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.

ViPHP
ViPHP | 1961 Messages

05 janv. 2007, 18:23

Montre un peu plus de code (construction de requête, exécution)
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 294 Messages

05 janv. 2007, 19:15

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,

ViPHP
ViPHP | 1961 Messages

05 janv. 2007, 19:18

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).
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 294 Messages

05 janv. 2007, 19:37

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"); ?

Eléphant du PHP | 294 Messages

06 janv. 2007, 02:40

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']);
}