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

Langage PHP Discussion :

[Tableaux] Probleme de code !


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut [Tableaux] Probleme de code !
    http://francallais.free.fr/conduite.php

    Voila je dois faire le total des kilometres par voiture et en tout ainsi que le total des heures.

    Voici la table mysql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `conduite` (
      `id` int(20) NOT NULL auto_increment,
      `date` varchar(10) collate latin1_general_ci NOT NULL,
      `temps` varchar(10) collate latin1_general_ci NOT NULL,
      `tps` varchar(5) collate latin1_general_ci NOT NULL,
      `kms` varchar(10) collate latin1_general_ci NOT NULL,
      `voiture` varchar(5) collate latin1_general_ci NOT NULL,
      `circonstances` varchar(50) collate latin1_general_ci NOT NULL,
      `remarques` varchar(50) collate latin1_general_ci NOT NULL,
      `type_route` varchar(5) collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`id`)
    )
    je galère la, je bloque ca m'enerve en plus lol
    pour le total des heures il y a un champ qui contient la durée en minutes (tps) l'autre (temps) contient la durée marquée en format XXhXXmin pour faire joli car je savais pasfaire le explode ...


    Balise code ajoutée par giminik

  2. #2
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Heu j'ai pas tout compris.. où est la difficulté de faire le total des kilomètres dans ta table ?

    Un select kms avec tes conditions, une boucle qui traite les lignes retournées et qui additionne...
    Doit y avoir encore plus simple pour faire l'addition directement dans la requête mais là ça dépasse mes connaissances.
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  3. #3
    Membre éclairé Avatar de mLk92
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 527
    Par défaut
    Bah comme a dit guitou tu peut à partir de ta base effectué la somme des kms.

    Mais avant cela il faut que tu revoi les propriétés de ta base, parce que faire une somme de VARCHAR (kms), c difficile , il faut que tu choisisse un type plus approprié, style INT ou autre.

    Je ne sais plus s'il existe un type spécial pour les chiffres que tu veux additionné ou utilisé pour de quelconque opérations de math.

    Je te conseille de voir les Faq sur mysql et/ou de consulté ce cours très bien écrit par cyberzoïdes : http://cyberzoide.developpez.com/php4/mysql/

    Bon courage

  4. #4
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    Ok les kilometres c bon j'ai reussis mais comment je fais pour convertir le total des minutes en heures ? apres avoir divisé par 60 faut bien fait un explode pour recuperer ce qui il y a apres la virgule pour le retransformer en minutes non ?

    Je reéidite apres toutes ces reponses
    Merci pour la fonction d'addition c tres pratique je fais donc ca :
    mysql_query("Select id, SUM(kms) from conduite GROUP BY id"); ? mais comment j'exploite les données ? un simple fetch_array ?
    pour l'heure je fais comment maintenant ? je peut transformer en INT si ca vous arrange pour un code simple

  5. #5
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    C'est quoi la différence entre tps et temps

    Le mieux si tu peux c'est de revoir ton champ temps pour ne stocker qu'un entier correspondant aux minutes parce que là la modélisation de la BDD est clairement mauvaise.

  6. #6
    Membre averti
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Par défaut
    Citation Envoyé par JWhite
    C'est quoi la différence entre tps et temps

    Le mieux si tu peux c'est de revoir ton champ temps pour ne stocker qu'un entier correspondant aux minutes parce que là la modélisation de la BDD est clairement mauvaise.
    +1

    C'est une bonne solution ou alors si tu veux vraiment garder ton format xxHxx il faudrait créer un trigger avec l'aide de la fonction que le collègue te donne pour la mettre sous ce format là

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Par défaut
    Citation Envoyé par Elwyn
    Ok les kilometres c bon j'ai reussis mais comment je fais pour convertir le total des minutes en heures ? apres avoir divisé par 60 faut bien fait un explode pour recuperer ce qui il y a apres la virgule pour le retransformer en minutes non ?

    Je reéidite apres toutes ces reponses
    Merci pour la fonction d'addition c tres pratique pur l'heure je fais comment maintenant ? je peut transformer en INT si ca vous arrange pour un code simple
    ta reussi avec ma requête?

  8. #8
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Le modulo est ton ami --> %

    Tiens essaie avec ma fonction

    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
    /*************
       FORMAT H
    *************/
    /** 
    * Formate l'heure pour l'affichage
    * @param $duree La durée en minutes
    * @return L'heure calculée pour affichage, ex: 12 h 30 m
    */ 
    function format_h($duree)
    {
    	$min = $duree%60;
    	$heures = ($duree-$min)/60;
     
    	if($heures > 0) $heures = '+'.$heures;
    	if($min == 0)
    	{
    		$duree = $heures.' h ';
    	}
    	else if($heures == 0)
    	{
    		if($min > 0) $min = '+'.$min;
    		$duree = $min.' m'; 
    	}
    	else
    	{
    		// On supprime le signe - des minutes
    		if($min < 0) $min *= -1;
    		$duree = $heures.' h '.$min.' m';
    	}
    return $duree;
    }
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  9. #9
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    En fait temps c pour l'affichage clair dans la table (ex : 1h15min) et tps c pour le calcul du temps de conduite je me disais que c'etait plus facile de travailler avec des minutes ... non ?

    merci

  10. #10
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    Donc si j'ai bien compris je vire le champs temps je garde uniquement le champs tps que je transforme en INT et pour l'affichage de l'heure en format XXhXXmin j'utilise la fonction vue plus haut c ca ?
    et pour le total des kms ? j'ai pas tout saisis

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    1) Tu as tout intérêt à utiliser les fonctions de mysql, notamment SUM().
    Pour le total des km :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(kms) AS total_kms
    Pour le total des km par voiture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUM(kms) AS total_kms
      FROM ta_table
      GROUP BY voiture
    2) Attention aux type des champs dans ta bdd :
    id INT(20) => tu comptes avoir 100 milliards de milliards d'enregistrements ? Un simple SMALLINT UNSIGNED (65535 combinaisons) pourrait suffire, non ?
    date => prends un champ DATE ou DATETIME
    TEMPS => idem, ou même TIMESTAMP
    kms => c'est un nombre => INT ou SMALLINT UNSIGNED ou encore FLOAT

    3) Tu ne dois pas avoir 2 fois la même donnée dans ta bdd, car c'est de la perte de place et un risque d'erreurs. Je parle bien entendu de tes champs date, temps et tps.
    Deux solutions à mon avis :
    a) deux champs : date_depart (TIMESTAMP) et date_arrivee (TIMESTAMP).
    Le SELECT du total :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(date_arrivee - date_depart) AS total_temps...
    b) Un seul champ : duree (SMALLINT UNSIGNED).
    Le SELECT du total :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(duree) AS total_temps...

  12. #12
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    Ah !! j'y vois deja plus clair
    ok pour les kms, ca c fait

    pour la durée je vais enlever le champs temps, il sert a rien c vrai bon je compile tout ca et je reviens

  13. #13
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    Voici la nouvelle table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `conduite` (
      `id` int(5) NOT NULL auto_increment,
      `date` varchar(10) collate latin1_general_ci NOT NULL,
      `tps` int(5) NOT NULL,
      `kms` int(5) NOT NULL,
      `voiture` varchar(5) collate latin1_general_ci NOT NULL,
      `circonstances` varchar(50) collate latin1_general_ci NOT NULL,
      `remarques` varchar(50) collate latin1_general_ci NOT NULL,
      `type_route` varchar(5) collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`id`)
    )
    http://francallais.free.fr/conduite.php

    Voici le code :

    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
    <html>
    <head>
    <title>Conduite</title>
    <link href="style_conduite.css" type="text/css" rel="stylesheet" />
    </head>
    <body>
    <div class="titre">Suivi conduite</div><br /><br />
    <?
    include('config.php');
    $query = mysql_query("SELECT * FROM conduite");
     
    echo'<div align="center">';
    echo'<table border="1">';
    echo'<thead>';
    echo'<tr>';
    echo'<th width="10%">Dates</td>';
    echo'<th width="10%">Temps</td>';
    echo'<th width="5%">Kms</td>';
    echo'<th width="5%">Voiture</td>';
    echo'<th width="15%">Type de route</td>';
    echo'<th width="30%">Circonstances</td>';
    echo'<th width="25%">Remarques</td>';
    echo'</tr>';
    echo'</thead>';
    echo'<tfoot>';
    echo'<tr>';
    echo'<th width="10%">Dates</td>';
    echo'<th width="10%">Temps</td>';
    echo'<th width="5%">Kms</td>';
    echo'<th width="5%">Voiture</td>';
    echo'<th width="15%">Type de route</td>';
    echo'<th width="30%">Circonstances</td>';
    echo'<th width="25%">Remarques</td>';
    echo'</tr>';
    echo'</tfoot>';
    echo'<tbody>';
    while($conduite = mysql_fetch_array($query)){
    echo'<tr>';
    echo'<td>'.$conduite['date'].'</td>';
    $temps = $conduite['tps'].'';
    $temps = format_h($temps);
    echo'<td>'.$temps.'</td>';
    echo'<td>'.$conduite['kms'].'</td><td>'.$conduite['voiture'].'</td><td>'.$conduite['type_route'].'</td><td>'.$conduite['circonstances'].'</td><td>'.$conduite['remarques'].'</td>';
    echo'</tr>';
    }
    echo'</tbody>';
    echo'</table>';
    echo'</div>';
     
    $total_kms = mysql_query("SELECT SUM(kms) AS total_kms FROM conduite");
    $total_kms = mysql_fetch_array($total_kms);
    $total_kms = $total_kms['total_kms'];
     
    $total_heures = mysql_query("SELECT SUM(tps) AS total_kms FROM conduite");
    $total_heures = mysql_fetch_array($total_heures);
    $total_heures = $total_heures['total_kms'];
    $total_heures = format_h($total_heures);
     
    echo'<br /><br />Nombre total de kilometres : <font color="red" size="+2">'.$total_kms.'</font>';
    echo'<br /><br />Temps de conduite : <font color="red" size="+2">'.$total_heures.'</font>';
     
    mysql_close();
    ?>
    </boby>
    </html>
    Par contre pour le total des kms en fonction des voitures je vois pas comment exploiter le resultat retourné ...

    merci quand meme a tous


    Balise code ajoutée par giminik

  14. #14
    Membre averti
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $total_kms = mysql_query("SELECT SUM(kms) AS total_kms FROM conduite");
    Je pense qu'il y a un problème dans ta requête... Le resultat retourner sera l'addition de tout les kms présent dans ta table or je pense que tu veux les kms totale pour chaque voiture?

    Si c'est le cas ta requête doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SELECT SUM(kms) AS total_kms FROM conduite group by id");

  15. #15
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    C'est déjà mieux, reste la champ date à mettre en type DATE ou DATETIME.

    Pense à la balise code # aussi.

    Pour apporter un bemol à ce qui a été dit plus haut pour avoir les kms par bagnole :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT voiture, SUM(kms) AS total_kms
      FROM conduite
      GROUP BY voiture
    Après ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($lg= mysql_fetch_array($query))
       echo $lg['voiture'] . " => " . $lg['total_kms'] . "<br>";

  16. #16
    Membre averti
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Par défaut
    Citation Envoyé par Elwyn
    http://francallais.free.fr/conduite.php

    Voila je dois faire le total des kilometres par voiture et en tout ainsi que le total des heures.

    Voici la table mysql :

    CREATE TABLE `conduite` (
    `id` int(20) NOT NULL auto_increment,
    `date` varchar(10) collate latin1_general_ci NOT NULL,
    `temps` varchar(10) collate latin1_general_ci NOT NULL,
    `tps` varchar(5) collate latin1_general_ci NOT NULL,
    `kms` varchar(10) collate latin1_general_ci NOT NULL,
    `voiture` varchar(5) collate latin1_general_ci NOT NULL,
    `circonstances` varchar(50) collate latin1_general_ci NOT NULL,
    `remarques` varchar(50) collate latin1_general_ci NOT NULL,
    `type_route` varchar(5) collate latin1_general_ci NOT NULL,
    PRIMARY KEY (`id`)
    )

    je galère la, je bloque ca m'enerve en plus lol
    pour le total des heures il y a un champ qui contient la durée en minutes (tps) l'autre (temps) contient la durée marquée en format XXhXXmin pour faire joli car je savais pasfaire le explode ...
    Pour additionner les kms/voiture voilà la requête :

    Select id, SUM(kms) from conduite GROUP BY id;

    Pour le temps c'est un peu plus compliqué étant donner que tu utilise un varchar donc je peux pas t'aider....

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

Discussions similaires

  1. [Tableaux] Probleme avec le code
    Par fjd59 dans le forum Langage
    Réponses: 37
    Dernier message: 06/03/2007, 18h53
  2. [Tableaux] probleme avec mon code pour faire un parseur !
    Par Joe-La-Boule dans le forum Langage
    Réponses: 10
    Dernier message: 11/10/2006, 16h35
  3. [Tableaux] probleme de code svp
    Par k-nine01 dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2006, 22h41
  4. probleme de code formulaire
    Par bachilbouzouk dans le forum ASP
    Réponses: 45
    Dernier message: 13/04/2005, 11h01
  5. [debutant] probleme de code :-(
    Par flogreg dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 16/08/2004, 19h20

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