Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Bestimmte Anzahl von Gästebucheinträgen anzeigen

Frage Entwicklung PHP

Mitglied: Mitchell

Mitchell (Level 2) - Jetzt verbinden

12.04.2008, aktualisiert 18.10.2012, 8998 Aufrufe, 7 Kommentare

Hallo Freunde der Kunst,

ich bin PHP-Anfänger und komme daher nicht so ganz weiter

Ich habe ein Gästebuch programmiert, welches an sich auch gut funktioniert. Das ganze läuft nur über eine Textdatei, in die die Einträge reingeschrieben werden. Kein SQL und auch kein Array. Nun stehe ich vor dem Problem, dass auf der ersten Seite z.B. nur 10 Einträge erscheinen sollen, für nachfolgende soll dann eine neue Seite begonnen werden bzw. die alten Beiträge werden nach hinten gerückt. So, wie man sich halt ein normales GB vorstellt. Ich weiss wirklich nicht, wie ich das ganze anpacken soll und bin für jede Hilfe dankbar.

01.
<?php 
02.
if (isset($_POST['action']) && $_POST['action'] == "add"){ 
03.
if ($_POST['name'] == "" || $_POST['text'] == ""){ 
04.
echo "Du hast nicht alle Felder ausgef&uuml;llt !<hr>"
05.
06.
else
07.
$guestbook = file_get_contents("gaestebuch.txt"); 
08.
$_POST['text'] = str_replace("\n","<br>",$_POST['text']); 
09.
$_POST['eintrag'] = "<span style=font-size:23>Eintrag von: <a href=\"mailto:$_POST[mail]\">$_POST[name]</a><br> 
10.
$_POST[text]<br> 
11.
<a href=$_POST[www] target=_blank>$_POST[www]</a><hr></span>"; 
12.
$datei = fopen("eintraege.txt","w+"); 
13.
 fwrite($datei,$_POST['eintrag'].$guestbook); 
14.
 fclose($datei); 
15.
echo "Danke f&uuml;r deinen Eintrag <i>$_POST[name]</i><hr>"
16.
}} 
17.
readfile("eintraege.txt"); 
18.
?>
Mfg

Mitchell
Mitglied: Guenni
14.04.2008 um 20:57 Uhr
@Mitchell

Hi,

hab hier ein bißchen was erstellt und(hoffe) ausreichend kommentiert.

Die Anzahl Beiträge, die pro Seite angezeigt wird, kann in einer Variablen
abgelegt werden.

Die Seiten werden unten in Linkform ausgegeben, so dass man eine Seite
direkt anwählen kann.

Hoffe, das hilt dir erstmal weiter.

Gruß
Günni

Script guestbook.php

01.
<? 
02.
if(isset($_POST['cmd'])){ 
03.
 $msg=str_replace("\n","",$_POST['eintrag']); 
04.
 $eintrag=$_POST['nick']."||".$_POST['mail']."||".date("Y-m-d")."||".$msg
05.
 $handle = fopen("/www/pub/guest.txt","a"); 
06.
 fputs($handle, $eintrag."\n"); 
07.
 fclose($handle); 
08.
 //Nach Eintrag Seite neu aufrufen, da sonst die Postdaten noch 
09.
 //gespeichert sind und ein Klick auf Neuladen immer wieder 
10.
 //den selben Eintrag speichert 
11.
 header("location:guestbook.php"); 
12.
13.
?> 
14.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
15.
 
16.
<html> 
17.
<head> 
18.
<title>Gästebuch</title> 
19.
<style type="text/css"
20.
a:link { text-decoration:none; } 
21.
a:visited { text-decoration:none; } 
22.
a:hover { text-decoration:none; } 
23.
a:active { text-decoration:none; } 
24.
h4 { 
25.
border: 1px solid blue; 
26.
background-color: #999999; 
27.
display:block; 
28.
padding: 4px; 
29.
width: 250px; 
30.
31.
</style> 
32.
<script type="text/javascript"
33.
<!-- 
34.
function check_eingabe(){ 
35.
 ok=false; 
36.
 //Prüfen, ob Textfeld nick Buchstaben enthält, damit schonmal 
37.
 //das Feld nicht leer bleibt. 
38.
 muster=/[A-Za-zÄÖÜäöüß]/;  
39.
 test=muster.exec(document.formular.nick.value); 
40.
 if(test){ok=true;} // Wenn ja, dann O.K. 
41.
 if(!ok || document.formular.nick.value=="Bitte korrekt ausfüllen!"){ 
42.
  document.formular.nick.value="Bitte korrekt ausfüllen!"
43.
 return false; 
44.
45.
 return true; 
46.
47.
// --> 
48.
</script> 
49.
</head> 
50.
<body> 
51.
<h2>G&auml;stebuch</h2><br><br> 
52.
<form action="guestbook.php" method="post" name="formular" onsubmit="return check_eingabe()"
53.
<table> 
54.
<tr> 
55.
<td><h3>Nickname</h3></td> 
56.
<td><input type="text" name="nick" /></td> 
57.
</tr> 
58.
<tr> 
59.
<td><h3>eMail</h3></td> 
60.
<td><input type="text" name="mail" /></td> 
61.
</tr> 
62.
<tr> 
63.
<td valign="top"><h3>Eintrag</h3></td> 
64.
<td><textarea name="eintrag" cols="50" rows="10"></textarea></td> 
65.
</tr> 
66.
<tr> 
67.
<td></td> 
68.
<td><input type="submit" name="cmd" value="Senf dazugeben"/></td> 
69.
</tr> 
70.
</table> 
71.
</form> 
72.
<? 
73.
//Einträge ausgeben 
74.
 
75.
//Datei zeilenweise einlesen 
76.
$handle = fopen("/www/pub/guest.txt","r"); 
77.
 while($line=fgets($handle,1024)){ 
78.
  $lines[]=$line
79.
80.
fclose($handle); 
81.
// 
82.
if(isset($_GET['next'])){ 
83.
 $i=$_GET['next']; 
84.
}else
85.
			$i=0; 
86.
87.
//Wieviele Einträge sollen pro Seite ausgegeben werden 
88.
$items=2; 
89.
if($lines){ 
90.
 //Array undrehen, damit neue Einträge zuerst angezeigt werden 
91.
 $lines=array_reverse($lines); 
92.
 while($i<count($lines)){ 
93.
  $msg=explode("||",$lines[$i]); 
94.
	echo "Nickname: ".$msg[0]."<br>"
95.
	echo "eMail: <a href=mailto:".$msg[1].">".$msg[1]."</a><br><br>"
96.
	echo "Dein Beitrag vom ".$msg[2].":<br>"
97.
	echo "<h4>".$msg[3]."</h4><br><br>"
98.
  $i++; 
99.
	//Einträge pro Seite erreicht, while verlassen 
100.
	if($i%$items==0){ 
101.
	 break
102.
103.
104.
 //Seitenausgabe mit Links 
105.
 echo "Seite  "
106.
 for($j=1,$k=0;$k<count($lines);$j++,$k+=$items){ 
107.
  echo "<a href=guestbook.php?next=".$k.">". $j ."|</a>"
108.
109.
110.
?> 
111.
</body> 
112.
</html> 
113.
 
Bitte warten ..
Mitglied: Mitchell
15.04.2008 um 11:36 Uhr
Hi Günni,

erstmal danke für die Hilfe, das bringt mich bestimmt weiter. Die Fragen zum Script kommen später, weil da doch noch die ein oder andere Zeile ist, aus der ich (als Anfänger) nicht schlau werde.

Erstmal bedrückt mich was anderes. Ich wollte das Script gerade auf meinem Apache testen, worauf ich komischerweise beim absenden der Formulardaten einen Scriptfehler bekomme. Scheinbar fehlen ihm da die Schreibrechte, aber irgendwie komm ich nicht dahinter, warum. Vielleicht kannst du mir da was zu sagen?

Warning: fopen(http://localhost/guest.txt) [function.fopen]: failed to open stream: HTTP wrapper
does not support writeable connections. in C:\Programme\Apache2.2\htdocs\guestbook.php on
line 5
01.
$handle = fopen("http://localhost/guest.txt","a");

Warning: fputs(): supplied argument is not a valid stream resource in
C:\Programme\Apache2.2\htdocs\guestbook.php on line 6
01.
fputs($handle, $eintrag."\n");

Warning: fclose(): supplied argument is not a valid stream resource in
C:\Programme\Apache2.2\htdocs\guestbook.php on line 7
01.
fclose($handle);

Warning: Cannot modify header information - headers already sent by (output started at
C:\Programme\Apache2.2\htdocs\guestbook.php:5) in
C:\Programme\Apache2.2\htdocs\guestbook.php on line 11
01.
header("location:guestbook.php");
Mfg

Mitchell
Bitte warten ..
Mitglied: Guenni
15.04.2008 um 20:53 Uhr
@Mitchell

Hi,

$handle = fopen("http://localhost/guest.txt;,;a");

Lies' mal dazu die Fehlermeldung:

. . . HTTP wrapper does not support writeable connections. . . .

. . . bedeutet, dass übers HTTP-Protokoll kein Schreiben möglich ist.

Ich hab' mein Script eben umgeändert auf die gleiche Syntax und erhalte

auch die gleiche Fehlermeldung. Wenn die Textdatei im gleichen Verzeichnis ist,

wie das Script, so schreibst du einfach:

$handle = fopen("guest.txt","a");

Die nachfolgenden Fehlermeldungen resultieren nur auf der ersten.

Gruß
Günni
Bitte warten ..
Mitglied: Mitchell
27.04.2008 um 12:34 Uhr
Hi Günni,

sorry, dass ich erst jetzt antworte. Habe in den letzten Wochen versucht, mich in das Script reinzudenken, weil ich es natürlich selber schaffen will, aber es kommt einfach nicht. Habe derzeit eine Lern-DVD und ein PHP Buch hier, aber irgendwie wollen mir die Schleifen nicht wirklich iin den Kopf. Also wie versprochen, meine Fragen

01.
$handle = fopen("/www/pub/guest.txt","r"); 
02.
 while($line=fgets($handle,1024)){ 
03.
  $lines[]=$line; 
04.
 }
Was passiert hier? Ich kann mir das anschauen, solange ich will, das Verständnis kommt nicht auf. Die 1. Zeile versteh ich noch, aber die 2. und 3. sagt mir schon nichts mehr. Warum die while-Schleife, was machen die "1024" da und was passiert in Zeile 3?

01.
$i=$_GET['next']; 
02.
}else{ 
03.
            $i=0; 
04.
            }
sagt mir wirklich gar nichts. Er holt sich per GET "next", ansonsten ist i=0 ???
01.
while($i<count($lines)){ 
02.
  $msg=explode("||",$lines[$i]);
schon wieder ein großen Fragezeichen für mich, was passiert und warum?
01.
$i++;
Er zählt 1 hinzu, ok...leider weiß ich nicht, was i ist. Ich nehme mal an, die Beiträge!?
01.
if($i%$items==0){ 
02.
     break;
Wenn der Rest 0 ist, abbruch. Der Rest von was?
01.
for($j=1,$k=0;$k<count($lines);$j++,$k+=$items){ 
02.
  echo "<a href=guestbook.php?next=".$k.">". $j ."|</a>";
Diese zwei Zeilen haben mich echt zum Verzweifeln gebracht, als PHP Neuling . Warum die for-Schleife, was ist "j, was "k"....da versteh ich echt nur Bahnhof.

So...ich weiß, es sind eine Menge Fragen und ich denke, jemand der sich mit PHP auskennt, werden diese wohl eher ein müdes Lächeln wert sein, aber für mich ist es wirklich schwierig, das nachzuvollziehen.

Mfg

Mitchell

PS: Der Schreibfehler mit dem Localhost müsste mir aber echt auffallen müssen, danke ^^
Bitte warten ..
Mitglied: Guenni
30.04.2008 um 20:31 Uhr
@Mitchell
Hi,

01.
sorry, dass ich erst jetzt antworte. Habe in den letzten Wochen versucht, mich in das Script reinzudenken, weil ich es natürlich selber schaffen will, aber es kommt einfach nicht. Habe derzeit eine Lern-DVD und ein PHP Buch hier, aber irgendwie wollen mir die Schleifen nicht wirklich iin den Kopf. Also wie versprochen, meine Fragen  
02.
$handle = fopen("/www/pub/guest.txt","r"); 
03.
 while($line=fgets($handle,1024)){ 
04.
  $lines[]=$line; 
05.
06.
Was passiert hier? Ich kann mir das anschauen, solange ich will, das Verständnis kommt nicht auf. Die 1. Zeile versteh ich noch, aber die 2. und 3. sagt mir schon nichts mehr. Warum die while-Schleife, was machen die "1024" da und was passiert in Zeile 3? 
Die Funktion fgets liest Zeichen aus einer Datei bis
- ein Zeilenende erreicht wurde
- das Dateiende erreicht wurde
- die Anzahl Zeichen gelesen wurde, z.B. 1024

1024 Zeichen ist jetzt einfach mal 'ne halbe DinA-4 Seite, soviel schreibt wohl kaum
jemand ins Gästebuch.
$lines[] ist ein Array, $line ist die Zeile aus fgets, die in das Array eingelesen wird.

01.
$i=$_GET['next']; 
02.
}else{ 
03.
            $i=0; 
04.
05.
sagt mir wirklich gar nichts. Er holt sich per GET "next", ansonsten ist i=0 ???
Genau! Wenn du mehrere Einträge im GB hast, werden am Schluß Links auf die
Seite selber dargestellt. Dem Link wird die Variable next mit einem Wert angehangen.
Wenn du nun die Seite über einen dieser Links aufrufst, enthält die Variable next einen
nummerischen Wert, ab welchen Gästebucheinträge angezeigt werden.

01.
while($i<count($lines)){ 
02.
  $msg=explode("||",$lines[$i]); 
03.
schon wieder ein großen Fragezeichen für mich, was passiert und warum? 
04.
$i++; 
05.
Er zählt 1 hinzu, ok...leider weiß ich nicht, was i ist. Ich nehme mal an, die Beiträge!?
Beim Speichern in die Datei trenne ich Nickname, eMail, Eintragsdatum und Eintrag selber
mit "||", in der vagen Hoffnung, dass niemand im Eintrag "||" schreibt, ansonsten wird dieser
einfach nach "||" abgeschnitten.
$lines[$i] enthält z.B. eine Zeile aus der GB-Datei, darin steht:

Anton||ant@web.de||2008-04-12||Hallo Mitchell !!

Durch $msg=explode("||",$lines[$i]); entsteht aus $msg ein Array. Das Trennzeichen "||"
bestimmt sozusagen, welcher Index des Arrays welchen Teil aus $lines[$i] zugewiesen bekommt.
$msg enthält dann:
$msg[0]="Anton"
$msg[1]=" ant@web.de "
$msg[2]=" 2008-04-12"
$msg[3]=" Hallo Mitchell !!"

Dieses Array kannst du dann ausgeben, in etwa:
echo "Nickname:".$msg[0]."<br>";
usw..

01.
if($i%$items==0){ 
02.
     break; 
03.
Wenn der Rest 0 ist, abbruch. Der Rest von was?
In $items legst du fest, wieviel GB-Einträge pro Seite angezeigt werden sollen.
Und immer wenn der Rest der Division von $i geteilt durch $items 0 ist,
wird die Schleife und damit das Ausgeben der in $lines gespeicherten Zeilen
abgebrochen.

01.
for($j=1,$k=0;$k<count($lines);$j++,$k+=$items){ 
02.
  echo "<a href=guestbook.php?next=".$k.">". $j ."|</a>"; 
03.
Diese zwei Zeilen haben mich echt zum Verzweifeln gebracht, als PHP Neuling . Warum die for-Schleife, was ist "j, was "k"....da versteh ich echt nur Bahnhof. 
$j ist die Seitenzahl, die als Link auf die Seite angezeigt wird, $k ist die Startzahl, ab welcher Zeile
$lines ausgelesen wird. Deshalb auch das Konstrukt:
$i=$_GET['next'];
}else{
$i=0;
}
Wenn du eine der Seitenzahlen angeklickt hast, die natürlich erst angezeigt werden,
wenn Einträge in der Datei bestehen, dann ist die Variable next mit einem Wert gefüllt.
Dieser Wert wird $i zugewiesen, und ab dieser Zeile wird das Array $lines, das oben
im Script aus der Datei mit Zeilen gefüllt wird, ausgelesen bis Zeilenzahl geteilt durch
$items = 0 ist.

01.
So...ich weiß, es sind eine Menge Fragen und ich denke, jemand der sich mit PHP auskennt, werden diese wohl eher ein müdes Lächeln wert sein, aber für mich ist es wirklich schwierig, das nachzuvollziehen.
Na dann hoffe ich, ein wenig Licht in die Sache gebracht zu haben.

Gruß
Günni
Bitte warten ..
Mitglied: Mitchell
05.05.2008 um 11:12 Uhr
da muss ich echt erstmal durchsteigen

Ich danke dir auf jeden Fall schonmal dafür. Sobald ich das Script fertig habe, so, wie ich es brauche, sag ich bescheid und natürlich bei Fragen.

Mfg

Mitchell
Bitte warten ..
Mitglied: Mitchell
13.06.2008, aktualisiert 18.10.2012
Ich werde mich dem Thema später widmen, zuerst muss ich Das hier fertig kriegen

Mfg

Mitchell
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
Kopierte Dateien im Hintergrund anzeigen (1)

Frage von MichiBLNN zum Thema Windows 7 ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...