php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.07.2005, 22:49  
Gast
 
Beiträge: n/a
Standard [Erledigt] PHP-Gästebuch selbst programmieren

Obwohl ich mich bislang nicht wirklich mit PHP auseinandergesetzt habe möchte ich das Gästebuch für eine von mir betreute Internetpräsenz selbst programmieren. Ich habe es zumindest hinbekommen, dass die Formulardaten in eine Textdatei geschrieben werden.

Allerdings stehe ich jetzt vor einigen offenen Fragen bzw. kniffeligen Problemen. Vielleicht könnt ihr mir helfen. Wäre es möglicherweise sinnvoller, die HTML-Elemente und auch die Absätze und Zeilenumbrüche erst bei der Ausgabe zu ersetzen? Ich könnte dann nämlich auch gleich zwei Umbrüche zwischen die Absätze einfügen. Wie kann ich die Fehlermeldung bei nichtausgefüllten Feldern an einer beliebigen Stelle auf der Seite ausgeben? Wie komme ich an die Daten aus dem Array namens "eintraege" und wie kann ich sie ansprechend formatiert ausgeben?

PHP-Code:
<h2>Gästebuch</h2>

<h3 id="ansehen">Ansehen</h3>

<?

// Datei öffnen, Daten in Array einlesen, Datei schließen

$daten fopen ('testeintraege.csv','r');

$eintraege file('testeintraege.csv');

fclose ($daten);

?>

<h3 id="eintragen">Eintragen</h3>

<form method="post" action="/test2/verein/gaestebuch/">



<label for="name">Name</label> (benötigt)

<input id="name" name="name"></input></p>



<label for="email">E-Mail</label> (optional)

<input id="email" name="email"></input></p>



<label for="eintrag">Gästebucheintrag</label> (benötigt)

<textarea id="eintrag" name="eintrag"></textarea></p>



<input type="submit" value="Absenden" name="absenden" /><input type="reset" value="Zurücksetzen" /></p>

</form>

<?

if($absenden) {

if(
$name&&$eintrag) {

// HTML-Elemente ersetzen

$name ereg_replace ('<','&lt;',$name);
$name ereg_replace ('>','&gt;',$name);

$mail ereg_replace ('<','&lt;',$mail);
$mail ereg_replace ('>','&gt;',$mail);

$eintrag ereg_replace ('<','&lt;',$eintrag);
$eintrag ereg_replace ('>','&gt;',$eintrag);

// Absätze und Zeilenumbrüche auszeichnen

$eintrag '

'
.$eintrag;
$eintrag preg_replace ('/\r\n\r\n|\r\r|\n\n/','</p>

'
,$eintrag);
$eintrag preg_replace ('/\r\n|\r|\n/','
'
,$eintrag);
$eintrag $eintrag.'</p>';

// Datum und Uhrzeit ermitteln

$datum date ('d.m.Y');
$uhrzeit date ('H:i');

// IP-Adresse ermitteln

$ip getenv ('remote_addr');

// Datei öffnen, Daten schreiben, Datei schließen

$daten fopen ('testeintraege.csv','a');

fwrite ($daten,"$name|$email|$datum|$uhrzeit|$ip|$eintrag\n");

fclose ($daten);

//

} else {

echo (
'

Bitte mindestens Name und Eintrag ausfüllen.</p>'
);

}

}

?>
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.07.2005, 23:02  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

zunächst mal:

nimm hier str_replace. ist um einiges schneller.

PHP-Code:
<?php
$name 
ereg_replace ('<','&lt;',$name); 
$name ereg_replace ('>','&gt;',$name); 

$mail ereg_replace ('<','&lt;',$mail); 
$mail ereg_replace ('>','&gt;',$mail); 

$eintrag ereg_replace ('<','&lt;',$eintrag); 
$eintrag ereg_replace ('>','&gt;',$eintrag); 
?>
Zitat:
Wie kann ich die Fehlermeldung bei nichtausgefüllten Feldern an einer beliebigen Stelle auf der Seite ausgeben?
am einfachsten:
du schreibst alle php anweisungen über die html anweisungen. dann definierst du eine variable $error die du irgendwo zwischen den html anweisungen ausgeben kannst....

Zitat:
Wie komme ich an die Daten aus dem Array namens "eintraege" und wie kann ich sie ansprechend formatiert ausgeben?
du hast die dateien ja schön formatiert reingeschrieben...vielleicht gibt das einen denkansporn:

www.php.net/explode
brian johnson ist offline  
Alt 16.07.2005, 23:06  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten..

Bemerkung:
Die gestellte Frage entspricht nicht dem Wissensstand eines/einer Fortgeschrittenen.

moved to PHP - Anfänger
__________________
mod = master of disaster
Waq ist offline  
Alt 16.07.2005, 23:39  
Gast
 
Beiträge: n/a
Standard

Meine letzte Frage hatte ich im Anfänger-Bereich gepostet, allerdings hieß es damals die (weniger komplexe) Frage wäre für diesen Bereich zu anspruchsvoll. Sehr seltsam.
 
Alt 16.07.2005, 23:44  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von brian johnson
zunächst mal:

nimm hier str_replace. ist um einiges schneller.

PHP-Code:
<?php
$name 
ereg_replace ('<','&lt;',$name); 
$name ereg_replace ('>','&gt;',$name); 

$mail ereg_replace ('<','&lt;',$mail); 
$mail ereg_replace ('>','&gt;',$mail); 

$eintrag ereg_replace ('<','&lt;',$eintrag); 
$eintrag ereg_replace ('>','&gt;',$eintrag); 
?>
Noch besser: htmlentities()
 
Alt 16.07.2005, 23:53  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Michigras
Noch besser: htmlentities()
würd ich auch sagen wenn er das denn wirklich wollte. wer weiß ob er wirklich soviel entfernen will. wäre zwar besser, aber naja....
brian johnson ist offline  
Alt 17.07.2005, 00:57  
Gast
 
Beiträge: n/a
Standard

Vielen Dank für eure hilfreichen Beiträge. Ich möchte zwar alle HTML-Elemente "unschädlich" machen, ein Kodieren der Umlaute etc. wie bei htmlentities() vorgesehen ist aber nicht notwendig da ein passender Zeichensatz angegeben wurde.

Sind Probleme zu erwarten wenn die Benutzereingaben das verwendete Trennzeichen "|" enthalten, sollte ich das Zeichen also ebenfalls ersetzen bzw. entfernen?

Ist es besser diese Umformungen vor der Speicherung vorzunehmen oder erst beim Auslesen der Daten?

Könnt ihr mir ein gutes Nachschlagewerk empfehlen, das den Umgang mit Arrays und die Ausgabe der Daten möglichst anfängerfreundlich erklärt?
 
Alt 17.07.2005, 01:10  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Sind Probleme zu erwarten wenn die Benutzereingaben das verwendete Trennzeichen "|" enthalten, sollte ich das Zeichen also ebenfalls ersetzen bzw. entfernen?

Ist es besser diese Umformungen vor der Speicherung vorzunehmen oder erst beim Auslesen der Daten?
ja sind zu erwarten. vor der speicherung. nach der speicherung geht es nicht da du dann ja nicht weißt ob das trennzeichen von dir ist oder vom user...

Zitat:
Könnt ihr mir ein gutes Nachschlagewerk empfehlen, das den Umgang mit Arrays und die Ausgabe der Daten möglichst anfängerfreundlich erklärt?
arrays: http://www.google.de/search?hl=de&q=...p+arrays&meta=

was davon anfängerfreundlich ist musst du selbst entscheiden...
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 17.07.2005, 14:15  
Gast
 
Beiträge: n/a
Standard

Dank zwei Stunden ohne jede Störung bin ich heute mit dem Script ein ganzes Stück weitergekommen. Schaut euch das Ergebnis meiner Bemühungen doch bitte einmal an, vielleicht fallen euch grobe Schnitzer auf. Ich möchte die neuesten Einträge gerne oben haben, wie kann ich das bewerkstelligen? Außerdem wird seltsamerweise stets ein leerer Datensatz mit ausgegeben. In Betrieb könnt ihr euch das Script hier anschauen: http://www.sv-einigkeit.de/test2/verein/gaestebuch/.

PHP-Code:
<?

// Wenn Formular abgesandt wird

if($absenden) {

// Wenn die Felder Name und Text ausgefüllt wurden

if($name&&$text) {

// HTML-Elemente ersetzen

$name str_replace ('<','&lt;',$name);
$name str_replace ('>','&gt;',$name);
$name str_replace ('|','',$name);

$mail str_replace ('<','&lt;',$mail);
$mail str_replace ('>','&gt;',$mail);
$mail str_replace ('|','',$mail);

$text str_replace ('<','&lt;',$text);
$text str_replace ('>','&gt;',$text);
$text str_replace ('|','',$text);

// Absätze und Zeilenumbrüche auszeichnen

$text '

'
.$text;
$text preg_replace ('/\r\n\r\n|\r\r|\n\n/','</p>

'
,$text);
$text preg_replace ('/\r\n|\r|\n/','
'
,$text);
$text $text.'</p>';

// Datum, Uhrzeit und IP-Adresse ermitteln

$datum date ('d.m.Y');
$uhrzeit date ('H:i');
$ip getenv ('remote_addr');

// Datei öffnen, Daten schreiben, Datei schließen

$daten fopen ('testeintraege.csv','a');

fwrite ($daten,"$ip|$name|$email|$datum|$uhrzeit|$text\n");

fclose ($daten);

// Wenn die Felder Name und Text nicht ausgefüllt wurden

} else {

$error 'Bitte mindestens die Felder für Name und Text ausfüllen.';

}

}

?>

<h2>Gästebuch</h2>



Im bereits xxx Einträge umfassenden Gästebuch können unsere
Besucher Meinungen, Kritik, Anregungen oder auch einfach nur einen 
freundlichen Gruß hinterlassen. Wir freuen uns über jede 
Rückmeldung.</p>

<h3 id="ansehen">Ansehen</h3>

<?

// Datei öffnen, Schleife durchlaufen, Datei schließen

$daten fopen ('testeintraege.csv','r');

while (!
feof($daten)) {

$zeile fgets($daten,50000);
$eintrag explode("|"$zeile);
$ip $eintrag[0];
$name $eintrag[1];
$mail $eintrag[2];
$datum $eintrag[3];
$uhrzeit $eintrag[4];
$text $eintrag[5];

echo 
"
      <table>

      <tr>
      <th>IP-Adresse</th>
      <td>$ip</td>
      </tr>

      <tr>
      <th>Name</th>
      <td>$name</td>
      </tr>

      <tr>
      <th>E-Mail</th>
      <td>$mail</td>
      </tr>

      <tr>
      <th>Datum</th>
      <td>$datum</td>
      </tr>

      <tr>
      <th>Uhrzeit</th>
      <td>$uhrzeit</td>
      </tr>

      <tr>
      <th>Text</th>
      <td>$text</td>
      </tr>

      </table>
"
;

}

fclose ($daten);

?>

<h3 id="eintragen">Eintragen</h3>



<?

if (!empty($error)) {

echo 
"$error";

}

else {

echo 
"Ich bin ein momentan noch völlig sinnloser Fülltext, der später durch mächtig wichtige Hinweise ersetzt wird.";

}

?></p>

<form method="post" action="/test2/verein/gaestebuch/">



<label for="name">Name</label> (benötigt)

<input id="name" name="name"></input></p>



<label for="email">E-Mail</label> (optional)

<input id="email" name="email"></input></p>



<label for="text">Text</label> (benötigt)

<textarea id="text" name="text"></textarea></p>



<input type="submit" value="Absenden" name="absenden" /><input type="reset" value="Zurücksetzen" /></p>

</form>
 
Alt 12.05.2009, 19:18  
Neuer Benutzer
 
Registriert seit: 01.03.2009
Beiträge: 27
PHP-Kenntnisse:
Fortgeschritten
tim-peters befindet sich auf einem aufstrebenden Ast
Standard

Hey,
Ich arbeite auch grade an einem Gästebuch. Habe daher deinen Code noch ein bisschen umgeschrieben. Dass die neusten Einträge zuerst kommen habe ich gelöst, indem ich die Datei vorm ändern auslese und dann völlig neuschreibe. Das ausgelesene hänge ich dann an den aktuelle Eintrag wieder dran. Ist bestimmt nicht die beste Methode..aber sie funktioniert

hier mein Script (Du wirst es wahrscheinlich nicht wieder erkennen):
PHP-Code:
if ($_POST)
    {
        
$guestbook "./db/guestbook.txt";
        
$date date("d.m.Y");
        
$time date ('H:i');
        
$ip getenv ('remote_addr');
        
$name $_POST['name'];
        
$mail $_POST['mail'];
        
$text $_POST['text'];
        
$inhalt file_get_contents($guestbook);
         
        
$text trim($text);
// ersetzen diverser smileys und Zeilenumbrüche
        
$zuersetzen = array(">""<""\n""\r""arsch""Arsch""fick"":)"":D"";)"":censored:"":engel:"":rotwerd:""ä""ü""ö""ß""Ä""Ü""Ö""|");
        
$mitersetzen = array("&gt;""&lt;""<br>""""a...""A...""....""<img src=\"./pics/smileys/smile.gif\" alt=\"Lächeln\" border=\"0\">""<img src=\"./pics/smileys/biggrin.gif\" alt=\"Grins\" border=\"0\">""<img src=\"./pics/smileys/wink.gif\" alt=\"Zwinkern\" border=\"0\">""<img src=\"./pics/smileys/censored.gif\" alt=\"Zensiert\" border=\"0\">""<img src=\"./pics/smileys/engel.gif\" alt=\"Engel\" border=\"0\">""<img src=\"./pics/smileys/rotwerd.gif\" alt=\"Rotwerd\" border=\"0\">""&auml;""&uuml;""&ouml;""&szlig;""&Auml;""&Uuml;""&Ouml;""-");
        
$text str_replace($zuersetzen$mitersetzen$text);
        
$mail htmlentities($mail);
        
$name htmlentities($name);
        
        
$daten fopen('gast.txt','w');
        if (!
ereg("^.+@.+\\..+$"$mail)) 
        {
            
$content "$ip|$name|$date|$time|$text\n";
        }
        else
        {
            
$content "$ip|$name|$date|$time|$text|$mail\n";
        }
// Anhängen der restlichen Eintraege
        
fwrite ($daten,$content.$inhalt);
        
fclose ($daten);
        echo 
"Eintrag gepostet!";
    }

// ANZEIGEN

$zahlarray file($guestbook); 
$anzahl count($zahlarray);
$daten fopen ($guestbook,"r");

while (!
feof($daten)) 
{
    
$zeile fgets($daten,50000);
    
$eintrag explode("|"$zeile);
    
$ip $eintrag[0];
    
$name $eintrag[1];
    
$date $eintrag[2];
    
$time $eintrag[3];
    
$text $eintrag[4];
    
$mail $eintrag[5];
// damit leere Zeilen nicht angezeigt werden
    
if($name != ""
    {
        if (
$mail == ""
        {
            echo 
"<li>\n
            <span class=\"from\">
            "
.$name." schrieb am ".$date;
        }
        else
        {

            echo 
"<li>\n
            <span class=\"from\">
            <a href=\"mailto:"
.$mail."\">".$name."</a> schrieb am ".$date;
        }
        echo 
" um ".$time." Uhr</span>\n<span class=\"message\">".$text."</span>\n</li> \n";
    }
}
fclose ($daten);
echo 
$anzahl." Eintr&auml;ge."
funktioniert auch bisher alles=) wenn jemand grobe Schnitzer entdeckt oder Verbesserungsvorschläge hat bin ich immer offen

lg
Tim-
tim-peters ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Chat programmieren => Was beachten? noBody PHP Tipps 2008 10 01.08.2009 11:30
Framework programmieren Kein Genie PHP-Fortgeschrittene 2 29.04.2008 16:57
Wie programmieren? dh1sbg Off-Topic Diskussionen 5 02.03.2007 15:59
Würfel programmieren Datenbanken 4 19.08.2005 17:43
PHP - Webseiten dynamisch programmieren PHP Tipps 2005-2 4 31.07.2005 16:36
internetauftritt in php programmieren PHP Tipps 2005-2 11 25.07.2005 20:55
Kommentarfunktion programmieren PHP Tipps 2005-2 15 22.07.2005 08:39
Wer kann mir ein Partyportal programmieren ? Beitragsarchiv 1 08.07.2005 16:43
Stundenplan Programmieren PHP Tipps 2005 5 19.03.2005 14:20
Will ein eigenes Forum programmieren! PHP Tipps 2004 1 21.09.2004 18:04
[Erledigt] PHP programmieren PHP Tipps 2004 7 18.09.2004 17:07
Filter programmieren um Websitelinks einzulesen?? PHP Tipps 2004 3 07.07.2004 09:29
Anmeldeformular programmieren PHP Tipps 2004 2 30.06.2004 01:06
[Erledigt] Warum objektorientiert programmieren? PHP-Fortgeschrittene 7 11.06.2004 21:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
gästebuch programmieren php, gästebuch selbst programmieren, gästebuch selber programmieren, php gästebuch programmieren, php gästebuch, gästebuch programmieren, gästebuch php programmieren, gästebuch in php programmieren, gästebuch programmieren html, ereg_replace ve_guestbook, gästebuch selber programmieren php, gästebuch selber coden, gästebuch mit php programmieren, gästebuch php, php gästebuch über csv ausgeben, g, guestbook programmieren, gästebuch selbst programmieren html, gästebuch datum abschicken if php, datensatz in php selber programmieren

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.