Forum d'entraide PHPFrance

Venez poser vos questions PHP, MySQL, HTML, CSS, Javascript, Gestion de serveurs à la communauté PHPfrance

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

[RESOLU] Calcul dans bdd

Pour ceux qui débutent en PHP.

Calcul dans bdd

Messagepar seb59210 22 Aoû 2012, 00:55

Bonjour,
tout merci pour toute aide que vous pourrait m'apporter.
Je suis en train de créer une page php permettant de visualiser combien de page sont imprimés chaque semaines.

Ma bdd est organisé comme suit : (table printer)
week | p1 | p2 | result | count
34 10 25 35 20
33 5 10 15 15

Donc en gros, le script récupère le numéro de semaine, le compteur total des imprimantes 1 et 2 puis insère le résultat dans result,
en soustrayant le chiffre result par le result de la semaine précédente, nous obtenons le nombre de page imprimées entre les deux semaines.

Voici mon code php :
<html>
 <head> <title> SNMP GET </title>
 </head>
  <body>
   <?php
   echo "Konica 1<br>";
   $snmp_a4_p1 = snmpget("xx.xx.xx.xx", "public", "1.3.6.1.4.1.18334.1.1.1.5.7.2.4.1.5.1.3");
   $snmp_a4_p1 = substr($snmp_a4_p1,8);
   $week = strftime("%U") ;
   echo "Total A4 = $snmp_a4_p1<br>";
   $bdd = new PDO('mysql:host=localhost;dbname=green', 'root', '');
   echo "Konica 2<br>";
   $snmp_a4_p2 = snmpget("xx.xx.xx.xx", "public", "1.3.6.1.4.1.18334.1.1.1.5.7.2.4.1.5.1.3");
   $snmp_a4_p2 = substr($snmp_a4_p2,8);
   $week = strftime("%U") ;
   $resultat = ($snmp_a4_p1 + $snmp_a4_p2);
   echo "Total A4 = $snmp_a4_p2<br>";
   $req = $bdd->prepare('INSERT INTO printer (week, p1, p2, result) VALUES(:week, :p1, :p2, :result)');
   $req->execute(array(
   'week' => $week,
   'p1' => $snmp_a4_p1,
   'p2' => $snmp_a4_p2,
   'result' => $resultat
   ));
   
?>
  </body>
</html>


Ma question est donc, comment faire cette fameuse soustraction en utilisant le champ de la semaine d'avant. (J'avais pensé à prendre la variable week -1 afin de savoir sur quel ligne récupérer la valeur mais je ne trouve pas comment la mettre en variable php pour pouvoir faire la soustraction avec la variable resultat). Mais je n'y arrive pas...
Auriez-vous une autre idée ?

Merci d'avance pour toute aide ou renseignement,
Séb
seb59210
Embryon
 
Messages: 11
Inscription: 22 Aoû 2012, 00:25

Publicité

Re: Calcul dans bdd

Messagepar xTG 22 Aoû 2012, 06:49

Il faut faire une requête de sélection avec comme condition week - 1 pour récupérer les valeurs souhaitées, faire le calcul puis l'insertion.
xTG
ViPHP
ViPHP
 
Messages: 5743
Inscription: 03 Aoû 2010, 19:12

Re: Calcul dans bdd

Messagepar Mazarini 22 Aoû 2012, 09:05

Bonjour,

Je ne comprends pas comment tu gères tes numéros de semaine, en particulier le changement d'année. Ca me pose problème pour connaitre la semaine précédente.
Mazarini
ViPHP
ViPHP
 
Messages: 2178
Inscription: 27 Oct 2010, 21:05

Re: Calcul dans bdd

Messagepar seb59210 22 Aoû 2012, 09:26

Bonjour Mazarini,
En effet je n'avais pas du tout pensé à cette problématique... (ne pas frappez).
Comment est-il préférable de procéder ? Un champs année à part ou mettre dans le champ week le numéro de semaine suivi du numéro d'année ( par exemple 342012 ).

En tout cas merci beaucoup pour ton aide.
seb59210
Embryon
 
Messages: 11
Inscription: 22 Aoû 2012, 00:25

Re: Calcul dans bdd

Messagepar Mazarini 22 Aoû 2012, 09:57

Pour un problème de ce type, je choisirai une date. Par exemple le dimanche ou le lundi de la semaine (mais toujours le même).

La semaine précédente serait alors la date - 7 jours ce qui simplifie le problème : DATE_ADD('2006-05-00',INTERVAL 7 DAY)
(la flemme de chercher comment on enlève 7 jour)

Tu peux alors faire une jointure sur la table avec elle même en rapprochant les dates.
Mazarini
ViPHP
ViPHP
 
Messages: 2178
Inscription: 27 Oct 2010, 21:05

Re: Calcul dans bdd

Messagepar seb59210 22 Aoû 2012, 10:36

Salut xTG : En fait je ne sais pas comment faire pour récupérer la valeur du select pour la transmettre dans une variable et ensuite effectuer les actions de soustractions.
$week_ant = ($week - 1);
$req1="SELECT * FROM printer WHERE week='".$week_ant."' ";
$resultat = mysql_query($req1);
echo "<CAPTION> Tableau !! </CAPTION>";
               echo "<table border='1'>";
               echo "<tr><th>Week</th><th>P1</th><th>P2</th><th>Total</th><th>Compteur</th></tr>";
               while ($ligne = mysql_fetch_row($resultat)) {
               echo "<tr><td>$ligne[0]</td><td>$ligne[1]</td><td>$ligne[2]</td><td>$ligne[3]</td><td>$ligne[4]</td></tr>";
               }
               echo "</table>";

Me montre bien les valeurs de la table mais je ne sais pas comment récupérer la valeur de result et l'attribuer à une variable $result

Mazarini:
Je pense garder le champ week avec le numéro de semaine et y rajouter un champ année, puisque ensuite je dois créer un histogramme et les numéro de semaine seront en abscisse.
Merci à vous
seb59210
Embryon
 
Messages: 11
Inscription: 22 Aoû 2012, 00:25

Re: Calcul dans bdd

Messagepar xTG 22 Aoû 2012, 10:43

$ligne[0] n'est-elle pas déjà une variable ? :)
xTG
ViPHP
ViPHP
 
Messages: 5743
Inscription: 03 Aoû 2010, 19:12

Re: Calcul dans bdd

Messagepar seb59210 22 Aoû 2012, 11:21

Et bien, j'ai essayé avec un
echo "Total A4 = $ligne[0]<br>";


Mais, il ne m'affiche pas la variable. :-)
seb59210
Embryon
 
Messages: 11
Inscription: 22 Aoû 2012, 00:25

Re: Calcul dans bdd

Messagepar Mazarini 22 Aoû 2012, 11:57

Les arrays dans les chaines de caractères posent des problèmes

echo "Total A4 = ${ligne[0]}<br>";
ou
echo 'Total A4 = ',$ligne[0],'<br>';
Mazarini
ViPHP
ViPHP
 
Messages: 2178
Inscription: 27 Oct 2010, 21:05

Re: Calcul dans bdd

Messagepar seb59210 27 Aoû 2012, 09:22

Salut les gars,
It works !
Merci Mazarini pour l'infos sur les arrays je la tient précieusement sous le coude.
J'ai amélioré la bdd, puisque mon soucis était de selectionner la dernière entrée un champs mélangeant année+numéro de semaine n'aurait pas marché puisque la première semaine de l'an 2013 aurait donné 201301-1= 201300 et non 201252. J'utilise donc un champs id en auto increment et dans la requête je sélectionne la valeur la plus haute.

Bref, voici les champs:
id | | year | week | p1 | p2 | result | count
Et le code php pour ceux qui auraient besoin :
<html>
 <head> <title> SNMP GET </title>
 </head>
  <body>
   <?php
   // Recup des infos Printer 1
   $snmp_a4_p1 = snmpget("xxx.xxx.xxx.xxx", "public", "1.3.6.1.4.1.18334.1.1.1.5.7.2.4.1.5.1.3");
   $snmp_a4_p1 = substr($snmp_a4_p1,8);
   // Recup des infos Printer 2
   $snmp_a4_p2 = snmpget("xxx.xxx.xxx.xxx", "public", "1.3.6.1.4.1.18334.1.1.1.5.7.2.4.1.5.1.3");
   $snmp_a4_p2 = substr($snmp_a4_p2,8);
   $result = ($snmp_a4_p1 + $snmp_a4_p2);
   $year = strftime("%Y") ;
   $week = strftime("%U") ;
   $week_ant = ($week - 1);
   $connect = mysql_connect("localhost","root","");
               mysql_select_db("green", $connect);
               $req = "SELECT * FROM printer WHERE id = (SELECT MAX(id) FROM printer)";
               $resultat = mysql_query($req);
               echo "<CAPTION> Derni&egrave;re ligne </CAPTION>";
               echo "<table border='1'>";
               echo "<tr><th>id_Week</th><th>Year</th><th>Week</th><th>P1</th><th>P2</th><th>Total</th><th>Compteur</th></tr>";
               while ($ligne = mysql_fetch_row($resultat)) {
               echo "<tr><td>$ligne[0]</td><td>$ligne[1]</td><td>$ligne[2]</td><td>$ligne[3]</td><td>$ligne[4]</td><td>$ligne[5]</td><td>$ligne[6]</td></tr>";
               $result_old = ($ligne[5]);
               }
               echo "</table>";
   $count = ($result - $result_old);
   echo "P1: $snmp_a4_p1<br>";
   echo "P2: $snmp_a4_p2<br>";
   echo "Week: $week<br>";
   echo "Year: $year<br>";
   echo "Week_Ant: $week_ant<br>";
   echo "Total P1 + P1: $result<br>";
   echo "Ancien Total: $result_old<br>";
   echo "Compteur: $count<br>";
   echo "Les infos sont dans la base !";
   $bdd = new PDO('mysql:host=localhost;dbname=green', 'root', '');
   $req = $bdd->prepare('INSERT INTO printer (year, week, p1, p2, result, count) VALUES(:year, :week, :p1, :p2, :result, :count)');
   $req->execute(array(
   'year' => $year,
   'week' => $week,
   'p1' => $snmp_a4_p1,
   'p2' => $snmp_a4_p2,
   'result' => $result,
   'count' => $count
   ));
?>
  </body>
</html>


Merci beaucoup pour votre aide
Et à très bientôt sur le site (je dois encore créer les stats... :-) )
seb59210
Embryon
 
Messages: 11
Inscription: 22 Aoû 2012, 00:25

Re: [RESOLU] Calcul dans bdd

Messagepar moogli 27 Aoû 2012, 15:04

salut,


question bête que se passe t'il le jour où tu ajout une (ou plusieurs imprimante ?)

tu devrais regarder un tuto sur la modélisation d'une base de donnée (par exemple sur le modèle entité - association de merise) afin de faire un truc carré qui ne te posera pas de soucis :)



@+
Il en faut peu pour être heureux ......
moogli
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 5479
Inscription: 06 Juil 2006, 17:23
Localisation: gwened bzh

Re: [RESOLU] Calcul dans bdd

Messagepar seb59210 27 Aoû 2012, 19:06

Salut moogli,
comme indiqué dans mon premier post, le script additionne les compteurs des imprimantes p1 et p2 donc si je dois rajouter une nouvelle imprimante, bah il faut juste ajouter le champs p3 et l'inclure dans l'addition. Une autre question ? (je plaisante hein)

Yes, j'ai eu une heure de Modélisation de BDD mais pour une petite base comme celle-ci j'ai pas voulu trop m'embéter :-)
seb59210
Embryon
 
Messages: 11
Inscription: 22 Aoû 2012, 00:25

Re: [RESOLU] Calcul dans bdd

Messagepar moogli 27 Aoû 2012, 19:18

seb59210 a écrit:mais pour une petite base comme celle-ci j'ai pas voulu trop m'embéter :-)


ça commence petit, mais quand tu arrive sur ce type de projet qui finit avec 74 tables, dont certaine avec plus 400 champs, sans aucune relation tu fait moins le malin :)


@+
Il en faut peu pour être heureux ......
moogli
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 5479
Inscription: 06 Juil 2006, 17:23
Localisation: gwened bzh


Retourner vers PHP débutant

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 9 invités

  • Publicité