Werte aus Datenbank in Array Problem

Pase89

Grünschnabel
Guten morgen,

ich hab jetzt mal die letzten paar Stunden damit verbracht die Suche zu diesem Thema zu durchstöbern, leider bin ich nicht fündig geworden.
Ich denke ihr könnt mir sicherlich bei meinem Problem helfen.

Ich bin gerade dabei einen Belegungskalender zu programmieren. Dazu habe ich eine Tabelle mit folgenden Spalten:
id_kdnr
kdnr
von
bis
wert

Relevant sind für dieses Problem nur die Spalten von (timestamp),bis (timestamp) und wert (integer zahlen 1-4).

Nachdem ich nun die Werte abgefragt habe, versuche ich diese in ein Array zu speichern, welches n-Tage (je nach Monat) groß ist und primär mit der Zahl 1 gefüllt
ist (dieser Kalendertag ist nicht belegt). Jetzt frägt er den Zeitraum ab und plötzlich bekomme ich alle Tage rot für belegt angezeigt, obwohl nur der Zeitraum z.B. 18.09.09 - 21.09.09 rot sein soll.
Nun die Frage wie bekomme ich das hin. Ich vermute mal das es am Speichern in das Array liegt.

Schauts euch mal an, dann wird es glaube ich deutlicher:

PHP:
// Erzeuge Array Belegung 				 
$belegung = array_fill(1,$t,1); 
				 	
       for ($g=0; $g <= $t; $g++){ 				 
           $zaehler_t = $g;  				 	
           $timestamp2 = mktime(1,0,0,$monat,(1+$zaehler_t),$jahr); 	      
           $abfrage = 'SELECT * FROM 100_1 WHERE (von =  1251756000)'; // Dummy - Abfrage
           $ergebnis = mysql_query($abfrage);
                 while ($row = mysql_fetch_row($ergebnis)){ 
	      $belegung[$g]  = $row[4]; 
                   }  
             }   


Ausgabe ergibt: 222222222222222222222222222222

Normal sollte da jetzt 1111111111111111122221111111111 stehen. Laut Dummy - Daten von oben.

(Sorry die Formatierung hat es ein bisschen verschoben)

Vielen Dank schonmal im Voraus für eure Hilfe.

Gruß Pase89
 
Hi,

ohne das jetzt irgendwie ausprobiert zu haben würde ich sagen, daß du bei jedem for Durchlauf immer den selben Datensatz holst, da 'von' mit einem fixen Wert verglichen wird. $timestamp2 dürfte wohl die Lösung sein, aber die wird da nie verwendet.
 
Ja, das habe ich als erstes probiert. Sprich die Abfrage lautete folgendermaßen:

Für folgenden Wert:

id_kdnr kdnr von bis wert
164 100 1251756000 1251842400 2

PHP:
$abfrage = 'SELECT * FROM 100_1 WHERE (von = "'.$timestamp2.'")';

Das Ergebnis lautet: 111111111111111111111111111111

Also irgendwie gibt der mir das dann nicht mehr aus. Liegt es vielleicht am Übergeben an das Array?

Wäre sehr dankbar für einen Lösungsvorschlag. Verzweifel gerade ein wenig
 
Das Feld von hat den Typ timestamp, richtig?
Wenn dem so ist, darfst du keine Quotes benutzen.
PHP:
$abfrage = 'SELECT * FROM 100_1 WHERE (von = '.$timestamp2.')';

Lass dir den Inhalt von $timestamp2 bitte auch in jedem Schleifendurchlauf ausgeben, um zu prüfen ob er auch wie erwartet aussieht.
 
Relevant sind für dieses Problem nur die Spalten von (timestamp),bis (timestamp) und wert (integer zahlen 1-4).

Also wenn die Spalte "von" Datentyp TIMESTAMP ist, kann man sie IMHO nicht mit einem Integeren Wert vergleichen. MySQL's TIMESTAMP Typ ist alles andere nur kein UNIX-Zeitstempel. Wenn du Unix-Zeitstempel in der DB speichern willst, musst du wohl oder Übel INTEGER nehmen. Das habe ich vor einiger Zeit auch falsch gemacht. Hier ein Eintrag im MySQL Bug-Report:

http://bugs.mysql.com/bug.php?id=24895
 
Sorry, hab ich wohl nicht gut genug erklärt, die Spalten von und bis sind vom Typ Integer. Dort wird ein Timestamp drin gespeichert.

Trotzdem danke, hätte ja durchaus sein können. War es aber nicht :-)
 
Also der Fehler ist behoben, ich habe die Abfrage fetch object eingesetzt, dann zeile->wert. Außerdem hatte ich den Fehler, dass ich die GMT + 1 Zeit nicht berücksichtigt habe, so habe ich ständig den 31.August, anstelle des 1.Septembers herausbekommen. Auch lag das Problem an den Indexen, dass ich den ersten des Monats auf Index 0 hatte, eigentlich aber Index 1 damit verbunden wurde.

Nachdem ich nun alles behoben habe, kommten auch die richtigen Werte raus und mein Belegungskalender ist Belegt!

Vielen Dank für eure Hilfe.

Gruß

Pase89
 
Warum machst du es nicht einfach umgedreht, also das Array für jeden Tag mit 1 befüllen und dann nur die Datenbank für den ganzen Monat auslesen. Aus dem jeweiligen timestamp kannst du das Datum ermitteln und damit auch den Schlüssel des Arrays. Dann einfach den ausgelesenen Wert eintragen.
Damit sparst du dir die äußere Schleife und bist unabhängig davon, daß $timestamp2 exakt mit dem eingetragenen Wert übereinstimmen muß.
 
Zurück