PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gästebuch



maik15
01-02-2005, 15:58
Hi,

ich habe in nem PHP-Kurs ein GB geschrieben.


<html>
<head>
<title>Gästebuch</title>
</head>
<body>
<div align="center">
<form method="post" action="<?php echo $PHP_SELF; ?>">
Name:<br>
<input type="text" name="name"><br><br>
e-Mail:<br>
<input type="text" name="email"><br><br>
www:<br>
<input type="text" name="www"><br><br>
Ihre Meinung:<br>
<textarea name="comment" cols="35" rows="4">
</textarea><br><br>
<br>
<input type="submit" name="absenden" value="Absenden"><br>
</form>
<h3>Bisherige Meinungen:</h3>
<?php
$datei="comment.txt";
if(isset($comment) && $name!="" && $email !="")
{
$zeiger=fopen($datei,"r+");
$alt=fread($zeiger,filesize($datei));
$name="<a href=\" mailto:$email\">$name</a>";
$www="<a href=http://$www>$www</a>";
$datum=date("d.m.Y H:i.s");
$comment=stripslashes(nl2br($comment));
$meinung="<p><br>$name</b> $www schrieb am <i>$datum</i>:<br>$comment</p>\n";
rewind($zeiger);
fputs($zeiger, "$meinung \n $alt");
fclose($zeiger);}
readfile($datei);
?>
</div>
</body>
</html>

Und dazu noch eine leere comment.txt, wo die ganzen einträge der besucher gespeichert werden!
Nun wollte ich das so haben, dass der nach einer variablen zahl (einstellbar) die einträge auf einen neue seite schreibt.
Momentan ists ja so, das der die neusten als erstes schreibt und die anderen darunter.
Aber jetzt soll er vom neusten eintrag die variable anzahl (einstellbar) abzählen und alles was darunter ist auf eine neue seite schreiben.

Gruß
Maik

quinte17
01-02-2005, 21:13
hast du auch eine mysql-datenbank? dann ists um einiges leichter...
und es ist ein "kleines wunder" dass das script so läuft ;)
wegen den globalen variablen.. aber dass nur so am rande..

du kannst mithilfe eines links dem script sagen ab welchem eintrag er starten soll anzuzeigen und wieviele einträge er anzeigen soll.. ich will dir aber nicht alles verraten, da du ja selbst ein wenig probieren darfst ;)

wenn du dann probleme hast bei der umsetzung dann frag einfach nochmal ;)
greetz

jofisch
02-02-2005, 08:42
hi,

ähm vor wieviel jahren hast du den php-kurz denn gemacht? :D

dein script funktioniert mit der aktuellen PHP4 bzw. PHP5 Version garantiert nicht!
Du musst die Werte, die du mit GET und POST übermittelst explizit mit $_GET bzw. $_POST einer Variable zuweisen. Dein Script müsste also so aussehen:
<html>
<head>
<title>Gästebuch</title>
</head>
<body>
<div align="center">
<form method="post" action="<?php echo $PHP_SELF; ?>">
Name:<br>
<input type="text" name="name"><br><br>
e-Mail:<br>
<input type="text" name="email"><br><br>
www:<br>
<input type="text" name="www"><br><br>
Ihre Meinung:<br>
<textarea name="comment" cols="35" rows="4">
</textarea><br><br>
<br>
<input type="submit" name="absenden" value="Absenden"><br>
</form>
<h3>Bisherige Meinungen:</h3>
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$www = $_POST['www'];
$comment = $_POST['comment'];
$datei="comment.txt";
if(isset($comment) && $name!="" && $email !="")
{
$zeiger=fopen($datei,"r+");
$alt=fread($zeiger,filesize($datei));
$name="<a href=\" mailto:$email\">$name</a>";
$www="<a href=http://$www>$www</a>";
$datum=date("d.m.Y H:i.s");
$comment=stripslashes(nl2br($comment));
$meinung="<p><br>$name</b> $www schrieb am <i>$datum</i>:<br>$comment</p>\n";
rewind($zeiger);
fputs($zeiger, "$meinung \n $alt");
fclose($zeiger);}
readfile($datei);
?>
</div>
</body>
</html>




@quinte17: Wo genau sind denn da globale Variablen?

mfg
jofisch

BlueJay
02-02-2005, 09:14
Nun wollte ich das so haben, dass der nach einer variablen zahl (einstellbar) die einträge auf einen neue seite schreibt.

Programmieraufgabe Ende 1.Semester :) (ist allerdings schon über 20 Jahre her)

Was die globalen Variablen angeht: wenn das Script so läuft, ist dein Provider ziemlich arglos. Da solltest du von dir aus einigen Schutz gegen Mißbrauch einbauen. Mach dich mal dazu bei sessions und cookies schlau.

http://www.php.net

so long,
BlueJay

jofisch
02-02-2005, 09:31
da (mit der variable "anzeige" regelst du wieviel Einträge angezeigt werden sollen):


<html>
<head>
<title>Gaestebuch</title>
</head>
<body>
<div align="center">
<form method="post" action="<?php echo $PHP_SELF; ?>">
Name:<br>
<input type="text" name="name"><br><br>
e-Mail:<br>
<input type="text" name="email"><br><br>
www:<br>
<input type="text" name="www"><br><br>
Ihre Meinung:<br>
<textarea name="comment" cols="35" rows="4">
</textarea><br><br>
<br>
<input type="submit" name="absenden" value="Absenden"><br>
</form>
<h3>Bisherige Meinungen:</h3>
<?php
$alle = $_GET['alle'];
$name = $_POST['name'];
$email = $_POST['email'];
$www = $_POST['www'];
$comment = $_POST['comment'];
$datei="comment.txt";
$anzeige = 10;
if(isset($comment) && $name!="" && $email !="") {
$zeiger=fopen($datei,"r+");
$alt=fread($zeiger,filesize($datei));
$name="<a href=\" mailto:$email\">$name</a>";
$www="<a href=http://$www>$www</a>";
$datum=date("d.m.Y H:i.s");
$comment=stripslashes(nl2br($comment));
$comment = preg_replace("/\r\s/", "", $comment);
$meinung="<p><br>$name</b> $www schrieb am <i>$datum</i>:<br>$comment</p>";
rewind($zeiger);
fputs($zeiger, "$meinung \n $alt");
fclose($zeiger);
}

$file = file($datei);
if (count($file) <= $anzeige + 1 || $alle == 1) {
foreach($file as $value) {
echo $value."<br>\n";
}
} else {
for ($i = 0; $i < $anzeige; $i++) {
echo $file[$i]."<br>\n";
}
?>
<a href="<?php echo $PHP_SELF; ?>?alle=1">Alle Anzeigen</a>
<?php
}
?>
</div>
</body>
</html>

wenn du fragen hast... einfach posten ;)

mfg
jofisch

quinte17
02-02-2005, 10:00
$name = $_POST['name'];
$email = $_POST['email'];
$www = $_POST['www'];
$comment = $_POST['comment'];

@quinte17: Wo genau sind denn da globale Variablen?


da ;) er ging in seinem script davon aus, dass z.b gepostete variablen automatisch als $name zur verfügung stehen... und diese sind dann GLOBAL im ganzen script verfügbar, somit globale variablen ;)

die aktuellen php-versionen tun diese nicht mehr standardmäßig herbeiholen, dazu muss man in der config etwas umstellen... was genau suche bitte im netz, bzw. in der doku ;)
weil ich möchte unserem fragesteller nichts falsches beibringen....
greetz

jofisch
02-02-2005, 10:10
ok. wusst nicht, dass man die auch als GLOBAL bezeichnet. jetzt ists klar...
http://de3.php.net/manual/de/security.globals.php

mfg
jofisch

maik15
03-02-2005, 15:10
Hi,

so wie das von jofisch meinte ich eigentlich nicht!
die einträge stehen jetzt erst da, wenn man auf alle anzeigen klickt.
Ich wollte das so haben, dass nach z.b. 10 einträgen (der neuste immer unter den input-feldern) die die nächsten in einer neuen seite anzeigt.
also, in etwa so:

name <input...>
email <input...>
www <input...>
Message: <input...>
Absenden

<neuster eintrag>
<zweiter eintrag>
<dritter eintrag>
<vierter eintrag>
<fünfter eintrag>
Nächste seite
<sechster eintrag>
<siebenter eintrag>
<achter eintrag>
<neunter eintrag>
<zehnter eintrag>
Nächste seite
...
...
...

So in etwa.

Maik

jofisch
04-02-2005, 08:35
also ein bisschen kreativ musst du schon sein, wenn du programmieren willst!

So, ich denk mal das ist das was du willst:

<html>
<head>
<title>Gaestebuch</title>
</head>
<body>
<div align="center">
<form method="post" action="<?php echo $PHP_SELF; ?>">
Name:<br>
<input type="text" name="name"><br><br>
e-Mail:<br>
<input type="text" name="email"><br><br>
www:<br>
<input type="text" name="www"><br><br>
Ihre Meinung:<br>
<textarea name="comment" cols="35" rows="4">
</textarea><br><br>
<br>
<input type="submit" name="absenden" value="Absenden"><br>
</form>
<h3>Bisherige Meinungen:</h3>
<?php

$name = $_POST['name'];
$email = $_POST['email'];
$www = $_POST['www'];
$comment = $_POST['comment'];
$datei="comment.txt";

if(isset($comment) && $name!="" && $email !="") {
$zeiger=fopen($datei,"r+");
$alt=fread($zeiger,filesize($datei));
$name="<a href=\" mailto:$email\">$name</a>";
$www="<a href=http://$www>$www</a>";
$datum=date("d.m.Y H:i.s");
$comment=stripslashes(nl2br($comment));
$comment = preg_replace("/\r\s/", "", $comment);
$meinung="<p><br>$name</b> $www schrieb am <i>$datum</i>:<br>$comment</p>";
rewind($zeiger);
fputs($zeiger, "$meinung \n $alt");
fclose($zeiger);
}

$anzeige = 10;
$page = $_GET['page'];
$file = file($datei);
if (count($file) < ($page + 1) * $anzeige) {
$end = count($file);
} else {
$end = ($page + 1) * $anzeige;
}
for ($i = ($page * $anzeige); $i < $end; $i++) {
echo $file[$i]."<br>\n";
}

if ($page > 0) {
?>
<a href="<?php echo $PHP_SELF; ?>?page=<?php echo $page - 1; ?>">&#060; </a>
<?php
}
if ($end < count($file) - 1) {
?>
<a href="<?php echo $PHP_SELF; ?>?page=<?php echo $page + 1; ?>"> &#062;</a>
<?php
}

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

mfg
jofisch

maik15
04-02-2005, 12:21
Genau richtig!
Danke.

Maik

maik15
04-02-2005, 12:51
währe es noch möglich, smileys einzufügen?
Neben dem textarea stehen smileys und wenn man drauf klickt, werden die ins message-feld eingetragen.

Maik

jofisch
04-02-2005, 13:17
ja das ist möglich...
Javascript (http://de.selfhtml.org/javascript/index.htm) ist dein freund!

mfg
jofisch

maik15
04-02-2005, 17:56
Könntest du mir noch sagen, nach was/in welche richtung ich da suchen müsste?
denn ich kenne mich so gut wie überhaupt nicht mit javascripten aus!

Maik

ohcibi
08-02-2005, 17:00
Könntest du mir noch sagen, nach was/in welche richtung ich da suchen müsste?
denn ich kenne mich so gut wie überhaupt nicht mit javascripten aus!

Maik

lad dir irgendein freeware board oder gb runter und guck dir deren *.js dateien an... mit ein wenig programmiererfahrung und selfhtml steigst du da schnell dahinter......

iChris
21-02-2005, 02:45
Hi!
Also fuer die Smileys musst du im Prinzip dem Eingabetextfeld (Textarea) ein Stueckchen Text (das fuer den Smiley) hinzufuegen. Beim darstellen musst du dann in dem Text den du aus der Datei ausliest nach diesem Stueckchen Text suchen und dann das Smiley-Bildchen statt dessen einfuegen.
Es gibt im Web einiges an Doku dazu, schmeiss doch einfach mal google an!

Gruss,
Christian