PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Differenz in Tagen in Tabelle ausgeben (http://www.selfphp.de/forum/showthread.php?t=25947)

fieliepae 28.10.2016 12:13:49

Differenz in Tagen in Tabelle ausgeben
 
Hallo,
ich bin absoluter Neuling, sowohl was das Programmieren angeht als auch das Posten in Foren (erster Beitrag!).
Es gibt diverse Beiträge zu meinem Problem aber keines hat mir bisher weitergeholfen...

Folgender IST Zustand:
Ich habe ein Formular erstellt mit dessen Hilfe sich Kunden vom Musikunterricht abmelden können.
Es gibt eine Spalte (Date) in der das Datum steht für welches sie sich abmelden und eine Spalte (Timestamp) in der der Zeitpunkt angegeben wird wann sie sich abgemeldet haben. Für die Buchhaltung wäre es jetzt enorm praktisch, eine weitere Spalte zu erhalten, in welcher die Differenz dieser beiden Spalten angegeben wird. In Tagen würde vollkommen ausreichen!

Frage:
1. Wann wird die Differenz berechnet - beim Eintragen in die Datenbank oder kann ich das auch nachträglich für die bereits bestehenden Einträge ändern?
2. Wie mach ich das? ;)

Bisher habe ich nur einen einfachen Code um die gesamte Datenbank abzurufen. Die Timestamp-Spalte habe ich per phpMyAdmin erstellt. Das Eintragen in die Datenbank erfolgt über ein E-Mail Formular von website x5 (daran kann ich womöglich nicht viel ändern). Es wäre also super, wenn ich was an der Abfrage ändern könnte oder bei PhpMyAdmin.

Ist das machbar?
Liebe Grüße und vielen Dank im Voraus für jede Idee!

Flavaslava 30.10.2016 18:39:11

AW: Differenz in Tagen in Tabelle ausgeben
 
hey fieliepae,

klar selbstverständlich ist es möglich und zwar kannst du es dir bei der Tabellenansicht anzeigen lassen. Dafür einfach die grundlagen über Datumsberechnung von PHP anschauen. Dort solltest du fündig werden. Du berechnest den Timestamp und gibst die ausgabe aus.

Mfg
Flava

fieliepae 31.10.2016 11:41:41

AW: Differenz in Tagen in Tabelle ausgeben
 
Hi Flava,

danke für die Antwort! Hab nach einiger Recherche folgendes gefunden:

PHP-Code:

 function seDay($begin,$end,$format,$sep)
{    
    
    
$pos1    strpos($format'd');
    
$pos2    strpos($format'm');
    
$pos3    strpos($format'Y'); 
    
    
$begin    explode($sep,$begin);
    
$end        explode($sep,$end);
    
    
$first     GregorianToJD($end[$pos2],$end[$pos1],$end[$pos3]);
    
$second    GregorianToJD($begin[$pos2],$begin[$pos1],$begin[$pos3]);
    
    if(
$first $second)
        return 
$first $second;
    else
        return 
$second $first;
    
}

$timeA    'Datum_Abmeldung';  //Spalte für das Datum, für das sich der Kunde abgemeldet hat 
$timeB    'Zeit';  // Spalte mit dem Zeitpunkt der Abmeldung (Timestamp)

$diff seDay($timeA,$timeB,"dmY",".");
echo 
'Die Differenz betraegt ' $diff ' Tage';

echo 
"<br>\n"

Ich erhalte nun als Überschrift der Tabelle die Ausgabe " Die Differenz beträgt 0 Tage".
Wie kann ich es nun schaffen, dass diese Funktion für jede Zeile verwendet wird und am Ende jeder Zeile die Differenz ausgegeben wird?
Bin ich mit der Funktion überhaupt grundsätzlich auf dem richtigen Weg?

Liebe Grüße

vt1816 31.10.2016 13:58:10

AW: Differenz in Tagen in Tabelle ausgeben
 
Hallo und willkommen hier im Forum.

Zitat:

Zitat von fieliepae (Beitrag 148898)
Ist das machbar?

Ja.
Zeig uns bitte was Du bereits hast. Dazu gehört unter anderem die Struktur Deiner Datenbanktabelle und 3-5 aussagekräftige Datensätze.

sysop 31.10.2016 16:05:36

AW: Differenz in Tagen in Tabelle ausgeben
 
Einmal Date und einemal Timestamp?

einen Timestamp kann man mit mktime erstellen, ich würde also das Datum in einen Timestamp umrechnen und dann so vorgehen

PHP-Code:


// Datum aus der Datenbank
$datum1 mktime(0,0,0,$mon,$tag,$jahr);

// Timestamp aus der Datenbank
$datum2 DEIN_TIMESTAMP

// Tage Differenz berechnen
$diff = (($datum2 $datum1) / 3600 24);

echo 
number_format($diff,0,",","."); 


fieliepae 31.10.2016 18:11:36

AW: Differenz in Tagen in Tabelle ausgeben
 
Erstmal vielen Dank für eure Zeit und Hilfe!

Genau, einmal Date für die Datumsangabe (liegt in der Zukunft) die der Kunde macht, damit die Tabelle sortiert werden kann und einmal ein Timestamp der automatisch eingefügt wird sobald die Abmeldung abgeschickt wurde, damit die Buchhaltung weiß ob die Abmeldung fristgerecht erfolgte.

Also hier der bisherige Code:
Der Fairness halber, ich habe den Code von einem "Andreas Gruber" welcher ihn zum kostenfreien Download auf seiner Homepage zur Verfügung gestellt hat. Ich verstehe ihn zu ca. 75% (z.B. weiß ich bis heute nicht was "feldcontainer bedeutet...) und habe hier und da noch etwas verändert. Die Bemerkungen sind von mir, damit ich den Code einigermaßen verstehe und den Überblick behalte ;)

PHP-Code:

/** Überschrift Timestamp**/
<?php
date_default_timezone_set
("Europe/Berlin");
$timestamp time();
?>
<?php
$datum 
date("d.m.Y",$timestamp);
$uhrzeit date("H:i",$timestamp);
echo 
$datum," - ",$uhrzeit," Uhr";

 
define(TABLENAME"XXXXX");
 

 
$con mysql_connect("XXXXXXXXXX","XXXXXXXX","XXXXXX");
 if (!
$con)die('Keine Verbindung zur Datenbank' mysql_error());
 
 
mysql_select_db("XXXXXXX") or die("Datenbank nicht vorhanden");

/** Umlaute**/
 
mysql_query("SET NAMES 'utf8'");
 
mysql_query("SET CHARACTER SET 'utf8'");
 
/** Tabelle erstellen und auswählen**/
 
 
echo "<table border='1'><tr>";
 
 
$sortBy = (isset($_GET["sortBy"])) ? $_GET["sortBy"] : mysql_field_name(mysql_query("SELECT * FROM " TABLENAME), 0);
 
$direction = (isset($_GET["direction"])) ? $_GET["direction"] : "DESC";
 
  
$sql "SELECT * FROM " TABLENAME .  " ORDER BY " $sortBy " " $direction;
 
$query mysql_query($sql);
 
$feldcontainer = array();
 
/** Differenz berechnen**/

  
function seDay($begin,$end,$format,$sep)  //Hab ich heute eingefügt
{    
    
    
$pos1    strpos($format'd');
    
$pos2    strpos($format'm');
    
$pos3    strpos($format'Y'); 
    
    
$begin    explode($sep,$begin);
    
$end        explode($sep,$end);
    
    
$first     GregorianToJD($end[$pos2],$end[$pos1],$end[$pos3]);
    
$second    GregorianToJD($begin[$pos2],$begin[$pos1],$begin[$pos3]);
    
    if(
$first $second)
        return 
$first $second;
    else
        return 
$second $first;
    
}

$timeA    'Datum_Abmeldung';
$timeB    'Zeit';

$diff seDay($timeA,$timeB,"dmY",".");
echo 
'Die Differenz betraegt ' $diff ' Tage';

echo 
"<br>\n";

 
/** Spalten **/

 
echo "<tr>";
 
 for(
$i 0; @$feld mysql_field_name($query$i); $i++):
 
 echo 
"<td align='center'><strong>" $feld " <a href='?sortBy=$feld&direction=ASC'>&uarr;</a> &nbsp; <a href='?sortBy=$feld&direction=DESC'>&darr;</a>" "</strong></td>";
 
 
$feldcontainer[$i] = $feld;
 
 endfor;
 
 echo 
"</tr>";
 
 
/** Zeilen **/
 
if(mysql_num_rows($query)):
 
 while(
$row mysql_fetch_object($query)):
 
 echo 
"<tr>";
 
 foreach(
$feldcontainer AS $key => $value):
 
 
/** $key und nächstes if werden nur für die Spaltenfarbe benötigt **/
 
 
if($key == null): $col "#ffffff"; else: $col "#EEEEFF"; endif;
 
 echo 
"<td bgcolor='$col'>" $row->$value "</td>";
 
 endforeach;
 
 echo 
"</tr>";
 
 endwhile;
 
else: echo 
"<tr><td colspan='" count($feldcontainer) ."'>Es befinden sich keine Eintr&auml;ge in der Datenbank</td></tr>";
 
endif;
?>

In der Ausgabe sieht das dann aus wie hier. Das mit der Differenz ist natürlich neu.
Die Tabelle ist leider zu breit um sie mit einem Screenshot einzufangen, aber ich glaube es wird klar worum es geht?! Ganz rechts hätte ich nun gerne die Differenz aus "Datum_Abmeldung" und "Zeit" in Tagen stehen...

Für Tipps und Ideen bin ich sehr dankbar!

Liebe Grüße

vt1816 01.11.2016 13:48:56

AW: Differenz in Tagen in Tabelle ausgeben
 
Die Anzeige 'Die Differenz betraegt 0 Tage' beruht auf diesem Fehler

PHP-Code:

$timeA    'Datum_Abmeldung';
$timeB    'Zeit';

$diff seDay($timeA,$timeB,"dmY",".");
echo 
'Die Differenz betraegt ' $diff ' Tage'

Wie soll hier eine Differenz errechnet werden wenn Du Text in die Variablen schreibst?

Wenn - auf Grund der noch immer geheimgehaltenen Datenbanktabellenstruktur - ich Dich aber dennoch richtig verstanden habe, gibt es (noch) keine Spalte für die Differenz in Tagen.

Daher füge eine weitere Spalte in den (Anzeige-)Tabellenaufbau ein und fülle das so neu gewonnene Feld mit der Berechnung aus 'Datum_Abmeldung' und 'Zeit'.


PS: $feldcontainer[$i] ist eine Variable (Array) in dem die Feldnamen Deiner Datenbanktabelle gesammelt werden, um weiter unten im Code den Inhalt des jeweiligen Feldes in der (Anzeige-)Tabelle darstellen zu können.

fieliepae 01.11.2016 16:12:20

AW: Differenz in Tagen in Tabelle ausgeben
 
Es sind eigentlich alles Textfelder außer den zwei Datumspalten und der id Spalte.

Hier die Struktur.

Die letzte Spalte soll der Berechnung der Differenz dienen, nur leider weiß ich nicht wo bzw. wie ich genau dieser Spalte die Berechnung zuordnen kann... Geht das mit phpMyAdmin?

Vielen Dank schon mal für den Tipp, ich probiere ein bisschen rum!

vt1816 01.11.2016 16:19:33

AW: Differenz in Tagen in Tabelle ausgeben
 
Wieso ist das Feld Differenz-Datum ein Text-Feld? Was steht zzt. bei der Anzeige der Tabelle im Feld Differenz_Datum?

Wie sieht Dein INSERT-Statment aus (alte Werte lassen sich nachtragen, neue gleich beim Speichern berechnen - dann ersparst Du Dir den unnötigen Anzeigekram)? Für gleichen Inhalt sollten auch die gleiche Art von Feldtypen benutzt werden.

In diesem Zusammenhang noch: benutze zukünftig mysqli - mysql ist veraltet.

fieliepae 01.11.2016 16:40:52

AW: Differenz in Tagen in Tabelle ausgeben
 
Oh, das war ursprünglich mal ein DATE Feld... Da hatte ich nur was ausprobiert. Deshalb steht da im Moment: 0000-00-00 00:00:00 Sollte ich die Datumsfelder lieber alle auf TIMESTAMP stellen?

Zum Eintragen benutze ich ein E-Mail Formular von website x5.... An den Code komme ich nicht ran. Ich kann für jede Spalte "Namen des Felds in der Datenbank" sowie "Attribut <name>" angeben. Mehr leider nicht...


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:14:41 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.