Tom's Guide > Forum > Programmation > Probleme php / mysql
Mot :    Pseudo :           
 

Bonjour

Je débute en Php et j'ai un problême de code que je n'arrive pas à saisir malgré mes recherches sur le net et sur votre forum.

Il s'agit de récupérer la moyenne des chiffres d'une colonne mysql (en l'occurence "age" ), d'en faire la moyenne et de la ressortir via un echo ou un print dans ma page php (le nom de la table est "users" ).

Mon code est a récupérer ici.

Au lieu de renvoyer le chiffre attendu, la page affiche "Array". Je suis donc un peu perdu ...

En vous remerciant d'avance de vos réponses

webkawa

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Comme c' est expliqué dans les cours de qualité du siteduzero, la fonction fetch_array renvoie une tableau qui contient les différentes valeur de la ligne.
Meme quand le tableau contient un seul élément, ca reste une tableau, et donc le echo ne marche pas.

Exemple :

Code :
  1. SELEC nom, prenom FROM...


/!\ le forum d'infos-du-net est moisi, donc je ne peux pas écrire SELEC_T, je dois écrire SELEC sinon ca plante. Dans tout le message j'écrirais SELEC au lieu de la meme chose avec un T :P


Si tu fais un $result = mysql_fetch_array(....),
$result['nom'] vaudra le nom de la personne, et $result['prénom'] son prénom.

Le problème dans ton cas c'est que "avg(age)" n'est pas un nom de champ, et je ne suis pas sur que $result['avg(age)'] marche.

Tu as donc deux possiblités :
1- utiliser les indices numériques : la première valeur a pour indice 0, la deuxième 1...

Par exemple :

Code :
  1. SELEC nom, prenom, classe FROM ...
  2. ....
  3. while($result = mysql_fetch_array(...))



Tu peux accéder aux valeur avec $result['nom'], $result['prenom'] et $result['classe'], mais aussi avec $result[0], $result[1] et $result[2] ( /!\ attention ce n'est pas $result['0']).
Dans ton cas, $result[0] contiendra effectivement le résultat de ta requête.

2- nommer la valeur dans la requete SQL
On utilise le mot-clé AS :

Code :
  1. SELEC avg(age) AS moyenne FROM...



Quand tu fais ça, tu indiques à MySQL "je veux que tu nommes 'moyenne' le résultat de la moyenne des ages".

Ainsi tu pourras accéder à la valeur par $result['moyenne'].


Que signifiait ton erreur ?

En fait, $result n'est pas une variable texte mais un tableau.
Comme php ne savait pas quoi afficher, il a choisi de te prévenir que c'était un tableau en affichant 'Array' ('tableau' en anglais).

La prochaine fois, pense à utiliser la fonction
print_r : Celle si affiche la variable, spécifie son type, et affiche les valeurs des éléments quand c'est un tableau.

Si tu as une valeur étrange qui ne réagit pas comme tu le souhaites, c'est très utile pour débugguer : cela demande à php "quel est le contenu de la variable ?', et ca marche meme quand c'est une variable innatendue comme un tableau, contrairement à echo.

Liens utiles
- http://siteduzero.com/php/ : cours de PHP du siteduzero
- http://siteduzero.com/php/liredonnees.php#recuperer : passage sur la récupération de données (le passage qui t'intéresse est un peu plus bas, "Afficher le résultat d'une requête" )
- http://fr.php.net/manual/fr/function.print-r.php : page de la documentation php en francais sur la fonction print_r

Répondre à bluedylc

Merci beaucoup de cette réponse rapide & complete ! je vais regarder ca attentivement et je te tiens au courant :-D

Répondre à webkawa

Re ... décidemment je dois etre maudit ...

J'ai fait exactement comme tu me le conseillais dans la seconde méthode, via un AS, et ca ne marche pas, la page php n'affiche aucun résultat ...

Mon code est dispo ici.

Merci d'avance du coup de main

a+

kawa

Répondre à webkawa

C'est bon, j'ai trouvé. Merci beaucoup du coup de main, c'est super !

Répondre à webkawa

C'est pas ton ip qu'il faut mettre mais plutôt localhost.


et fait msql_query() or die ('Erreur SQL !
'.$sql.'
'.mysql_error());


comme cela tu aura le message d'erreur de mysql

Répondre à SiM07
Tom's Guide > Forum > Programmation > Probleme php / mysql
Aller à :

Il y a 2385 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens