2010-12-07 3 views
1

Ich versuche herauszufinden, wie man einen Textbereich überprüft, um zu sehen, ob es eine bestimmte Phrase enthält.Wie überprüft man, ob ein Textbereich eine bestimmte Phrase mit Javascript/PHP enthält?

Ich glaube, ich könnte vielleicht .IndexOf verwenden?

Es ist nur ich habe ein Validierungsskript, um den Inhalt eines Kontaktformulars zu überprüfen. In letzter Zeit habe ich eine Menge Spam bekommen. Ich habe festgestellt, dass alle diese Spam-Nachrichten die Phrase [url = enthalten und ich dachte, wenn ich vielleicht ein kleines Skript hinzufügen könnte, um zu überprüfen, ob der Textbereich eine solche Phrase enthält, und wenn ja, die gesendete Nachricht zu stoppen.

Derzeit Ich habe diese einfache JavaScript-Schnipsel zu überprüfen, ob der Textbereich ist leer:

if (message.val()=='') { 
     message.addClass('highlight'); 
     message.focus(); 
     return false; 
    } else message.removeClass('highlight'); 

Jedes gute Möglichkeiten, etwas hinzufügen zu überprüfen, ob das Nachrichtenfeld [url enthält =

I hat auch einen ähnlichen pHP-Validierungsskript:

if (!$message) $errors[count($errors)] = 'Please click back and enter your message.'; 

Irgendwelche Ideen, wie ich ein ähnliches Validierungsskript hinzufügen könnte zu überprüfen, ob Meldung [url = enthält auch in php?

Jede Hilfe würde sehr geschätzt werden! o)

Antwort

3

Es ist unwahrscheinlich, dass Sie Spam stoppen, indem Sie den Inhalt Ihrer Textbereich auf der Client-Seite überprüfen: - der Spammer ist mehr als wahrscheinlich POST direkt auf Ihren Server Side-Script, also müssen Sie dort filtern. Auch das Überprüfen eines bestimmten Musters funktioniert nur, bis sich das Muster ändert, und dann müssen Sie Ihr Skript aktualisieren.
Eine gängige Lösung für dieses Problem ist die Verwendung eines One-Time-Form-Tokens.
Wenn Sie das Formular bereitstellen, generieren Sie eine zufällige Zeichenfolge und platzieren dieses Token in einem ausgeblendeten Feld im Formular. Sie speichern das Token auch auf dem Server in einer Sitzung oder in einer Datenbank. Wenn das Formular abgeschickt wird, stimmen Sie die gespeicherten und übermittelten Token ab. Auf diese Weise können Sie sicher sein, dass das Formular ausgefüllt und abgeschickt wurde und Sie keine Daten von einem Bot erhalten.
Für zusätzliche Sicherheit können Sie nur zulassen, dass jedes Token nur einmal verwendet wird, um gegen mehrere Übermittlungen geschützt zu sein.

UPDATE Eine sehr einfache, eine Seite Beispiel

<?php 
session_start(); 

/** 
* Process the form if we have a token that we recognise 
* otherwise just present the form again, you probably want to handle this a bit better 
*/ 
if(isset($_POST['token']) && isset($_SESSION['token']) 
    && $_POST['token'] === $_SESSION['token']) { 

    // no more submissions using this token 
    unset($_SESSION['token']); 

    $name = clean($_POST['name']); 
    $comment = clean($_POST['comment']); 

    // process the input and redirect to a confirmation 
    // just echoing data for example 
    echo "$name said $comment"; 
    die(); 
} else { 
    $token = uniqid(); 
    $_SESSION['token'] = $token; 
} 

/** 
* Stub function that cleans user input 
* @param String $str 
*/ 
function clean($str) { 
    return $str; 
} 
?> 
<html> 
    <head> 
    <title>Form token example</title> 
    </head> 
    <body> 
     <form method="post"> 
      <label> 
       Name<br/> 
       <input type="text" name="name"/> 
      </label> 
      <br/> 
      <label> 
       Comment<br/> 
       <textarea name="comment"></textarea> 
      </label> 
      <br/> 
      <label> 
       <input type="submit"/> 
      </label> 
      <br/> 
      <br/> 
      The token field would normally be hidden, it's displayed here so that the user can change it for testing<br/> 
      <input type="text" name="token" value="<?php echo $token ?>"/><br/> 
     </form> 
    </body> 
</html> 
+0

Klingt ein bisschen kompliziert, aber wahrscheinlich eine gute Idee. Wie wäre es, wenn ich ein ähnliches Skript zur serverseitigen PHP-Datei hinzufügen würde, würde dies vielleicht helfen, diese Art von Spam-Nachricht zu reduzieren? – ade123

+0

Es ist nicht wirklich kompliziert, ich habe ein Beispiel zu meiner Antwort hinzugefügt – meouw

-1
message.val().match('your phrase here') 
+0

Zunächst wird, wie es denken, 'message.val()' ist nicht einmal schlicht JS-Funktion. Auf der anderen Seite sollten Sie vollständig geantwortet haben (wie 'if (message.val() .....)> 0)' ... –

2

Kontrolle der javascript search method und javascript match method aus. Ich bevorzuge die Suche, weil es dir egal ist, ob es existiert, dann tust du so etwas.

var stringToSearch = "stackoverflow"; 

if (stringToSearch.search("over") >= 0){ 
    //exists 
} 

Übrigens hat Ihre Frage etwas nicht richtig gemacht. Ich weiß nicht, PHP, so kann ich Ihnen nicht helfen

Verwandte Themen