Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Mitchell

Mitchell (Level 2) - Jetzt verbinden

12.04.2008, aktualisiert 18.10.2012, 9525 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 ..
Ähnliche Inhalte
Microsoft Office
Word bestimmt Sprache selbst
gelöst Frage von honeybeeMicrosoft Office1 Kommentar

Hallo, habe in Word 2016 ein nerviges Problem: Auf meinem Computer (Windows 10) sind zwei Sprachen installiert: Deutsch und ...

Mac OS X
Safari öffnet bestimmt Seite nicht
Frage von tomi93Mac OS X2 Kommentare

Hallo , ich habe an einem iMac bei uns im Unternehmen das Problem das Safari dort eine bestimmte Seite ...

Basic

Regex Anzahl Character Nicht Anzahl Bytes

gelöst Frage von PeronasBasic6 Kommentare

Guten Morgen zusammen, und zwar habe ich eine Frage bzgl. RegEx/RegExp. Ich habe einen regulären Ausdruck der wie folgt ...

Microsoft

Über VPN nur bestimmt große Daten übertragen

gelöst Frage von Peter007Microsoft5 Kommentare

Hallo zusammen, gibt es eine Möglichkeit bei Außendienstmitarbeitern die über VPN angebunden sind, die übertragbare Datenmenge zum Fileserver über ...

Neue Wissensbeiträge
Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 2 StundenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 3 TageniOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 3 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 5 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Heiß diskutierte Inhalte
Windows Server
Einziger Domänencontroller ersetzen - Windows Server 2012R2 - Hostname
Frage von DeRo93Windows Server25 Kommentare

Guten Tag, Leider haben wir einen Domänencontroller dessen Komponentenspeicher defekt ist. Alle Maßnahmen sind da leider fehlgeschlagen. Nun wurde ...

Server-Hardware
WS 2016 Essentials Hardware
Frage von ChefknechtServer-Hardware19 Kommentare

Moin welche Hardware würdet ihr empfehlen? Dell Poweredge HP Proliant Fujitsu Ich bin total konfus was nun nötig ist, ...

Windows Server
Welche Option fürs Windows Server Installations besser
Frage von backitWindows Server18 Kommentare

Hi Zusammen, ich werde unserer AD (SBS 2011) und Exchange 2010 Servern auf neuen physikalischen Server umziehen. ich habe ...

Windows Update
Fehler bei Updates über WSUS
Frage von Hendrik2586Windows Update11 Kommentare

Guten Tag liebe Kolleginen und Kollegen, lang lang ist meine letzte Anfrage her. Hier etwas das mich nun schon ...