Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Datumsberechnung

So, bin schon seit gestern an diesem Problem dran und komme einfach nicht weiter, ich hasse so einen Stillstand!

Ich will eigentlich nur eine Berechnung von 2 Daten tätigen. Das Ergebnis soll mir die Differenz der beiden Daten in Tage ausgeben, mehr nicht..

[CODE]// Variabeln aus dem Formular auslesen und verarbeiten
$von_datum = $_POST['von'];
$bis_datum = $_POST['bis'];

// Liegt ein Versuch von SQL-Injection vor?
$von = quotesqlvar($von_datum); // quotesqlvar setzt einfach ein "/" vor das Wort, damit keine SQL-Injection geschehen kann.
$bis = quotesqlvar($bis_datum);

// Verarbeiten: Es wird mit einem MySQL Befehl die Differenz berechnet.
$differenz = "DATE_SUB('$bis','$von');"; //MySQL Befehl

// Abspeichern in der MySQL Datenbank -- quotesqlvar schützt vor SQL-Injection
$sql_insert = "INSERT INTO Krankheit(Mandant,persnr,differenz,von,bis,bezug) "
."VALUES "
." ('".quotesqlvar($mandant)."','".quotesqlvar($pnr)."', "
." '$differenz','$von', "
." '$bis','$bezug');";

tja, soweit so gut... logisch sollte es funktionieren, aber es funktioniert nicht :(... bräuchte Hilfe :)

Hier gehts zum Orginal Eintrag "Datumsberechnung" im Forum

Antworten

um $differenz sind noch ' die da nicht hingehören.. wenn du eine mysql-funktion aufrufen willst darfst du keine String-Begrenzer davor und dahinter machen..
Die Fehlermeldung von mysql_error();
hätte Dir und uns vielleicht schnell weitergeholfen, also immer mysql_error() abfangen und mitposten..
[doc]mysql_error[/doc]


2.

DATE_SUB funktioniert nur, wenn du diesen Befehl auch in der Abfrage verwendest... Weiterhin speichert man keine Daten ab, die sich aus einer Berechnung ergeben... Die holt man sich erst beim Auslesen aus der Datenbank...
http://ffm.junetz.de/members/reeg/DSP/node7.html#SECTION03323000000000000000

Um die Differenz über PHP zu berechnen, müsstest du beide Werte erst in einen Timestamp umwandeln [doc]strtotime[/doc] und dann wieder umrechnen... Aber wie bereits geschrieben, keine Prozeßdaten in der Datenbank ablegen.


3.

@Benni: Habe ich getan, jedoch nicht mitgepostet, es kommt jedoch nur dieser Fehler zustande:

Das ist der INSERT Befehl:
Zitat:
INSERT INTO Krankheit(Mandant,persnr,differenz,von,bis,bezug) VALUES ('','', 'DATE_SUB('05.08.2006','01.08.2006');','01.08.2006', '05.08.2006','0');

Das ist die Wiedergabe von mysql_error():
Zitat:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '05.08.2006','01.08.2006');','01.08.2006', '05.08.2006','0')' at line 1

@Gary:
Wenn ich die Differenz aber abspeicher, erleichtert es mir die ganze Abfrage im Nachhinein... denn da sind unter anderem auch noch andere daten miteinzubeziehen und aus diesen soll erst einmal die differenz gebildet werden und aus der differenz die summe.

Beispiel:

01.08.06 - 05.08.06; Differenz: 4 Tage
06.08.06 - 16.08.06; Differenz: 10 Tage
...
Bilden der Summe aus der Differenz ergibt dann halt 14 Tage und diese 14 Tage müssen dann weiterverarbeitet werden. Daher sah ich darin eine Erleichterung in der Verarbeitung der Datenbestände, weil man so ganz leicht kontrollieren kann, ob meine Befehle auch alles richtig verarbeiten.

NACHTRAG an Gary:
Die Daten, die ich verarbeite sind in diesem Sinne keine Prozeßdaten, trotzdem danke für den Hinweis :). Die Daten werden nur einmal eingegeben und danach nicht mehr verändert.


4.

Habe noch eine Frage und zwar wird mit meinem Link

..../neu.php?mandant=1&pnr=1

zwei Variabeln übergeben, die beide Werte enthalten, wie man sehen kann.

Diese lese ich mittels $_GET aus:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Jedoch, sobald ich das Formular beende, mittels Submit, und der zweite Teil meines Scripts in Aktion tritt, also die Verarbeitung des Formulars, sind die Variabeln nicht mehr richtig verfügbar, sprich sie haben keine Werte mehr.

Was mach ich da falsch?


5.

kann mir denn keiner mehr weiterhelfen?


6.

Pah, fast hätt ich geantwortet, aber mit drängeln gibts nix ;)

Okay, wir sind mal nicht so:
Übergibst du die Werte überhaupt irgendwo in dein Formular, also als hidden-input oder ähnliches?
wenn du das Formular per POST schickst musst du $_POST statt $_GET benutzen..
Code:                   In Zwischenablage kopieren (nur IE)
2">




7.

Hoi :)

Solang du keine Hidden Input oder Sessions benutzt sind "alle" Variablen nach nem Reload weg :)

Darum hat man die Dinger erfunden.


8.

Zitat:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '05.08.2006','01.08.2006');','01.08.2006', '05.08.2006','0')' at line 1

Die Fehlermeldung ist doch wohl eindeutig... Ein Blick hierein:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
hätte dir erstens gesagt, dass Datumsangaben im amerikanischen Format zu erfolgen haben (JJJJ-MM-TT) und das DATE_SUB die komplett falsche Funktion ist. Probier es mal mit DATEDIFF()...

Zitat:
Wenn ich die Differenz aber abspeicher, erleichtert es mir die ganze Abfrage im Nachhinein... denn da sind unter anderem auch noch andere daten miteinzubeziehen und aus diesen soll erst einmal die differenz gebildet werden und aus der differenz die summe.

Das eine hat aber mit dem anderen erstmal nichts zu tun... Worin besteht denn die Schwierigkeit in deinem SELECT-Statement die Funktion DATEDIFF anzuwenden. Für mich sind es immer noch Prozeßdaten und daher ist es IMHO falsch, wenn du sie in der Datenbank abspeicherst....

Zitat:
Bilden der Summe aus der Differenz ergibt dann halt 14 Tage und diese 14 Tage müssen dann weiterverarbeitet werden. Daher sah ich darin eine Erleichterung in der Verarbeitung der Datenbestände, weil man so ganz leicht kontrollieren kann, ob meine Befehle auch alles richtig verarbeiten.

Ja, ja, so mit Klammern und so zu rechnen ist nicht so einfach...

Zitat:
kann mir denn keiner mehr weiterhelfen?

Zitat:
Pah, fast hätt ich geantwortet, aber mit drängeln gibts nix

Benni war ja noch lieb. Ich drück mich mal nicht ganz so gewählt aus:
Halt mal die Füße still!!! 24/7-Support gibt es nur in Bezahlforen. Falls du so einen Service möchtest, such dir bitte eins! Überleg mal, wo du hier bist. Hier helfen dir Leute kostenlos in ihrer Freizeit!!! Wenn du unter Zeitdruck stehen solltest, ist das nicht unser Problem!!


9.

Zitat:
Benni war ja noch lieb. Ich drück mich mal nicht ganz so gewählt aus:
Halt mal die Füße still!!! 24/7-Support gibt es nur in Bezahlforen. Falls du so einen Service möchtest, such dir bitte eins! Überleg mal, wo du hier bist. Hier helfen dir Leute kostenlos in ihrer Freizeit!!! Wenn du unter Zeitdruck stehen solltest, ist das nicht unser Problem!!

Tut mir leid für mein Drängeln, dieses Forum ist so ziemlich das beste Forum in Sachen Programmierung, Schnelligkeit,etc. Ein Bezahlforum kann ich mir sicherlich nicht leisten und ist auch nicht im geringsten so gut wie dieses hier.dazu kommt, dass ich nicht unter Druck arbeite, aber vlt. hattest du ja schon mal so ne Situation, wo du einfach nicht weiterkamst und alle in andere Threads geantwortet haben, nur nicht in deinem.

Und genau dieses Gefühl hatte ich halt. Aber deswegen musst du nicht gleich aggressiv werden, denn das bringt niemanden weiter.


@Benni: Nein, habe die nicht per Hidden Input verschickt, sondern die Variabeln einfach in die URL gepackt, danach ausgelesen und das wars. Versuche es dann mal mit nem hidden Input, danke für den Tipp :).


10.

Zitat:
Und genau dieses Gefühl hatte ich halt. Aber deswegen musst du nicht gleich aggressiv werden, denn das bringt niemanden weiter.

Ich bin nicht aggressiv. Du warst heute nur schon der zweite oder dritte der gedrängelt hat... War halt leider Pech :) Aber du hast es jetzt hoffentlich verstanden...


11.

jo alles klar, verstehen tu ich dich ja, sehe auch meinen fehler ein... danke noch mal :)


Hier gehts zum Orginal Eintrag "Datumsberechnung" im Forum
 
phpforum.de | Impressum | Handy Bundles