Ja, wie gesagt, war jetzt mal schnell angefertigt "das" Bin grade auch noch am optimieren und editieren...
Habe jetzt noch hinzugefügt, was man machen muss, wenn man die Dateinamen ändern will..
Also für das erste Script dann gar nichts (wie es auch dasteht) und für die Nachfolgenden Scripte dann eben ne "Anweisung" mit Zeilenangabe
Wow, da ist man mal einen Tag nicht da und siehe da: Ein FAQ-Beitrag wurde geboren. Ich kann dem eigentlich nicht viel hinzufügen.
Das einzige, was mir noch einfiel, wird wohl den Rahmen dann doch etwas sprengen: Es wäre doch ein nettes "Feature", wenn man sich das Design, Anordnung der Einträge etc selbst bauen könnte. So in der Art, wie ich dass auf meiner Seite dann gemacht habe, nur dass es hier eben per Hand geschehen ist.
Blöderweise kenne ich mich in Wahrheit mit PHP eigentlich gar nicht aus ( ), ich kann programmieren, aber die volle Syntax (geschweige denn von gängigen Techniken) blieb mir noch verschlossen. Ich hörte da aber mal was von Templates, wobei sich (obwohl ich Euch das sicher nicht erklären muss) jemand eine Design-HTML-Datei bastelt, die Verweise auf Variablen aus einem seperatem Script beinhaltet.
Aber während ich das hier schrieb, fiel mir auf, dass der Aufwand wohl doch etwas unangemessen ist. Vielleicht belassen wir's beim jetzigen Stand.
PS: Wollen wir noch ein News-System basteln? Ich bräuchte noch eins für meine Seite
Ich habe mal noch n kleines Script gebastelt, dass einen bestimten Eintrag löscht. Das sollte natürlich in einem passwortgeschützten Verzeichniss liegen o.ä.
gbdel.php
<?php
$eintraege = @file("../content.gb");
$max = count($eintraege);
$openfile = fopen("../content.gb","w");
for( $a=0; $a<$max; $a++)
{
if($a != $id)
{
flock($openfile,2);
fwrite($openfile,$eintraege[$a]);
flock($openfile,3);
}
}
fclose($openfile);
?>
Und hier der Aufruf aus dem Überverzeichnis:
echo("<a href='./admin/gbdel.php?id=".$a."' target='_self'>X</a>");
an geeigneter Stelle in der Schleife, die die Einträge anzeigt.Gruß Spawn
PS: Sorry, dass ich hier ständig die echo()-Befehle wieder reinbringe, wie gesagt: PHP-Newbie
PS: Sorry, dass ich hier ständig die echo()-Befehle wieder reinbringe, wie gesagt: PHP-Newbie
hi..
hat ja keiner was gegen echo gesagt. ich hatte nur erwähnt das bei größeren HTML-ausgaben (wie das eben bei dem Gästebuch z.b. der fall war für die Eingabe-Maske schließ ich persönlich den PHP teil kurz und öffne ihn dann erst wieder wenn ich ihn brauche. das find ich persönlich übersichtlicher, aber jedem das seine.
So um nochmal auf mein Problem mit den Zeilenumbrüchen zurückzukommen (jaja ich weiß was ihr denkt: "der olli newbiw soll doch endlich den rand halten").
Also wie gesagt mit dem gigantischen Gästebuch da will ich mich erst heranwagen wenn ich php mal halbwegs durchschaut habe. Ich habe ja auch ein soweit intaktes Gästebuch. Nur wenn ich in dem Text einen Zeilenumbruch mache (sprich "ENTER") drücke, dann gibt es einen Fehler. In meinem Gästebuch wird dann eben für diesen Zeilenumbruch eine neue Spalte angefangen und alles geht drunter und drüber!
Hier nochmal die drei Scripte:
auslesen.php:
<?php
echo"<html><head><title>Start</title></head><body>";
echo"<table border=1 width='100%' height='30'>";
echo"<tr><th height='25' width='15%'>Name</th>";
echo"<th height='30' width='15%'>eMail</th><th height='30'>Text</th></tr>";
$handle = fopen("tabelle.txt","r");
while (!feof($handle)) {
$name = fgets($handle, 4096);
$email = fgets($handle, 4096);
$text = fgets($handle, 4096);
echo"<tr><td width='15%'>$name </td><td width='15%'>$email </td><td>$text</td></tr>";
}
fclose($handle);
echo"</table>";
echo"</body>";
echo"</html>";
?>
Das Formular:
<?php
echo"<html><head><title>Start</title></head><body>";
echo"<form method='GET' action='eintragen.php'>";
echo"<p> </p>";
echo"<p> </p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>Name:</font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='namen' value=''></font></p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>email: </font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='mail' value=''>";
echo" </font></p>";
echo"<p align='left'>";
echo"<font color='#FFFFFF'><span style='font-size: 16pt'>Ihr Text:</span></font></p>";
echo"<p align='left'>";
echo"<textarea name='text' rows='12' cols='107'>";
echo"</textarea><br><br>";
echo"</p>";
echo"<tr><td> </td><td><input type='submit' value='Abschicken'></td></tr>";
echo"</body>";
echo"</html>";
?>
eintragen.php:
<?
$auslesen=fopen("tabelle.txt","a");
fwrite($auslesen,$namen."\n");
fwrite($auslesen,$mail."\n");
fwrite($auslesen,$text."\n");
fclose($auslesen);
?>
Und sorry aber als ich den Thread eröffnet habe war das erst mal so für mein Verständnis geplant, dass sich da jetzt so was großes (und auch ziemlich geiles) daraus entwickelt hat finde ich zwar cool, nur kann ich da halt nicht mehr mitreden!
Gruß Syrus
Das Problem ist, dass bei diesem "Prototypen" die Trennung der Kategorien per "\n" also Zeilenumbruch gemacht wird. Das heisst, wenn Du einen Umbruch im Text hast gibt's Probleme. Das kannst Du umgehen, indem Du, bevor Du den Text in die Datei speicherst alle Umbrüche in eine Zeichenfolge verwandelst, die den Umbruch repräsentiert (beispielsweise im "großen" GB durch "<!umbruch!>" realisert).
Der Befehl zum Ersetzen eines Strings mit einem anderen String lautet:
$neu = str_replace($einfuegen,$ersetzen,$alt);
wobei $einfuegen für die einzufügende, $ersetzen für die zu ersetzende Zeichenfolge steht.Nun musst Du natürlich, nachdem Du alles wieder ausgelesen hast, die entsprechenden Repräsentanten wieder durch den Umbruch ersetzen. Dazu analog wieder den str_replace-Befehl benutzen.
Gruß Spawn
PS: Nein, wir (zumindest ich) wollen nicht, dass Du die Klappe hälst. Im Eifer des Gefechts ist Dein Problem nur etwas verloren gegangen
Hi alle miteinannder, ich habe mich mal an eine kleinere Grafikversion des Gästebuchs gewaagt, schaut finde ich, schon relativ gut aus :
Das ganze kommt in den "<!-- EINTRÄGE ANZEIGEN --!>" Teil :
<span style="font-family: arial;">
<table class="GBtable" cellpadding="2" cellspacing="2" border="0"
style="text-align: left; height: 46px; width: 50%; background-color: rgb(0, 0, 153);">
<tbody>
<tr class="GBhead">
<td
style="vertical-align: top; width: 55%; background-color: rgb(0, 0, 153); font-family: comic sans ms; color: rgb(255, 204, 51);"><small><?=$Eintrag[5];?></small></td>
<td colspan="4"
style="vertical-align: top; background-color: rgb(0, 0, 153);">
<table cellpadding="2" cellspacing="2" border="0"
style="text-align: left; width: 100%; background-color: rgb(0, 0, 153);">
<tbody>
<tr>
<td style="vertical-align: top; width: 70%;"><br><br><br><br><br><small><span style="color: rgb(255, 204, 51); font-family: verdana;"><?=$Eintrag[4];?></span></small><br
style="color: rgb(255, 204, 51);">
<span style="color: rgb(255, 204, 51); font-weight: bold; font-family: verdana;"><?=$Eintrag[1];?></span><br
style="color: rgb(255, 204, 51);">
<br style="color: rgb(255, 204, 51);">
<small><span style="color: rgb(255, 204, 51);"><a class="GBlink" href="mailto:<?=$Eintrag[3]?>"><span style="font-family: arial;;"><?=$Eintrag[3]?></a></span></small><br
style="color: rgb(255, 204, 51);">
<small><span style="color: rgb(255, 204, 51);"><a class="GBlink" href="<?=$Eintrag[2];?>" target="_blank"><span style="font-family: arial;"><?=$Eintrag[2];?></a></span></small><br>
</td>
<td style="vertical-align: top;" rowspan="1" colspan="1"><span
style="font-family: arial;">
<div style="text-align: right;"><img src="briefmarke02.jpg"
title="" alt="" style="width: 100px; height: 115px;"><br>
</div>
</span></td>
</tr>
<tr>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
Für "briefmarke02.jpg" kann man jetzt eine beliebige Briefmarke einsetzen, ich habe einfach mal eine erstellt.. Das ganze kann man mal ausprobieren oder anguggen :
http://schwoebelbank02.sc.funpic.de/gbbook/
Das ganze sollte irgendwie wie ne Postkarte aussehen, mit nem Vorbild von "gbserver.de" :
http://gaestebuch.gbserver.de/schwoebel,1.html
Es gibt natürlich noch ein paar KLEINE Abänderung, wie die Hintergrundfarbe und ab und zu, wo der Firefox die Schriftart oder Farbe nicht richtig anzeigt hat, eine eindeutige Definition mit <span style="color: rgb(...);">, aber sonst ist es das Original bzw. mit dem oberen Code
Schick schick. Wollte allerdings gerade mal was eintragen und da ist nix passiert, ausser dass meine Überschrift Deinem Eintrag angefügt wurde...?
Mir ist gerade noch eine Sache aufgefallen, die wohl alle GBs auf "unserer" Basis betreffen müsste: Wenn ich ein Gänsefüßchen (") eingebe, wird das als \" gespeichert und ausgegeben. Ich dachte erst, dass betrifft Sonderzeichen im Allgemeinen und habe mal mit ! § $ & etc getestet, hier tritt das Problem allerdings nicht auf.
Jemand eine Idee?
Gruß Spawn
Hi |
Stripslashes bei der Ausgabe sollte reichen, da die schützenden Slashes ja schon mit gespeichert werden.
Es war auch noch ein kleiner Bug drin im Skript: wenn noch keine Textdatei angelegt war (und damit die Variable $eintraege nicht initialisiert wurde), wurde $max auf 1 gesetzt und dummerweise "1 Einträge" angezeigt. Is gefixt
So, was wäre dieser Thread ohne Unmengen an Quellcode, also:
<?
#######################################################################
## Dieses Gästebuch wurde in einer Geminschaftsarbeit mehrerer ##
## Mitglieder von computerhilfen.de entwickelt. Es soll all jenen, ##
## die sich immer wieder fragen: "Gästebuch? Wie geht das?" zeigen, ##
## wie man ein einfaches Gästebuch erstellt. ##
## Es ist auch nicht das ultimative Gästebuch, sondern nur ein Wink ##
## in die richtige Richtung. Im Detail waren daran beteiligt: ##
## ##
## Erster Entwurf und Grundfunktionen : Jan190480 ##
## Optimierung des Lese- und Schreibzugriffs : JoSsiF, Mario ##
## Verteilung der Einträge auf mehrere Sieten: Spawn ##
## Stylesheet-Implementierung : Der olle Schwoebel ##
## ##
## Viel Spaß mit dem Gästebuch. Fragen können gerne ##
## direkt an die einzelnen Mitlieder gerichtet werden ##
## oder im Forum gepostet werden. ##
## ##
## 2005 | computerhilfen.de ##
## ##
#######################################################################
## Der PHP-Teil. Ohne PHP (oder einer anderen serverseitigen ##
## Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum ##
## Laufen bekommen. ##
### Konfiguration (auch wenn's hier noch nicht ganz so viel zu konfigurieren gibt *g*) #########################
$ppp = 5; // Anzahl der Beiträge, die pro Seite ausgegeben werden sollen
$textfile = "myGB.txt"; // Name der Textdatei, in der die Einträge gespeichert werden
### Ende Konfiguration #########################################################################################
/*
$page initialisieren (der Wert entspricht der aktuellen Seite der Gästebucheinträge)
Beim ersten Aufruf (keine Seite gewählt) wird diese auf 1 gesetzt
Die Variable wird immer aus dem superglobalen Array $_REQUEST[] herausgezogen,
um auch auf solchen Servern einen Wert zu erhalten, auf denen die PHP-Variable
'register_gobals' auf 'Off' gesetzt ist
*/
if (!$_REQUEST['page'])
{
$page = 1;
}
else
{
$page = $_REQUEST['page'];
}
// Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if ($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|"; // der Name aus dem Formular
$GBeintrag .= $_POST['myGBhp']."|"; // die Website aus dem Formular
$GBeintrag .= $_POST['myGBmail']."|"; // die Mail-Adresse aus dem Formular
$GBeintrag .= date("d.m.y")."|"; // das Datum aus dem Formular, gleich formatiert
/*
Das Zeichen '|' wird als Trennzeichen in der Textdatei des Gästebuchs verwendet.
Falls jemand in der nachricht ein | verwendet hat, sollten wir das
ersetzen, da sonst beim auslesen Fehler auftauchen
*/
$_POST['myGBtext'] = str_replace("|", "<!strich!>", $_POST['myGBtext']);
// Zeilenumbrüche entfernen, da anhand dieser sonst die Trennung der Datensätze erfolen würde
$_POST['myGBtext'] = str_replace("\r\n", "<!umbruch!>", $_POST['myGBtext']);
$_POST['myGBtext'] = str_replace("\r", "<!umbruch!>", $_POST['myGBtext']);
$_POST['myGBtext'] = str_replace("\n", "<!umbruch!>", $_POST['myGBtext']);
// Anführungszeichen als Sonderzeichen behandeln
//$_POST['myGBtext'] = addslashes($_POST['myGBtext']);
// Umbruch als Trennzeichen am Ende des Datensatzes hinzufügen
$GBeintrag .= $_POST['myGBtext']."\r\n";
/*
Den Eintrag in die Textdatei schreiben und dabei vor
gleichzeitigem Mehrfachzugriff schützen
*/
$openfile = fopen($textfile, "a");
flock($openfile, 2);
fwrite($openfile, $GBeintrag);
flock($openfile, 3);
fclose($openfile);
}
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwischen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link, a.GBlink:visited, a.GBlink:hover, a.GBlink:active { text-decoration: none;
color: #FFFFFF; }
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="<?=$PHP_SELF?>" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
/*
Hier das Gästebuch öffnen und alle Einträge in ein Array einlesen;
Fehlermeldung bei noch nicht vorhandener Datei wird unterdrückt
und die Datei automatisch angelegt
*/
$eintraege = @file($textfile);
/*
Anzeigen der Einträge
Solange Einträge vorhanden sind, wird eine Schleife durchlaufen
von hinten nach vorne (also neueste zuerst)
Hier wird gleichzeitig die Logik für die dynamische Generierung
der Seitenlinks erzeugt
*/
$start = (count($eintraege) - 1) - $ppp * ($page - 1);
$stop = (count($eintraege) - 1) - $ppp * ($page - 1) - $ppp + 1;
if ($start > (count($eintraege) - 1))
{
$start = count($eintraege) - 1;
}
if ($stop < 0)
{
$stop = 0;
}
// Textdatei überhaupt vorhanden?
if (!$eintraege)
{
$max = 0; // $max gibt die Anzahl der Einträge an
}
else
{
$max = count($eintraege);
for ($a = $start; $a >= $stop; $a--)
{
// Die einzelnen Teile des Eintrags extrahieren
$Eintrag = explode("|", $eintraege[$a]);
/*
Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
in die ursprünglichen zeichen ersetzen
*/
$Eintrag[4] = str_replace("<!umbruch!>", "\r\n", $Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>", "|", $Eintrag[4]);
//und jetzt alles in Tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0]?></td>
<td>am : <?=$Eintrag[3]?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2]?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1]?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=stripslashes(nl2br($Eintrag[4]))?></td>
</tr>
</table>
<br>
<?
}
}
// jetzt noch fix die daraus resultierenden Seiten berechnen
if ($max == 0)
{
$pages = 1;
}
else
{
$pages = intval(($max - 1) / $ppp) + 1;
}
?>
<p align='center'>
<?
if ($page > 1)
{
?>
<a href='<?=$PHP_SELF?>?page=1'>|< </a>
<a href='<?=$PHP_SELF?>?page=<?=($page - 1)?>'>< </a>
<?
}
for ($i = 1; $i <= $pages; $i++)
{
if ($i == $page)
{
?>
<?=$i?>
<?
}
else
{
?>
<a href='<?=$PHP_SELF?>?page=<?=$i?>'><?=$i?> </a>
<?
}
}
if($page < $pages)
{
?>
<a href='<?=$PHP_SELF?>?page=<?=($page + 1)?>'>> </a>
<a href='<?=$PHP_SELF?>?page=<?=$pages?>'>>|</a>
<?
}
?>
<br>Es sind <b><?=$max?></b> Einträge im Gästebuch</p>
</center>
</body>
</html>
greez
JoSsiF
« HOMEPAGE VORLAGEN | Account » | ||