Zur Navigation

Daten aus php-Datei einlesen und ausgeben [2]

11 Rudy

das Semikolon fehlt in der vorherigen Zeile.

und nur vom Anschauen her sehe ich in diesem Code-Abschnitt 5 Fehler:
    $von[$i]= . $dates['from'] .;
    $bis[$i]= . $dates['until'] .;

$i=$i+1; //<<fehlt

btw. $i=$i+1; ist $i++;

20.11.2007 20:03 | geändert: 20.11.2007 20:06

12 uwe

Hallo,
danke,
das war meine erste Arbeit mit arrays.

Vielen Dank, jetzt komme ich weiter.

Gruss
Uwe

21.11.2007 07:23

13 uwe

Hallo,
es habert bei der Berechnung.

Ich merke langsam, das diese wenn und aber ganz schön kniffelig sind:

Folgendes soll berechnet werden:

Wenn heute min. 3 Tag vor dem nächsten Anreisetag liegen soll,
>> Es es ist noch bis ??? frei >>
Gleichzeitig soll der nächste freie Termin danach gezeigt werden.
(aber die Dauer soll min 3 Tage sein, sonst nach der nächsten Lücke suchen und dort die Dauer suchen.

Bei dem Beispiel:
wenn heute der 25.11.2007 ist soll angezeigt werden: (2Zeilen)
Die Wohnung ist ab heute bis 30.11.2007 frei.
Ab 10.12.2007 bis 16.12.2007 ist die wieder Wohnung frei.

So ist jetzt die Datenbank:
<?php
  $calendar[1]['object'] = 'Testerienhaus';
  $calendar[1]['descr'] = '';
  $calendar[1]['showfrom'] = 'heute';
  $calendar[1]['showuntil'] = '31.12.2008';
  $calendar[1]['dates'][0]['sort'] = 2454380;
  $calendar[1]['dates'][0]['from'] = '06.10.2007';
  $calendar[1]['dates'][0]['until'] = '14.10.2007';
  $calendar[1]['dates'][0]['comment'] = '- Baffsckhaus';
  $calendar[1]['dates'][1]['sort'] = 2454388;
  $calendar[1]['dates'][1]['from'] = '30.11.2007';
  $calendar[1]['dates'][1]['until'] = '05.12.2007';
  $calendar[1]['dates'][1]['comment'] = '- Hodfsßbach';
  $calendar[1]['dates'][2]['sort'] = 2454408;
  $calendar[1]['dates'][2]['from'] = '05.12.2007';
  $calendar[1]['dates'][2]['until'] = '10.12.2007';
  $calendar[1]['dates'][2]['comment'] = '- Lsdfgaukel';
  $calendar[1]['dates'][3]['sort'] = 2454423;
  $calendar[1]['dates'][3]['from'] = '16.12.2007';
  $calendar[1]['dates'][3]['until'] = '20.12.2007';
  $calendar[1]['dates'][3]['comment'] = '- Steffffan';
  $calendar[1]['dates'][4]['sort'] = 2454465;
  $calendar[1]['dates'][4]['from'] = '30.12.2007';
  $calendar[1]['dates'][4]['until'] = '06.01.2008';
  $calendar[1]['dates'][4]['comment'] = '- Werfffner';
  $calendar[1]['dates'][5]['sort'] = 2454541;
  $calendar[1]['dates'][5]['from'] = '15.03.2008';
  $calendar[1]['dates'][5]['until'] = '29.03.2008';
  $calendar[1]['dates'][5]['comment'] = '- Mfdsüller';

  $calendar[1]['dl']['geaendert'] = 1;
?>

so wird die Datenbank angezeigt
30.11.2007 - 05.12.2007

05.12.2007 - 10.12.2007

16.12.2007 - 20.12.2007

30.12.2007 - 06.01.2008

15.03.2008 - 29.03.2008

hier mein code
<html>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<head>
<title>Belegung</title>
</head>
<body>

<?php
include ("daten.php");
 

foreach ($calendar[1]['dates'] as $dates) {
   if (isset($dates['from'])) {
        $time = explode('.', $dates['until']);
       $timestamp = mktime(0, 0, 0, $time[1], $time[0], $time[2]);
       if ($timestamp > time()) {
// die nächste Zeile braucht man nicht, dient nur zur HIlfe
          echo "<p>" . $dates['from'] . " - " . $dates['until'] . "</p>";


            $von[]=  $dates['from'] ;
	    $bis[]=  $dates['until'] ;

$anzahl++;

       }
   }
}
 


$heute = mktime(0, 0, 0, date("m"), date ("d"), date("Y"));
// die nächste Zeile ist zum Testen vom Datum
//$heute  = mktime(0, 0, 0, 11, 23, 2007);


for ($z=0; $z<$anzahl; $z++) {

        $year[$z] = substr($von[$z], 6,4);  $year[$b] = substr($bis[$z], 6,4);
        $month[$z] = substr($von[$z], 3, 2); $month[$b] = substr($bis[$z], 3, 2);
        $day[$z] = substr($von[$z], 0, 2);   $day[$b] = substr($von[$z], 0, 2);
        $datum[] = mktime(0,0,0,$month[$z],$day[$z],$year[$z]); 
        $datumbis[] = mktime(0,0,0,$month[$b],$day[$b],$year[$b]); 
}


echo "anzahl Buchungen (nur nur Info) $anzahl"."<br>";


$resttage= floor(($datum[0] - $heute ) / 86400);     
if ($heute < $datum[0]) { echo "noch " . $resttage ."Tage bis zur nächsten Buchung";}
if ($heute > $datum[0]) { echo "vor " . $resttage ."Tagen war die Buchung";}
echo "<br>";


$eintermin = 0;


//if ($resttage >0) {echo "die Wohnung ist ab sofort bis " . $von[0] . " frei.<br> " .$resttage ." Tage Urlaub an der Nordsee können sorfort beginnen.";}


if ($datum[1] - $datumbis[0] > 1) {echo "die Wohnung ist vom " . $bis[0] . " bis " .$von[1] ." frei Tage Urlaub an der Nordsee können sorfort beginnen.";}
echo "<br>";


if (($datum[1] - $datumbis[0]) > 87000)  {$freibis = $von[1]; $freivon= $bis[0]; $eintermin = 1;}


// Hier habert es mit der Berechnung !!
// 180000 ist mehr als 2 Tage oder anders?
if (($datum[1] - $datumbis[0]) > 180000 && ($eintermin != 1) && ($datum[1] != $datumbis[0])) {$freivon = $von[0]; $freibis= 9999; $eintermin = 1;}
if (($datum[2] - $datumbis[1]) < 180000 && ($eintermin != 1) && ($datum[2] != $datumbis[1])) {$freivon = $von[1]; $freibis= $bis[0]; $eintermin = 1;}
if (($datum[3] - $datumbis[2]) < 180000 && ($eintermin != 1) && ($datum[3] != $datumbis[2])) {$freivon = $von[2]; $freibis= $bis[1]; $eintermin = 1;}
if (($datum[4] - $datumbis[3]) < 180000 && ($eintermin != 1)) {$freivon = $von[3]; $freibis= $bis[2]; $eintermin = 1;}
if (($datum[5] - $datumbis[4] > 180000) && ($eintermin = 0)) {$freivon = $von[4]; $freibis= $bis[3]; $eintermin = 1;}
if (($datum[6] - $datumbis[5] > 180000) && ($eintermin = 0)) {$freivon = $von[5]; $freibis= $bis[4]; $eintermin = 1;}
if (($datum[3] - $datumbis[6] > 180000) && ($eintermin = 0)) {$freivon = $von[6]; $freibis= $bis[5]; $eintermin = 1;}
if (($datum[4] - $datumbis[7] > 180000) && ($eintermin = 0)) {$freivon = $von[7]; $freibis= $bis[6]; $eintermin = 1;}

echo "<br>";
echo "---------------------";

if ($freivon > $heute) {$freivon = date("d.m.Y", $heute);}

echo "<br>";

if ($resttage >2) {echo "die Wohnung ist ab sofort bis " . $von[0] . " frei.";}
echo "<br>";
if ($eintermin = 1) {echo "die Wohnung ist vom " . $freibis . " bis " .$freivon ." frei ";}


?>
</body>
</html>

25.11.2007 22:04

14 Jörg Kruse

Hallo Uwe,

ein Fehler, den du vermiden solltest: in if Anweisungen solltest du doppelten Gleichheitszeichens verwenden:

if (($datum[5] - $datumbis[4] > 180000) && ($eintermin == 0)) {$freivon = $von[4]; $freibis= $bis[3]; $eintermin = 1;}

Einfache Gleichheitszeichen bewirken eine Zuweisung

Ebenso die letzte if Anweisung:

if ($eintermin == 1) {echo "die Wohnung ist vom " . $freibis . " bis " .$freivon ." frei ";}

Hinzu kommt hier m.E. das Problem, dass sich die betreffenden Variablen nur auf die letzte der obigen if Anweisungen beziehen:

if (($datum[4] - $datumbis[7] > 180000) && ($eintermin == 0)) {$freivon = $von[7]; $freibis= $bis[6]; $eintermin = 1;}

Die Variablen $freivon, $freibis, $eintermin überschreiben ja jeweils diejenigen der vorhergehenden Zeilen. Geprüft wird im Endeffekt also nur $datum[4] - $datumbis[7] > 180000

26.11.2007 11:03 | geändert: 26.11.2007 11:04

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]