4.6k Aufrufe
Gefragt in Webseiten HTML von
Guten Abend allerseits,

ich bin seit Tagen wieder mit Erfolg an meinem Gästebuch. Ich bin endlich den lästigen Spam losgeworden, worum ich auch froh bin, doch ein Problem regt mich schon seit Stunden auf... . Ich probiere if-Abfragen zusammenzufassen, weiß jemand wie ich das hinbekomme? Ich möchte halt, dass bei folgenden "Keywords" nur EIN $err_text ausgegeben wird. Die Abfrage sieht folgendermaßen aus:

<?php
if(strpos($gb_text, "http://") !== false ||
ereg("(www.[a-zA-Z0-9_-]+)\.([a-zA-Z0-9.]+)",$gb_text)) {
$err_text .= "Bitte keine URLs posten!";
}
if(strpos($gb_text, "<url>") !== false) {
$err_text .= "<br>";
}
if(strpos($gb_text, "<a href=") !== false) {
$err_text .= "<br>";
}
?>

26 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
<?php

if ( preg_match( '#(www\\.[a-z0-9_-]+\\.[a-z0-9]+|http://|<url>|<a\\s+href=)#i', $gb_text ) ) {
$err_text.= 'Bitte keine URLs posten!';
}

?>

Das schützt dich dennoch nicht vor HTML-Code usw. - es bleibt weiterhin ungeprüft.
0 Punkte
Beantwortet von
Wow, vielen Dank, das erste Forum, indem ich mal einen nützlichen Post zu meiner Frage erhalte, anstatt immer nur abweichende Themen... . ;) Ich werde öfters hier her kommen^^

Ganz liebe Grüße,
Maine17 :)
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Wenn ich in meinen Projekten mehrere Fehlerquellen abfange, dann mache ich es so, daß ich ein Array anlege, etwaige Fehlermeldung als eigene Elemente an das Array anhänge und dann die einzelnen Array-Elemente mit implode() zusammenhänge, also

$errors = array();
if (fehlerbedingung1) {
$errors[] = 'Fehler 1 ist aufgetreten';
}
if (fehlerbedingung2) {
$errors[] = 'Fehler 2 ist aufgetreten';
}
// usw.
if (count($errors)>0) {
echo implode('<br>',$errors);
} else {
// weitere Verarbeitung
}


Auf diese Weise kann ich nicht nur mehrere Fehler schön zusammenhängen, sondern habe in count($errors) auch gleich einen Indikator, ob und wie viele Fehler aufgetreten sind.
0 Punkte
Beantwortet von
Vorhin kam schon wieder ein langen Spameintrag rein. Wie machen das die Spammer trotz alles Fallen? Ich habe ein unsichtbares Feld, ich filter die Einträge und frage ab, ob URLs enthalten sind, ich bin langsam wirklich am Verzweifeln! :(
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Spameinträge sind meist automatisiert, sprich: Programmen ist es vollkommen egal, ob da etwas "unsichtbar" ist oder nicht.

Wie äußert sich denn der Spam? Generell ungewollt? Oder sind Texte reingekommen, die bösartig sind und die du zumindest gerne ungefährlich machen willst?
0 Punkte
Beantwortet von
Na ja, ich würde es mal so sehen, für eine Webseite wie meine passen einfach keine Links von Pornoseiten...
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Wie sieht denn dein verstecktes Feld aus?
0 Punkte
Beantwortet von
Wie sieht denn dein verstecktes Feld aus?


Unsichtbares Feld:
<input type="text" id="mail" name="mail" value="" class="p_send" />


CSS
}
.p_send {
position: relative;
visibility: hidden;
}


PHP if-Abfrage:
}
if ('' !== $_POST['mail']) {
$err_text .= "Da Dein Eintrag verdacht auf Spam enth&auml;lt, wird diese nicht gespeichert!<br>";
} else {
// Daten verarbeiten
}
0 Punkte
Beantwortet von
Wenn ich das Feld "mail" ausfülle, erscheint ja auch der angegeben $err_text, trotzdem schaffen es die Spammer irgendwie alles zu umgehen! :(
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Oh ok - das ist gar nicht schlecht. Trotzdem lässt sich umgekehrt per JS/Dom genausogut auch rausfinden, ob ein INPUT sichtbar oder unsichtbar ist. Zu guter Letzt kann auch immernoch ein Mensch dahintersitzen.
...