Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP]Guestbook - Code abfrage; Textfeld nur Zahlen?; Wenn Text "xyz" kein post?
Armitage2k
19.05.2007, 14:19
hallihallo!
ein paar kurze fragen bezgl eines von mir erstelltn Guestbooks:
1. ich möchte dass man nur noch posten kann wenn man vor dem senden einen 4stelligen zahlencode eingibt. wie schaff ich es eine warnung auszugeben, wenn der inhalt des textfeldes NICHT die zahlenkombination ist?
2. kann man ein textfeld erstellen wo man nur zahlen eingeben kann?
3. neuerdings hat ein Spambot den tollen trick dass er mir eine java weiterleitung ins kommentarfeld schreibt. sobald also die textfile mit dem inhalt geladen wird, wird mein besucher sofort wo anders hingeleitet.
wie kann ich überprüfen lassen ob im text des textfeldes "kommentar" wörter bzw. zeichen enthalten sind?
thx!
p.s.
hier mein script:
<?php
$name = stripslashes($_POST['input_name']);
$email = $_POST['input_email'];
$homepage = $_POST['input_website'];
$kommentar = stripslashes(nl2br($_POST['input_comment']));
$gmtime = gmdate("H:i", time()+(7200));
$gmdate = gmdate("d.m.Y", time()+(7200));
$code = $_POST['input_code'];
//Abfrage, ob Textarea Name leer ist und Ausgabe einer Warnung
if (empty ($name)) {
die ("<b><font face=\"Arial, Verdena, sans-serif\" size=\"2\" color=black>Bitte geben Sie Ihren Namen ein.<br /><br /><a href=\"javascript:history.go(-1);\">«« zurück</A>");}
//Abfrage, ob Textarea Komentar leer ist und Ausgabe einer Warnung
if (empty ($kommentar)) {
die ("<b><font face=\"Arial, Verdena, sans-serif\" size=\"2\" color=black>Bitte geben Sie einen Kommentar ein.<br /><br /><a href=\"javascript:history.go(-1);\">«« zurück</A>");}
//Abfrage, ob Textarea Code leer ist und Ausgabe einer Warnung
if (empty ($name)) {
die ("<b><font face=\"Arial, Verdena, sans-serif\" size=\"2\" color=black>Code Falsch. Bitte geben Sie den Code ein.<br /><br /><a href=\"javascript:history.go(-1);\">«« zurück</A>");}
$txt = "index_guestbook.txt";
if($homepage != "http://")
{$homepage1 = "<a href=\"$homepage\" target=\"_blank\">[Homepage]</a>";}
if($email != "")
{$email1 = "<a href=\"mailto:$email\">[E-Mail]</a>";}
$lesen = fopen("$txt", "r");
$inhalt = fread($lesen, filesize($txt));
fclose ($lesen);
//Schreiben in die TXT-Datei
$schreiben = fopen("$txt", "w");
if($schreiben){
flock($schreiben,2);
fputs ($schreiben, "
<b>Written by $name</b>
<b>$homepage1</b>
<b>$email1</b> <b>on $gmdate at $gmtime</b><hr />
$kommentar<hr />
<br /><br />
$inhalt");
flock($schreiben,3);
fclose ($schreiben);}
echo "<script>self.location=\"http://www.armitage2k.net/public/guestbook.php\";</script>";
?>
deadshox
19.05.2007, 15:40
1. ich möchte dass man nur noch posten kann wenn man vor dem senden einen 4stelligen zahlencode eingibt. wie schaff ich es eine warnung auszugeben, wenn der inhalt des textfeldes NICHT die zahlenkombination ist?
if($zahlencode1 == !empty($_GET['zahlencode2'])) die("Error!");
2. kann man ein textfeld erstellen wo man nur zahlen eingeben kann?
Hab auf die Schnelle irgendwie nix gefunden, zum ueber pruefen reicht aber auch die obere Methode. Ich glaub aber das es sowas nicht gibt.
3. neuerdings hat ein Spambot den tollen trick dass er mir eine java weiterleitung ins kommentarfeld schreibt. sobald also die textfile mit dem inhalt geladen wird, wird mein besucher sofort wo anders hingeleitet.
wie kann ich überprüfen lassen ob im text des textfeldes "kommentar" wörter bzw. zeichen enthalten sind?
function entry($entry){
$entry = strip_tags($entry);
$entry = htmlspecialchars($entry);
$entry = trim($entry);
$entry = addslashes($entry);
return $entry;
}
Schmeisst alles Unnoetige aus dem String bevor es eingetragen wird.
Ueberpruefen/Nach einem Wort suchen und gleich austauschen kannste so:
str_replace('suchwort', 'ersetzwort', $text);
NPC Fighter
19.05.2007, 15:47
if($zahlencode1 == !empty($_GET['zahlencode2'])) die("Error!");
Wobei man das natürlich leicht umgehen kann. Sicherer wäre es da, serverseitig in eine Textdatei oder performanter in ne Datenbank die Nummer, die erschienen ist, zu speichern und sie dann wieder von dort bei der Prüfung abruft.
Muss man sich halt nen Cronjob einrichten, der die überfälligen Einträge nach ner Zeit wieder löscht.
Zu 2: Naja, du könntest mit Javascript prüfen, ob die Eingabe eine Zahl ist und sie im Nein-Falle gerade wieder löschen.
Aber wozu eigentlich? Damit machst du die Sache doch nur unnötig kompliziert.
deadshox
19.05.2007, 16:19
Wobei man das natürlich leicht umgehen kann. Sicherer wäre es da, serverseitig in eine Textdatei oder performanter in ne Datenbank die Nummer, die erschienen ist, zu speichern und sie dann wieder von dort bei der Prüfung abruft.
Muss man sich halt nen Cronjob einrichten, der die überfälligen Einträge nach ner Zeit wieder löscht.
Das kann man ja dann in die Variable schreiben, sollte ja auch nur nen einfaches bsp. sein.
Armitage2k
19.05.2007, 21:41
das mit dem zahlencode habt ihr anscheinend nicht ganz verstanden:
ich möchte wenn jemand NICHT die Zahlen 1234 in das textfeld schreibt (das bedeutet irgendwelche anderen Zahlen ODER auch gar nichts) dass dann die Fehlermeldung angezeigt wird.
wie stell ich es also an dass wenn das textfeld nicht gleich ist wie die gewünschte zahl die ich in einer variabek zugewiesen bzw. leer ist, eine Fehlermeldung angezeigt wird?
Danke,
A2k
EDIT:
Ich hab jetzt selber mal ein bisschen gebastelt und dabei das hier rausbekommen:
<?php
$name = stripslashes($_POST['input_name']);
$email = $_POST['input_email'];
$homepage = $_POST['input_website'];
$kommentar = stripslashes(nl2br(trim(htmlentities(htmlspecialchars($_POST['input_comment'])))));
$gmtime = gmdate("H:i", time()+(7200));
$gmdate = gmdate("d.m.Y", time()+(7200));
$code = $_POST['input_code'];
$combination = 2306;
//Abfrage, ob Textarea Name leer ist und Ausgabe einer Warnung
if (empty ($name)) {
die ("<b><font face=\"Arial, Verdena, sans-serif\" size=\"2\" color=black>Bitte geben Sie Ihren Namen ein.<br /><br /><a href=\"javascript:history.go(-1);\">«« zurück</A>");}
//Abfrage, ob Textarea Komentar leer ist und Ausgabe einer Warnung
if (empty ($kommentar)) {
die ("<b><font face=\"Arial, Verdena, sans-serif\" size=\"2\" color=black>Bitte geben Sie einen Kommentar ein.<br /><br /><a href=\"javascript:history.go(-1);\">« zurück</A>");}
//Abfrage, ob Textarea Code leer ist und Ausgabe einer Warnung
if($code==$combination) {return true;} else {
die ("<b><font face=\"Arial, Verdena, sans-serif\" size=\"2\" color=black>Das Feld mit dem Zahlencode ist leer, bzw. der Code ist falsch. <br />Bitte geben Sie den richtigen Zahlencode ein.<br /><br /><a href=\"javascript:history.go(-1);\">« zurück</a>");}
$txt = "index_guestbook.txt";
if($homepage != "http://")
{$homepage1 = "<a href=\"$homepage\" target=\"_blank\">[Homepage]</a>";}
if($email != "")
{$email1 = "<a href=\"mailto:$email\">[E-Mail]</a>";}
$lesen = fopen("$txt", "r");
$inhalt = fread($lesen, filesize($txt));
fclose ($lesen);
//Schreiben in die TXT-Datei
$schreiben = fopen("$txt", "w");
if($schreiben){
flock($schreiben,2);
fputs ($schreiben, "
<b>Written by $name</b>
<b>$homepage1</b>
<b>$email1</b> <b>on $gmdate at $gmtime</b><hr />
$kommentar<hr />
<br /><br />
$inhalt");
flock($schreiben,3);
fclose ($schreiben);}
echo "<script>self.location=\"http://www.meineseite.at\";</script>";
?>
wie ihr seht hab ich folgende 2 Veränderungen vorgenommen:
1. es wurden html variablen usw. aus der eingabe entfernt
$kommentar = stripslashes(nl2br(trim(htmlentities(htmlspecialchars($_POST['input_comment'])))));
2. für den fall dass die code eingabe leer bzw. falsch ist:
if($code==$combination) {return true;} else {
die ("<b><font face=\"Arial, Verdena, sans-serif\" size=\"2\" color=black>Das Feld mit dem Zahlencode ist leer, bzw. der Code ist falsch. <br />Bitte geben Sie den richtigen Zahlencode ein.<br /><br /><a href=\"javascript:history.go(-1);\">« zurück</a>");}
das funktioniert auch ganz gut, abgesehen davon dass ich sobald ich das formular abgeschickt habe (mit dem richtigen code) ich bei meinem parser hängen bleibe!! das script arbeitet einfach nicht mehr weiter und ich weiss nicht wirklich warum... ideen?
thx
wie stell ich es also an dass wenn das textfeld nicht gleich ist wie die gewünschte zahl die ich in einer variabek zugewiesen bzw. leer ist, eine Fehlermeldung angezeigt wird?
Javascript?:
<textarea rows="5" cols="40" name="input_code" id="input_code"
onchange="if(this.value!=code) alert('Achtung: Codes stimmen nicht ueberein');">
</textarea>
So etwas in dem Stil. Ich habs geprüft, sollte gehen, ich habe 'code' einfach durch eine Zahl ersetzt, das Problem ist jetzt, wie du 'code' in das Javascript bekommst. Ginge vielleicht mit einem verstecktem Element.
Armitage2k
20.05.2007, 12:04
Javascript?:
<textarea rows="5" cols="40" name="input_code" id="input_code"
onchange="if(this.value!=code) alert('Achtung: Codes stimmen nicht ueberein');">
</textarea>
So etwas in dem Stil. Ich habs geprüft, sollte gehen, ich habe 'code' einfach durch eine Zahl ersetzt, das Problem ist jetzt, wie du 'code' in das Javascript bekommst. Ginge vielleicht mit einem verstecktem Element.
die idee ist ja an und für sich ganz nett, allerdings hab ich da ein kleines problem: sobald ich das textfeld für den code anklicke, dort einen falschen code eingeibe und dann auf senden klicke, erscheint ein popup mit der warnung. wenn ich da auf ok klicke und dann auf speichern, wird der eintrag trotzdem geschrieben.
da ich ausserdem mit JS nicht viel zu tun habe, würd ich trotzdem lieber bei meiner PHP variante bleiben. kann mir jemand sagen warum sich mein script mitten untern ausführen aufhängt?
thx,
A2k
Armitage2k
20.05.2007, 12:13
Ok, ich glaube das hat sich gerade erledigt.
Irgendwie hat sich ein "return" zuviel im code eingeschlichen, sobald das entfernt wurde, ging alles tadellos.
THX,
A2k
NPC Fighter
20.05.2007, 12:44
Du prüfst aber dann schon noch mit PHP, ob die eingegebene Zahl gleich der festgelegten ist?
Edit @ cox: Damit stehst du nicht alleine. ^^
deadshox
20.05.2007, 12:55
Ich versteh nich warum das alles so Kompliziert gemacht werden muss.
Noch eine kleine Anmerkung: Wenn du das mit Javascript machst, kannst du dir die Sache mit dem Captcha auch direkt sparen - Wenn du dem Client (und damit auch den Bots) den Code schickst, kann dieser die Abfrage natürlich leicht umgehen - oder man schaltet einfach Javascript aus und schon kann man wieder wunderbar rumspammen. Zumal Bots überhaupt kein Javascript ausführen können...
Noch eine kleine Anmerkung: Wenn du das mit Javascript machst, kannst du dir die Sache mit dem Captcha auch direkt sparen - Wenn du dem Client (und damit auch den Bots) den Code schickst, kann dieser die Abfrage natürlich leicht umgehen - oder man schaltet einfach Javascript aus und schon kann man wieder wunderbar rumspammen. Zumal Bots überhaupt kein Javascript ausführen können...
Ok, da haste recht. Hab ich nicht bedacht. Wäre Schwachsinn. I'm Sorry >_< .
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.