Zur Navigation

Textdatei einlesen, start mit Tagesdatum

1 uwe

Hallo,
ich lese eine Textdatei ein und filtere das Datum vorne raus. Es sollen alle Daten GRÖSSER= als das Tagesdatum und kleiner
als das Tagesdatum +30 gezeigt werden.
Das Programm filtert schon richtig--startet aber nicht auf Seite 1 mit dem Tagesdatum

<?php

$progname = "stand.php";
$daten_per_site = 25;


if(isset($_GET['seite'])) {
$seite = preg_replace ("/[^0-9]/", "",  $_GET['seite']);




if(!isset($seite) ) {$seite = 1;
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="de-de"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
<style>
body {
background-color: #f7f7f7;
font-family: Verdana, Arial;
font-size: 11px;
color: #000000;
}
.sitenav {
background-color: #000066;
}
.sitenav td {
background-color: #e9ebef;
padding: 3px;
font-size: 11px;
text-align: center;
}
.sitenav td a {
color: #990000;
text-decoration: none;
}
.sitenav td a:hover {
color: #000066;
text-decoration: none;
}

</style></head>


<table bgcolor=white  border=1 width=630 ><tr><td >



<H2>Seite <?php echo $seite; ?></H2>


<?php

/


$fp = daten.txt;


# Zeilenanzahl der Datei festellen
$zeilen = count($fp);


# Limit fuer Query erstellen - Eintraege pro Seite
$anz = ($seite-1) * $daten_per_site;

if ($zeilen > 0) {


$navigationslinks = sitenavi($zeilen, $seite, $daten_per_site, $progname);

echo "$navigationslinks\n";
?>


<TABLE style="font-family:verdana; empty-cells:show; font-size: 12px" border="1" align="center" width="100%">
    <tr>
      <td
 style="text-align: center; background-color: rgb(204, 204, 204);"
 colspan="3" rowspan="1" >Stand1</td>
      <td
 style="text-align: center; background-color: rgb(204, 204, 204);"
 colspan="3" rowspan="1" >Stand2</td>
    </tr>
    <tr bgcolor="#cccccc">
      <td>Datum</td>
      <td>Tag</td>
      <td>Zeit</td>
      <td>Datum</td>
      <td>Tag</td>
      <td>Zeit</td>
    </tr>
<?php
//echo "<ul>\n";

$j = date('Y');
$m = date('m');
$d = date('d');
$heute = mktime(0,0,0,$m,$d,$j);
//bis ist immer 30 Tage +heute
$bis = mktime(0,0,0,$m,$d+30,$j);
$test1 = 0;

//for ($i = $anz;  $i <= ($anz-1) + $daten_per_site; $i++) {
for ($i = $anz;  $i <= ($anz-1) + $daten_per_site; $i++) {
$daten = explode("|",$fp[$i]);

        $year[0] = substr($daten[0], 6,4);
        $month[0] = substr($daten[0], 3, 2);
        $day[0] = substr($daten[0], 0, 2);
//die Variable Test erste Datumsfeld in der Textdatei
        $test = mktime(0,0,0,$month[0],$day[0],$year[0]);

// Prüfung ob das Datum in der Textdatei größer = heute und kleiner als das Datum in 30 Tagen
if ($daten[0] != ''&& $test >= $heute  && $test < $bis) {
if ($test1 == 0) {$test1 = $anz / $daten_per_site;}

$seite =0 ;

 print("<TR>

<td>$daten[0]</td>
<td>$daten[1]</td>
<td>$daten[2]</td>
<td>$daten[3]</td>
<td>$daten[4]</td>
<td>$daten[5]</td>
</tr>");

}
}


//echo "</ul>\n";
//echo "$navigationslinks\n";

} else {
echo "Keine Daten gefunden!\n";
}

echo "</TABLE>\n";
echo "</TABLE>\n";


    echo "$navigationslinks\n";
//echo "</body>\n</html>\n";

//$seite = $test1 - $seite;


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
// Seitennavigation
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
function sitenavi($zeilen, $seite, $pro_seite, $url) {

// Anzahl der Gesamtseiten
$gesamtseiten = ceil($zeilen / $pro_seite);


//$gesamtseiten = ceil($zeilen / $pro_seite);

$aktuelle_seite = $seite ? $seite : 1;
$linkanzahlausgabe = 2;

$letzte = $linkanzahlausgabe + $aktuelle_seite;
if ($letzte > $gesamtseiten) {
$letzte = $gesamtseiten;
}

$startback = $aktuelle_seite - $linkanzahlausgabe;
if ($startback < 1) {
$startback = 1;
}

$navigationslinks = "&nbsp;";
if ($gesamtseiten != 1 && $zeilen) {
$seitenlink = "";

//if ($startback != 1) {
//if ($startback == 1) {
if ($aktuelle_seite != 1) {
$prevbl = $aktuelle_seite - 1;
$seitenlink .=  "<td><a href=\"$url?seite=1\">« Erste Seite</a></td><td width=\"20\"> <a href=\"$url?seite=$prevbl\">&lt;</a> </td>";
}

for ($i = $startback; $i <= $letzte; $i++) {
if ($aktuelle_seite == "$i") {
$seitenlink .= "<td width=\"20\" style=\"background-color: #ffffff\"><b>$i</b></td>";
} else {
$seitenlink .= "<td width=\"20\"><a href=\"$url?seite=$i\">$i</a></td>";
}
}

// hier die Beschr&auml;nkung auf 3 Seiten      if ($aktuelle_seite != 3) {
if ($aktuelle_seite != 3) {
$nextbl = $aktuelle_seite + 1;
$seitenlink .= "<td width=\"20\"> <a href=\"$url?seite=$nextbl\">&gt;</a> </td><td><a href=\"$url?seite=$gesamtseiten\">Letzte Seite »</a></td>";
}
$navigationslinks = "<table cellspacing=\"1\" cellpadding=\"0\" border=\"0\" class=\"sitenav\"><tr><td>Seite: $aktuelle_seite von $gesamtseiten</td> $seitenlink</tr></table>";
}

return $navigationslinks;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
?>


</div>
</div></body></html>

die Textdatei
04.02.2008|Mo|10:40 Uhr|04.02.2008|Mo|05:10 Uhr
04.02.2008|Mo|10:40 Uhr|04.02.2008|Mo|17:40 Uhr
04.02.2008|Mo|23:10 Uhr|05.02.2008|Di|06:10 Uhr
05.02.2008|Di|11:40 Uhr|05.02.2008|Mi|18:30 Uhr
06.02.2008|Mi|00:00 Uhr|06.02.2008|Mi|07:00 Uhr
06.02.2008|Mi|12:30 Uhr|06.02.2008|Mi|07:00 Uhr
06.02.2008|Mi|12:30 Uhr|06.02.2008|Do|19:20 Uhr
07.02.2008|Do|00:50 Uhr|07.02.2008|Do|07:50 Uhr
07.02.2008|Do|13:20 Uhr|07.02.2008|Fr|20:00 Uhr
08.02.2008|Fr|01:30 Uhr|08.02.2008|Fr|08:30 Uhr
08.02.2008|Fr|14:00 Uhr|08.02.2008|Fr|08:30 Uhr
08.02.2008|Fr|14:00 Uhr|08.02.2008|Sa|20:40 Uhr
09.02.2008|Sa|02:10 Uhr|09.02.2008|Sa|09:10 Uhr
09.02.2008|Sa|14:40 Uhr|09.02.2008|So|21:20 Uhr
10.02.2008|So|02:50 Uhr|10.02.2008|So|09:50 Uhr
10.02.2008|So|15:10 Uhr|10.02.2008|So|22:00 Uhr
10.02.2008|So|15:10 Uhr|10.02.2008|Mo|22:00 Uhr
28.02.2008|Do|05:20 Uhr|28.02.2008|Do|12:00 Uhr
08.03.2008|Sa|13:30 Uhr|08.03.2008|So|20:20 Uhr
09.03.2008|So|01:50 Uhr|09.03.2008|So|08:50 Uhr
09.03.2008|So|14:10 Uhr|09.03.2008|So|08:50 Uhr
09.03.2008|So|14:10 Uhr|09.03.2008|Mo|21:00 Uhr
10.03.2008|Mo|02:30 Uhr|10.03.2008|Mo|09:30 Uhr
10.03.2008|Mo|14:50 Uhr|10.03.2008|Di|21:40 Uhr
11.03.2008|Di|03:10 Uhr|11.03.2008|Di|10:10 Uhr
11.03.2008|Di|15:30 Uhr|11.03.2008|Di|10:10 Uhr
22.03.2008|Sa|13:30 Uhr|22.03.2008|So|20:10 Uhr
23.03.2008|So|01:40 Uhr|23.03.2008|So|08:40 Uhr
23.03.2008|So|14:00 Uhr|23.03.2008|Mo|20:50 Uhr
24.03.2008|Mo|02:20 Uhr|24.03.2008|Mo|09:10 Uhr
24.03.2008|Mo|14:40 Uhr|24.03.2008|Mo|09:10 Uhr
24.03.2008|Mo|14:40 Uhr|24.03.2008|Di|21:30 Uhr
25.03.2008|Di|02:50 Uhr|25.03.2008|Di|09:50 Uhr
25.03.2008|Di|15:10 Uhr|25.03.2008|Mi|22:00 Uhr
26.03.2008|Mi|03:30 Uhr|26.03.2008|Mi|10:20 Uhr
26.03.2008|Mi|15:40 Uhr|26.03.2008|Mi|10:20 Uhr
26.03.2008|Mi|15:40 Uhr|26.03.2008|Do|22:40 Uhr
27.03.2008|Do|04:00 Uhr|27.03.2008|Do|10:50 Uhr
27.03.2008|Do|16:20 Uhr|27.03.2008|Fr|23:10 Uhr
28.03.2008|Fr|04:40 Uhr|28.03.2008|Fr|11:30 Uhr
28.03.2008|Fr|17:00 Uhr|28.03.2008|Fr|23:50 Uhr
28.03.2008|Fr|17:00 Uhr|28.03.2008|Sa|23:50 Uhr
29.03.2008|Sa|05:20 Uhr|29.03.2008|Sa|12:10 Uhr
29.03.2008|Sa|17:40 Uhr|30.03.2008|So|00:40 Uhr
04.04.2008|Fr|00:00 Uhr|04.04.2008|Fr|07:00 Uhr
04.04.2008|Fr|12:30 Uhr|04.04.2008|Sa|19:20 Uhr
05.04.2008|Sa|00:50 Uhr|05.04.2008|Sa|07:50 Uhr
05.04.2008|Sa|13:20 Uhr|05.04.2008|So|20:10 Uhr
06.04.2008|So|01:30 Uhr|06.04.2008|So|08:40 Uhr
06.04.2008|So|01:30 Uhr|06.04.2008|So|08:40 Uhr
06.04.2008|So|14:00 Uhr|06.04.2008|Mo|20:50 Uhr
07.04.2008|Mo|02:20 Uhr|07.04.2008|Mo|09:20 Uhr
07.04.2008|Mo|14:40 Uhr|07.04.2008|Di|21:40 Uhr
17.04.2008|Do|12:00 Uhr|17.04.2008|Fr|18:30 Uhr
18.04.2008|Fr|00:10 Uhr|18.04.2008|Fr|07:10 Uhr
18.04.2008|Fr|12:40 Uhr|18.04.2008|Sa|19:20 Uhr
19.04.2008|Sa|00:50 Uhr|18.04.2008|Sa|19:20 Uhr
19.04.2008|Sa|00:50 Uhr|19.04.2008|Sa|07:50 Uhr
19.04.2008|Sa|13:20 Uhr|19.04.2008|So|20:10 Uhr
20.04.2008|So|01:30 Uhr|20.04.2008|So|08:30 Uhr
29.04.2008|Di|20:20 Uhr|30.04.2008|Mi|03:00 Uhr
30.04.2008|Mi|09:10 Uhr|30.04.2008|Mi|15:30 Uhr
30.04.2008|Mi|21:30 Uhr|01.05.2008|Do|04:10 Uhr
01.05.2008|Do|10:10 Uhr|01.05.2008|Do|16:40 Uhr
01.05.2008|Do|22:30 Uhr|02.05.2008|Do|05:20 Uhr

16.02.2008 07:17

2 Jörg

Hallo Uwe,

in dem Code befinden sich ein paar Fehler, die eine Ausführung verhindern

Hier fehlt eine schließenende Klammer:
if(isset($_GET['seite'])) {
$seite = preg_replace ("/[^0-9]/", "",  $_GET['seite']);
}

Der String sollte in Hochkommata eingeschlossen werden:
$fp = "daten.txt";

Wenn du das Error Reporting einschaltest, erhälst du folgende Fehlermeldung:
Warning: mktime() expects parameter 5 to be long, string given in [...] on line 116
... mit Bezug auf diese Zeile:
$test = mktime(0,0,0,$month[0],$day[0],$year[0]);

Probier mal, die Strings vorher in Integer umzuwandeln:
$year[0] = (int)substr($daten[0], 6,4);
$month[0] = (int)substr($daten[0], 3, 2);
$day[0] = (int)substr($daten[0], 0, 2);

16.02.2008 09:35

4 Jörg

Zuerst muss der Code funktionstüchtig sein. Bei mir wird noch gar nichts angezeigt

Das Textfile muss erst noch eingelesen werden - in diesem Fall wohl mit file(), wenn $fp ein Array sein soll:
$fp = file("daten.txt");

Zu deinem Hauptproblem:
Ich würde die Zählung von $i entsprechend in den Filter hineinverlegen, also in etwa so:

foreach ($fp as $fpitem) {
$daten = explode("|",$fpitem);

        $year[0] = (int)substr($daten[0], 6,4);
        $month[0] = (int)substr($daten[0], 3, 2);
        $day[0] = (int)substr($daten[0], 0, 2);
//die Variable Test erste Datumsfeld in der Textdatei
        $test = mktime(0,0,0,$month[0],$day[0],$year[0]);

// Prüfung ob das Datum in der Textdatei größer = heute und kleiner als das Datum in 30 Tagen
if ($daten[0] != '' && $test >= $heute  && $test < $bis) {
if ($test1 == 0) {$test1 = $anz / $daten_per_site;}

$i = 0;
if ($i >= $anz && $i <= ($anz-1) + $daten_per_site) {

$seite =0 ;

 print("<TR>

<td>$daten[0]</td>
<td>$daten[1]</td>
<td>$daten[2]</td>
<td>$daten[3]</td>
<td>$daten[4]</td>
<td>$daten[5]</td>
</tr>");

$i++;
}
}
}

16.02.2008 10:49

5 uwe

Hallo Jörg,
ich hatte die Daten noch im Cache...

Jetzt ist die Meldung

Parse error: syntax error, unexpected T_ELSE in /home/www/s001w22/html/test/stand.php on line 157
Aufruf über
http://www.muehlenferienhaus.de/test/stand.php


Wie kann ich die richtige Zeile finden?
Mit NVU ist die 157 eine andere als mit Phase5

Gruss
Uwe

<?php



$progname = "stand.php";

$daten_per_site = 25;





if(isset($_GET['seite'])) {

$seite = preg_replace ("/[^0-9]/", "",  $_GET['seite']);



}





// Startzahl

//if(!isset($seite) || $seite == '') {

if(!isset($seite) ) {$seite = 1;

}



?>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html lang="de-de"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<style type="text/css">

<style>

body {

background-color: #f7f7f7;

font-family: Verdana, Arial;

font-size: 11px;

color: #000000;

}

.sitenav {

background-color: #000066;

}

.sitenav td {

background-color: #e9ebef;

padding: 3px;

font-size: 11px;

text-align: center;

}

.sitenav td a {

color: #990000;

text-decoration: none;

}

.sitenav td a:hover {

color: #000066;

text-decoration: none;

}



</style></head>





<table bgcolor=white  border=1 width=630 ><tr><td >







<H2>Seite <?php echo $seite; ?></H2>





<?php



// Datei in Array lesen



$fp = file("daten.txt");





# Zeilenanzahl der Datei festellen

$zeilen = count($fp);





# Limit fuer Query erstellen - Eintraege pro Seite

$anz = ($seite-1) * $daten_per_site;



if ($zeilen > 0) {





$navigationslinks = sitenavi($zeilen, $seite, $daten_per_site, $progname);



echo "$navigationslinks\n";

?>





<TABLE style="font-family:verdana; empty-cells:show; font-size: 12px" border="1" align="center" width="100%">

    <tr>

      <td

 style="text-align: center; background-color: rgb(204, 204, 204);"

 colspan="3" rowspan="1" >Stand1</td>

      <td

 style="text-align: center; background-color: rgb(204, 204, 204);"

 colspan="3" rowspan="1" >Stand2</td>

    </tr>

    <tr bgcolor="#cccccc">

      <td>Datum</td>

      <td>Tag</td>

      <td>Zeit</td>

      <td>Datum</td>

      <td>Tag</td>

      <td>Zeit</td>

    </tr>

<?php

//echo "<ul>\n";



$j = date('Y');

$m = date('m');

$d = date('d');

$heute = mktime(0,0,0,$m,$d,$j);

//bis ist immer 30 Tage +heute

$bis = mktime(0,0,0,$m,$d+30,$j);

$test1 = 0;



//for ($i = $anz;  $i <= ($anz-1) + $daten_per_site; $i++) {

for ($i = $anz;  $i <= ($anz-1) + $daten_per_site; $i++) {

$daten = explode("|",$fp[$i]);

// hier das neue
foreach ($fp as $fpitem) {
$daten = explode("|",$fpitem);




        $year[0] = (int)substr($daten[0], 6,4);

        $month[0] = (int)substr($daten[0], 3, 2);

//die Variable Test erste Datumsfeld in der Textdatei

        $day[0] = (int)substr($daten[0], 0, 2);

        $test = mktime(0,0,0,$month[0],$day[0],$year[0]);



// Prüfung ob das Datum in der Textdatei größer = heute und kleiner als das Datum in 30 Tagen

if ($daten[0] != ''&& $test >= $heute  && $test < $bis) {

if ($test1 == 0) {$test1 = $anz / $daten_per_site;}


//hier das neue
$i = 0;
if ($i >= $anz && $i <= ($anz-1) + $daten_per_site) {



$seite =0 ;



 print("<TR>



<td>$daten[0]</td>

<td>$daten[1]</td>

<td>$daten[2]</td>

<td>$daten[3]</td>

<td>$daten[4]</td>

<td>$daten[5]</td>

</tr>");


//hier das neue
$i++;
}



}

}





//echo "</ul>\n";

//echo "$navigationslinks\n";



} else {

echo "Keine Daten gefunden!\n";

}



echo "</TABLE>\n";

echo "</TABLE>\n";





    echo "$navigationslinks\n";

//echo "</body>\n</html>\n";



//$seite = $test1 - $seite;





// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #

// Seitennavigation

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #

function sitenavi($zeilen, $seite, $pro_seite, $url) {



// Anzahl der Gesamtseiten

$gesamtseiten = ceil($zeilen / $pro_seite);





//$gesamtseiten = ceil($zeilen / $pro_seite);



$aktuelle_seite = $seite ? $seite : 1;

$linkanzahlausgabe = 2;



$letzte = $linkanzahlausgabe + $aktuelle_seite;

if ($letzte > $gesamtseiten) {

$letzte = $gesamtseiten;

}



$startback = $aktuelle_seite - $linkanzahlausgabe;

if ($startback < 1) {

$startback = 1;

}



$navigationslinks = "&nbsp;";

if ($gesamtseiten != 1 && $zeilen) {

$seitenlink = "";



//if ($startback != 1) {

//if ($startback == 1) {

if ($aktuelle_seite != 1) {

$prevbl = $aktuelle_seite - 1;

$seitenlink .=  "<td><a href=\"$url?seite=1\">« Erste Seite</a></td><td width=\"20\"> <a href=\"$url?seite=$prevbl\">&lt;</a> </td>";

}



for ($i = $startback; $i <= $letzte; $i++) {

if ($aktuelle_seite == "$i") {

$seitenlink .= "<td width=\"20\" style=\"background-color: #ffffff\"><b>$i</b></td>";

} else {

$seitenlink .= "<td width=\"20\"><a href=\"$url?seite=$i\">$i</a></td>";

}

}



// hier die Beschr&auml;nkung auf 3 Seiten      if ($aktuelle_seite != 3) {

if ($aktuelle_seite != 3) {

$nextbl = $aktuelle_seite + 1;

$seitenlink .= "<td width=\"20\"> <a href=\"$url?seite=$nextbl\">&gt;</a> </td><td><a href=\"$url?seite=$gesamtseiten\">Letzte Seite »</a></td>";

}

$navigationslinks = "<table cellspacing=\"1\" cellpadding=\"0\" border=\"0\" class=\"sitenav\"><tr><td>Seite: $aktuelle_seite von $gesamtseiten</td> $seitenlink</tr></table>";

}



return $navigationslinks;

}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #

?>





</div>

</div></body></html>

16.02.2008 12:04

6 Jörg

Diesen Abschnitt der alten for Schleife musst du noch entfernen bzw. auskommentieren:

for ($i = $anz;  $i <= ($anz-1) + $daten_per_site; $i++) {

$daten = explode("|",$fp[$i]);

Wie kann ich die richtige Zeile finden?
Mit NVU ist die 157 eine andere als mit Phase5

Ja, irgendwie hast du jetzt doppelt soviele Zeilenumbrüche drin. Hast du dei Datei immer im ASCII-Modus übertragen?

16.02.2008 13:01 | geändert: 16.02.2008 13:04

7 uwe

Hallo Jörg,
soweit so gut.
Aber... jetzt sind alle Daten auf der ersten Seite und keine mehr auf
der 2. Seite. Der Zähler $daten_per_site wird nicht mehr beachtet.

Gruss
Uwe

16.02.2008 13:24

8 Jörg

Ja, den Zähler muss man einen Block nach außen verschieben und den Startwert schon außerhalb der Schleife definieren, sonst fängt er bei jedem Durchlauf innerhalb des neuen Filters wieder bei 0 an

// hier das neue
$i = 0;
foreach ($fp as $fpitem) {
$daten = explode("|",$fpitem);




        $year[0] = (int)substr($daten[0], 6,4);

        $month[0] = (int)substr($daten[0], 3, 2);

//die Variable Test erste Datumsfeld in der Textdatei

        $day[0] = (int)substr($daten[0], 0, 2);

        $test = mktime(0,0,0,$month[0],$day[0],$year[0]);



// Prüfung ob das Datum in der Textdatei größer = heute und kleiner als das Datum in 30 Tagen

if ($daten[0] != ''&& $test >= $heute  && $test < $bis) {

if ($test1 == 0) {$test1 = $anz / $daten_per_site;}


//hier das neue
if ($i >= $anz && $i <= ($anz-1) + $daten_per_site) {

$seite =0 ;



 print("<TR>



<td>$daten[0]</td>

<td>$daten[1]</td>

<td>$daten[2]</td>

<td>$daten[3]</td>

<td>$daten[4]</td>

<td>$daten[5]</td>

</tr>");



}

$i++;

}

}

16.02.2008 14:26 | geändert: 16.02.2008 14:32

9 uwe

Hallo,
perfekt!! Danke!!

Schönes Wochenende.

Gruss
Uwe

16.02.2008 14:35

Beitrag schreiben (als Gast)





[BBCode-Hilfe]