[RESOLU] affichage d'une requete sql / php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] affichage d'une requete sql / php

Re: affichage d'une requete sql / php

par elgringo67 » 05 oct. 2014, 20:25

Merci à toi Yann pour ton aide et ta patience, j'ai réussi finalement à résoudre le souci.
et merci pour les autres.

Re: affichage d'une requete sql / php

par yann18 » 05 oct. 2014, 17:37

il y a 6 types repas ( Etudiant, Professeur, lycéen etc..) ce n'est pas le souci pour faire le lien entre le typeRepas et son numero, j'arrice par un if ( typeRepas=='1') alors var1=Professeur etc..
je n'ai pas connaissance de ton code et des données manipulées.Précédemment je t'ai expliqué que pour afficher le type de repas(en lettres) tu dois pouvoir créer un tableau associatif dont les clés numériques doivent être exactement les mêmes que le type de repas(numérique) stocké en BD. Dans ce tableau chaque clé numérique sera associé à un type de repas(en lettres).
dans ta table tu as les types suivants: 5, 1, 4, 3, 11,9. donc construire un tableau de type repas revient à:
 $tabTypeRepas = array(1=>'Enseignant', 9=>'Etudiant', 4=>'Lycéen', 5=>'Elève', 3=>'Chercheur', 11=>'Autres'); 
Par contre tu as fait l'affichage de type de repas en faisant 6 testes ça doit faire beaucoup.
Il est plus pratique de stocker le type de repas(en lettre) dans une table de la BD cela rend l'application plus flexible car on peut modifier ou ajouter un type de repas sans avoir à toucher une seule ligne de code.
il me retourne
array(0) { }
A quel niveau effectues-tu ce débogage? peux tu poster ton code en intégralité?

Re: affichage d'une requete sql / php

par moogli » 05 oct. 2014, 15:29

salut,

la somme de tous les repas par jour
select sum(nbrepas),date from caresto group by date

la somme des repas par type de repas

select sump(nbrepas), typeRepas from caresto group by typeRepas

Pour info tu ne devrais pas utiliser les mots sql comme date pour nommer une colonne cela peux t'être préjudiciable (a un moment ou un autre cela va t’emmerder). Il est toujours plus pratique de nommer un champs de façon, par exemple, à ce qu'il soit unique dans le modèle.
Dans ton cas dateRepas semble indiqué.
Comme ça si tu fait un requête sur plusieurs table pas de soucis sur la sélection ou l'utilisation des champs date ;)


@+

Re: affichage d'une requete sql / php

par elgringo67 » 05 oct. 2014, 15:08

Bonjour Yann,
il me retourne
array(0) { }

et le programme ne fonctionne pas bien
Je t'ai mis en image la présentation de ma table.
Chaque typeRepas a son nbRepas par jour.
il y a 6 types repas ( Etudiant, Professeur, lycéen etc..) ce n'est pas le souci pour faire le lien entre le typeRepas et son numero, j'arrice par un if ( typeRepas=='1') alors var1=Professeur etc..


Le code précédent fonctionne alors que le code de ton dernier post il y a un souci...
c'est juste sur la somme par jour de tous les typesRepas où je bloque..

Re: affichage d'une requete sql / php

par elgringo67 » 03 oct. 2014, 12:51

Merci Yann, je ferai ça ce we.

Re: affichage d'une requete sql / php

par yann18 » 03 oct. 2014, 12:17

$val n'est pas déclaré.
il faut procéder au débogage du tableau $cellule question de voir ce qu'il contient.

//à insérer juste après la table html(echo '</table>'
var_dump($cellule);//que retourne-t-elle?
pour ce qui est de la fonction sum() de mysql il était possible de l'utiliser mais vu l'affichage auquel tu souhaites aboutir ça risque de compliquer l'affichage du nb de repas par jour surtout que la conception de ta table pose problème.

Re: affichage d'une requete sql / php

par elgringo67 » 03 oct. 2014, 10:50

Yann,
pour la somme des nbRepas, il ne m’affiche rien.
$val n'est pas déclaré.
Pourquoi on ne passe pas par une requete sql du genre SUM(nbRepas) as somme.
merci pour ton aide..

Re: affichage d'une requete sql / php

par elgringo67 » 02 oct. 2014, 12:55

Merci encore , je regardertout cela tranquillement.
En réalité je travaille sur quelque chose d'existant, des structures de tables qui me laissent ^pas forcement des possibilités et je suis obligé de m'adapter à cela.
mais ça avance et bcp grâce à toi ;)

Re: affichage d'une requete sql / php

par yann18 » 02 oct. 2014, 12:22

concernant le formatage de la date, mysql dispose d'une fonction de formatage DATE_FORMAT().
Pour ce qui est du typeRepas, tu as la possibilité de créer un tableau associatif dont chaque valeur (type de repas en lettre) est associé à une clé numérique(exemple: [1=>'enseignant'] ):
//il faut remplir ton tableau avec tous les types de repas présents dans la bd
$tabTypeRepas = array(1=>'Enseignant', 2=>'Etudiant', 3=>'Autre'); 
//pour récuperer le typeRepas correspondant à 1
echo $tabTypeRepas[1]; //Enseignant
ton affichage devient:



$tabTypeRepas = array(1=>'Enseignant', 2=>'Etudiant');
 $sql="select  date_format(`date`,'%d-%m') as date,nbRepas,typeRepas from caresto   where month(date)=9 ";
// Exécution de la requête
$result = mysql_query($sql);
if (!$result) {
    die('Requête invalide : ' . mysql_error() );
}

$tab = array();
$tabDate = array();
$cellule = array();
while ($row = mysql_fetch_assoc($result)) {

 if(!isset( $tabDate ) ) {
   $tabDate[$row['date']] = $row['date'];
 }
   $tab[$row['typeRepas']][$row['date']] = $row['nbRepas'];
}

echo '<table><thead><tr><th></th>';
foreach( $tabDate as $date ){
 echo '<th>'. $date. '</th>'; //en-tête de colonne
}
echo '</thead></tr>';

foreach( $tab as $typeRepas=>$values){
 echo '<tr>
           <td>'.$tabTypeRepas[$typeRepas] .'<td>';  //1ère colonne
 foreach( $tabDate as $i=>$date ){
 
     if(array_key_exists($date, $values)){
       echo '<td>'.$values[$date].'</td>';
       $cellule[$i][] = $values[$date]; //on sauvergarde chaque élément 
     }else{
       echo '<td>0</td>';
      }
 }
 echo '</tr>';
}

//création de la dernière ligne pour afficher le total de chaque colonne

echo '<tr><td>total</td>';
 foreach( $cellule as $val){
   echo '<td>'. array_sum( $val ).'</td>';
}
echo '</tr>';


echo '</table>';
une remarque au passage sur ton mcd, ton modèle est loin d'être bon.en effet le type de repas devrait faire l'objet d'une table à part car un restaurant peut en proposer plusieurs.Cela devrait te permettre non pas seulement à ne pas stocker un champ totalement inutile comme nbRepas, qui est une information dont on peut retrouver par déduction grâce à la fonction COUNT() de mysql, mais devrait surtout t'éviter un cas de redondance qui peut induire à des incohérences.
Après ne connaissant pas dans les détails ton système d'information je ne pourrais pas d'avantage épiloguer.

Re: affichage d'une requete sql / php

par elgringo67 » 02 oct. 2014, 12:20

Bonjour Yann,
Encore Merci.

Je bloque avec la date
je souhaite qu'il m'affiche uniquement le jour exemple 01 et non sous le format 2014-09-01.
La fonction Date que j'utlise m'affiche automatiquement la date du jour.
function changedateusfr($dateus) 
{ 
$datefr=$dateus{8}.$dateus{9}."-".$dateus{5}.$dateus{6}."-".$dateus{0}.$dateus{1}.$dateus{2}.$dateus{3}; 
return $datefr; 
}
$date=changedateusfr($date); 
Comment on peut faire et à quel niveau du programme je dois l'intégrer.

Et pour finir est ce possible pour chaque colonne nbRepas j'ai une ligne qui fait la somme de tous les nbRepas par TypeRepas du jour
Merci infiniment..

Re: affichage d'une requete sql / php

par sirakawa » 01 oct. 2014, 18:23

Re: affichage d'une requete sql / php

par elgringo67 » 01 oct. 2014, 18:12

Je bloque avec la date
car je souhaite la date sous cette forme
01-09 ou juste le date du jour.
j'ai utilisé cette fonction là
$date=date("m-d");
mais rien ne change.

sinon est -il possible de faire la somme de nbRepas par jour
exemple

colonne nbRepas par jour
rajouter une ligne en bas de chaque colonne qui me fait la somme total..3+12+126+56 = Somme Total 197

1/09
3
12
126
56
197

Merci infiniment, je profite de ta gentillesse

Re: affichage d'une requete sql / php

par elgringo67 » 01 oct. 2014, 16:15

t'es un chef.
Je ne sais comment te remercier.
Maintenant je vais le peaufiner.
Car les typeRepas en realité c'est sous cette forme que je vais faire.

if ($typeRepas=='1')
{
$var1="Enseignant";
}

etc...


et la date je vais la faire
sous la forme de 1/09 ou lieu quelle soit entiere

merci vraiment pour tout.
si je n'arrive pas je reviendrai vers toi

Re: affichage d'une requete sql / php

par yann18 » 01 oct. 2014, 16:04

je vois d'où vient l'erreur.en fait le tableau $tabDate est vide car les dates extraites de la bd ne sont jamais chargées dans ce tableau.voilà le code corrigé



 $link = mysql_connect("localhost", "user", "password")
    or die("Impossible de se connecter : " . mysql_error());

// Connexion à la base de données bd
$db_selected = mysql_select_db('bd', $link);
if (!$db_selected) {
   die ('Impossible de sélectionner la base de données : ' . mysql_error());
}
 $sql="select  `date`,nbRepas,typeRepas from caresto   where month(date)=9 ";
// Exécution de la requête
$result = mysql_query($sql);
if (!$result) {
    die('Requête invalide : ' . mysql_error() );
}

$tab = array();
$tabDate = array();
while ($row = mysql_fetch_assoc($result)) {

 if(!isset( $tabDate[$row['date']] ) ) { //!!!! 
   $tabDate[$row['date']] = $row['date'];
 }
   $tab[$row['typeResto']][$row['date']] = $row['nbRepas'];
}

echo '<table><thead><tr><th></th>';
foreach( $tabDate as $date ){
 echo '<th>'. $date. '</th>'; //en-tête de colonne
}
echo '</thead></tr>';

foreach( $tab as $typeResto=>$values){
 echo '<tr>
           <td>'.$typeResto .'<td>';  //1ère colonne
 foreach( $tabDate as $date ){
 
     if(array_key_exists($date, $values))
       echo '<td>'.$values[$date].'</td>';
     else
       echo '<td>0</td>';
 }
 echo '</tr>';
}
echo '</table>';

j'en suis désolé.ça doit pouvoir fonctionner maintenant

Re: affichage d'une requete sql / php

par elgringo67 » 01 oct. 2014, 15:46

j'avais déjà fait cela ,
il m'affiche juste une colonne du champs
typeRepas
3
4
1
9
11
5
12
6
Je suis en train de verifier pk..

pour rappel
Les resultats de ma table sont sous cette forme dans la bdd
idCAResto date typeRepas nbRepas
1 2014-09-01 3 6
2 2014-09-01 4 2
3 2014-09-01 1 3
4 2014-09-01 9 1
5 2014-09-01 11 37
etc..

merci vraiment pour ta patience et ta gentillesse