PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   letzte hoffnung (http://www.selfphp.de/forum/showthread.php?t=9129)

exweised 22.11.2004 20:12:03

letzte hoffnung
 
hallo, ihr seit jetzt meine letzte hoffnung, nachdem ich den ganzen tag rumprobiert habe, aber kein erfolg verbuchen konnte.

ich habe in einer datenbanktabelle 2 spalten mit datums im format jjjj-mm-tt. eine spalte ist 'datum von' und die andere 'datum bis'. zB. steht folgendes drin:

2004-11-21 | 2004-11-22
2004-11-23 | 2004-11-23
2004-11-25 | 2004-11-27
2004-11-31 | 2004-12-02

jetzt habe ich ein formular, wo man halt dieser tabelle neue daten hinzufügen kann. vor dem eintragen soll aber erst überprüft werden, ob der zeitraum der datums auch noch frei ist - genau da liegt nämlich mein problem.

nach absenden des formulars werden alle vorhandenen datums aus dieser tabelle ausgelesen. dann speicher ich diese in 2 arrays:

PHP-Code:

while( $result = @mysql_fetch_array($select) )
{
$db_date_from[] = $result['date_from'];
$db_date_to[] = $result['date_to'];


dann muss ich irgendwie kontrollieren, ob dass eingetragene datum von aus dem formular nicht schon in der db-tabelle steht. nur ich weis nicht, wie ich das anstellen soll. zumal gibts ja auch länge, über mehrere tage hinweggestreckte datums.

ich hatte schon zig varianten gehabt, aber irgendwie kann ich in den lücken, wo ja auch wirklich was frei ist, nix eintragen. zB. wäre der 24.11.2004 ja noch platz und da dürfte ich ja eigentlich eintragen, aber es ging nicht. ich hatte auch schon erst mal die datums umgewandelt mit mktime(), weil ich dachte das es damit besser klappt, aber nix. mein kopf raucht.

könnt ihr mir tipps geben?

feuervogel 22.11.2004 22:36:10

also. zuallererst speichert man daten nicht so, sondern als unix-timestamp.

$timestamp = <zeitpunktdenduwissenwillst>;

und dann im sql:

SELECT
COUNT( id ) AS amount
FROM
tabelle
WHERE
$timestamp >= datum_von AND
$timestamp <= datum_bis

wenn nun $mysqlresult[ 'amount' ] == 1 ist, steht schon was in der db für den zeitraum, wenn nicht, dann nicht.

okay, das ganze jetzt noch für die beiden eingeben anfangs- und end-daten, dann hast dus...

exweised 23.11.2004 11:41:11

also so ganz verstehe ich deine variante nicht. :(

ich hab doch auch die möglichkeit bei phpmyadmin den type DATE zu wählen, wo dann die datums im jjjj-mm-dd format gespeichert werden.

ich muss ja vorm eintragen bei allen vorhandenen einträgen überprüfen, ob der zeitraum noch frei ist. deshalb verstehe ich auch nicht, warum du in deiner sql-abfrage mit WHERE gearbeitet hast. ?!

c4 23.11.2004 11:49:34

Zitat:

Original geschrieben von exweised
ich hab doch auch die möglichkeit bei phpmyadmin den type DATE zu wählen, wo dann die datums im jjjj-mm-dd format gespeichert werden.
Da Du nicht gesagt hast, dass das Feld vom Typ DATE ist, ist das Vögelchen zu Recht davon ausgegangen, dass Du die Zeit als String speicherst.

Zitat:

ich muss ja vorm eintragen bei allen vorhandenen einträgen überprüfen, ob der zeitraum noch frei ist. deshalb verstehe ich auch nicht, warum du in deiner sql-abfrage mit WHERE gearbeitet hast. ?!
Die Idee vom Piepmatz ist, dass er prüft, ob in dem gewählten Zeitraum Einträge vorhanden sind. Wenn nicht, dann ist amount=0, sonst >0 Damit kannst Du dann auch einfach sagen 'Ja, frei' oder 'Nein, nix frei'.

exweised 23.11.2004 12:04:05

Zitat:

Original geschrieben von _c_4_
Da Du nicht gesagt hast, dass das Feld vom Typ DATE ist, ist das Vögelchen zu Recht davon ausgegangen, dass Du die Zeit als String speicherst.
achso, ok. dachte das wäre selbstverständlich. ;-)
geht es also auch damit oder muss ich trotzdem in timestamp ändern?

Zitat:

Original geschrieben von _c_4_
Die Idee vom Piepmatz ist, dass er prüft, ob in dem gewählten Zeitraum Einträge vorhanden sind. Wenn nicht, dann ist amount=0, sonst >0 Damit kannst Du dann auch einfach sagen 'Ja, frei' oder 'Nein, nix frei'.
alles klar, jetzt habe ich seine idee verstanden.

c4 23.11.2004 12:04:53

Kannst Du getrost bei DATE belassen.

exweised 23.11.2004 13:00:35

bei mir ist amount immer 0, obwohl das datum eigentlich vergeben ist!?

c4 23.11.2004 13:02:55

Zeig mal den Code.

exweised 23.11.2004 13:08:53

PHP-Code:

$sql "SELECT COUNT(id) AS amount FROM tabelle WHERE date_from >= '" $date_from "' AND date_to <= '" $date_to "'";

$select mysql_db_query($db$sql$verbindung);

$result mysql_fetch_array($select);

echo 
$result['amount']; 

setz ich das $result = my... in eine while-schleife kommt auch nur null raus. bei mysql_num_rows kommt nix raus.

exweised 23.11.2004 13:33:38

lasse ich die WHERE-bedingung weg, zählt er mir mehr als 0 treffer, logisch. ich schlussfolgere einfach mal daraus, dass das mit >= & <= nicht funktioniert. wie auch? wenn eingegebenes datum_von größer als datenbank datum_von & eingegebenes datum_bis kleiner als datenbank datum_bis ... ??


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:41:19 Uhr.

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