 | |
24.07.2008, 05:41
| Nach oben
#21 | | Neuer Benutzer
Registriert seit: 21.07.2008
Beiträge: 17
|
Erledigt. Hier der Code: PHP-Code: <?php require_once("recaptchalib.php"); // Der Name der Gästebuch-Datei lautet: $datenbankdatei = 'gaestebuch.txt'; $mailempfaenger = 'alex.webmaster.sgm@gmail.com';
# the response from reCAPTCHA $resp = null; # the error code from reCAPTCHA, if any $error = null; // Überprüfung, ob die Datei vorhanden ist. // wenn nicht vorhanden, dann versuche diese zu erstellen // wenn das Erstellen nicht erfolgreich war (mangelnde Rechte), dann Skript abbrechen if(!file_exists($datenbankdatei)) if(!@touch($datenbankdatei)) die("Fehler: Die Datenbank ist nicht erreichbar.");
if(isset($_POST['button'])) {
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen) // Überprüfe, ob Name und Text angegeben wurde - sonst kein Eintrag if($_POST['name'] == "" || $_POST['email'] == "" || $_POST['eintrag'] == "") { echo 'Es fehlen Angaben. Bitte vollständig ausfüllen.'; } else { // Überprüfe, ob Captcha richtig eingegeben wurde $privatekey = "6LePhgIAAAAAAOHiXY91Kc5tqdpBRqZew541fdKu"; $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { die ("Sicherheitscode nicht korrekt. " . "(Fehler: " . $resp->error . ")"); } else {
// als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden. // das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig! $eintrag = date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['site'].' || '.$_POST['eintrag']."\r\n";
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden $file = fopen($datenbankdatei,"a"); // Absätze ermöglichen
$from = array("Ä", "ä", "Ö", "ö", "Ü", "ü", "ß"); $to = array("Ä", "ä", "Ö", "ö", "Ü", "ü", "ß"); $eintrag = str_replace($from, $to, $eintrag); $eintrag = nl2br($eintrag);
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben fwrite($file, $eintrag);
// Datei schliessen fclose($file);
// Ausgabe für den User: echo '<h2>Danke '.$_POST['name'].' für Ihren Eintrag!</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>'; // eMail wird verschickt: @mail($mailempfaenger, "Gästebucheintrag", "Folgender Eintrag wurde hinterlassen:\r\n\r\nName: ".$_POST['name']."\r\nEMail: ".$_POST['email']."\r\nWebsite: ".$_POST['site']."\r\nText: ".$_POST['eintrag']."\r\nIP: ".$_SERVER["REMOTE_ADDR"]."\r\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" . phpversion()); } } } else { // wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch: echo '<h2>Mein Gästebuch</h2>';
// Öffnen der Datei im Lese-Modus: $file = fopen($datenbankdatei, 'r');
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde while (!feof($file)) { // Zeile für Zeile auslesen: $zeile = fgets($file, 5000); $daten = explode(" || ", $zeile); $datum = $daten[0]; $ip = $daten[1]; $name = $daten[2]; $email = $daten[3]; $site = $daten[4]; $eintrag = $daten[5];
// Ausgabe auf den Bildschirm:
if($name != "" && $eintrag != "") { if ($site == "http://" OR $site == "") { echo '<u>'.$name.' schrieb am '.$datum.' folgendes:</u><br />'.$eintrag.'<br /><br />'; } else { echo '<u><a href="'.$site.'">'.$name.'</a> schrieb am '.$datum.' folgendes:</u><br />'.$eintrag.'<br /><br />'; } } } fclose($file);
// Trennlinie zwischen alten Einträgen und dem Formular: echo '<hr />';
// Formular für weitere Einträge: echo '<h2>Neue Einträge:</h2> <p>Daten mit * müssen angegeben werden.</p> <form method="post" action="'.$_SERVER["PHP_SELF"].'"> <table> <tr> <td>*</td><td width="100"><p>Ihr Name:</p></td><td><input type="text" name="name"></td> </tr> <tr> <td>*</td><td><p>Ihre EMail:</p></td><td><input type="text" name="email"></td> </tr> <tr> <td></td><td><p>Ihre Website:</p></td><td><input type="text" name="site" value="http://" /></td> </tr> <tr> <td>*</td><td><p>Ihr Eintrag:</p></td><td><textarea name="eintrag" cols="45" rows="7"></textarea></td> </tr> <tr> <td>*</td><td>Sicherheitscode:</td><td>'; $publickey = "6LePhgIAAAAAAOIHfNA2FO-pRjqi1roMCco1O45B"; echo '<script> var RecaptchaOptions = { lang : \'de\', theme : \'clean\' }; </script>'; $privatekey = "6LePhgIAAAAAAOHiXY91Kc5tqdpBRqZew541fdKu"; echo recaptcha_get_html($publickey); echo '</td> </tr> <tr> <td></td><td><input type="submit" name="button" value="Absenden"></td><td></td> </tr> </table> </form>'; } ?> Ich hab sonst noch mal ein bisschen rumgespielt. Eine Alternative: PHP-Code: // Absätze ermöglichen
$from = array("Ä", "ä", "Ö", "ö", "Ü", "ü", "ß", "\r\n"); $to = array("Ä", "ä", "Ö", "ö", "Ü", "ü", "ß", "<br />"); $eintrag = str_replace($from, $to, $eintrag); //$eintrag = nl2br($eintrag);
Der Nachteil: Das erste mal funktioniert es ja, der wird der Absatz umgesetzt, nur werden die Zeilenumbrüche in der Textdatei halt nicht gemacht und dadurch kann man keine anderen Beiträge schreiben (bzw. sie werden nicht angezeigt). Aber immerhin klappt es ein mal.
Bin jetzt erstmal ein bisschen weg, kann also sein, dass ich nicht sofort antworte.
Bis bald,
Alex
|
| |
24.07.2008, 12:29
| Nach oben
#22 | | Jann Hendrik Bekaan
Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.374
|
und was spricht gegen diese Umsetzung? Zitat:
Zitat von Jann Hendrik PHP-Code: // Absätze ermöglichen $from = array("Ä", "ä", "Ö", "ö", "Ü", "ü", "ß"); $to = array("Ä", "ä", "Ö", "ö", "Ü", "ü", "ß"); $eintrag = str_replace($from, $to, $eintrag); $eintrag = nl2br($eintrag);
an der Stelle, wo du die Ersetzung vornimmst. | |
| |
01.08.2008, 07:25
| Nach oben
#23 | | Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 597
|
Sind die Zeiten nicht vorbei, wo man Umlaute noch extra behandeln muss?
|
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | Thema durchsuchen | | | |
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. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
|