• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

shoutbox mit spamschutz?

Status
Für weitere Antworten geschlossen.

wolf360

Neues Mitglied
Hallo,

ich habe vor eine shoutbox mit php zu machn, aber ich will einen spamschutz machn... z.B. mit cookies?! nur weiß ich nicht wie das geht?!

Der benutzer soll nur alle 20 sek eine nachricht schreiben können ?!

ich will halt erstmal irgendwie prüfen ob der benutzer cookies aktiviert hat und wenn nicht soll halt ne nachricht kommen "Um eine nachricht zu schreiben müssen Sie cookies aktiviert haben"?!

wie stell ich das an ?

gruß wolf360
 
Werbung:
Werbung:
ich bin ja dabei php zu lernen...

ich hab mir etz grad mla des mit den cookies angschaut... aber irgendwie setzt der bei mir den cookie nicht... hab etz mal 20 sek gmacht:

HTML:
<?php
setcookie("wolf360", "schutz",time() + 20);
?>
genauso komisch ist das hier:

HTML:
<?php
    error_reporting(E_ALL);
    setcookie("testcookie", "testwert", time()+(60*60));
    // Cookie für 1 Stunde setzen.
    if(isset($_COOKIE['testcookie'])) {
        echo "User hat den Cookie akzeptiert\n";
    } else {
        echo "User hat den Cookie nicht akzeptiert\n";
    }        
?>
ich hab den cookie zwar gepseicher, aber die ausgabe is ich habe ihn nicht akzepiert?!
 
Zuletzt bearbeitet:
Schau dir das mal an:

Wenn sie den setcookie-Befehl aufrufen wird der Cookie, den man gesendet hat, im aktuellen Scriptaufruf nicht im Array $_COOKIE gespeichert. Kann ja auch nicht gehen, denn setcookie sendet einen Header-Befehl zum Client, dass er einen Cookie setzen soll. Die Cookies, die der Browser zum Server schickt, wurden schon zum Server geschickt. Deshalb muss man sich folgendes merken. Cookies, die man mit setcookie setzen möchte, sind, wenn überhaupt, erst beim nächsten Aufruf der Seite im Array $_COOKIE. Folgende Abfrage wird nicht Funktionieren.

Einfach mal darunter lesen...-.-

#php/QuakeNet Tutorial - Cookies

mfg

Web_spider
 
Werbung:
lol stimmt... des hab ich wirklich überlesen!

okey hab etz scho mal so des grundgrüßt von der shoutbox aber ich habe einen riesen fehler entdeckt:

so mal ungefähr:

HTML:
<?php include("verbindungsaufbau.php"); ?>
<?php


  //eintrag
 $eintrag="INSERT INTO shoutbox (name, text) VALUES ('".$_POST['name']."', '".$_POST['text']."')";
 $eintragen = mysql_query($eintrag);


     if(isset($_COOKIE['wolf360'])){
        echo "Name: \n
             <form method=\"post\">
             <input maxlength=\"10\" name=\"name\"></input><br>
             Text:<br>
             <input maxlength=\"30\" name=\"text\"></input>
             ";}
     else{
      echo "Sie müssen cookies Aktivieren";
      }

      //abfrage
      $abfrage="SELECT * FROM shoutbox" or DIE ("gibts net");
      $query = mysql_query($abfrage) or DIE ("Falsch");

     while($reihen = mysql_fetch_array($query)){
         echo $reihen['name'].'<p>';
         echo $reihen['text'].'<p>';
         }
?>

wenn man was eingeben hat, und man läd die seite neu, macht der immer wieder den gleichen eintrag nochmal... ?! wie verhinder ich das ?!
 
Zuletzt bearbeitet:
Ich würde dir empfehlen es mit einer SESSION zu machen:

PHP:
session_start();

if (!isset($_SESSION['ausgefuellt'])) {

  echo "Hier folgt das Formular!";
  // Formular
  /*
  Da die Seite neu aufgerufen wird, kann mit dem if-else-Konstrukt 
  die SESSION bequem überprüft werden.
  */
  $_SESSION['ausgefuellt'] = true;

}
elseif (!isset($_SESSION['spamschutz'])) {
 
  $eintrag = "INSERT INTO ...";
  $eintragen = mysql_query($eintrag);

  if ($eintragen) {

    echo "Erfolgreich!";
    $_SESSION['spamschutz'] = true;

  }
  else {

    echo "Fehler beim Abschicken!";

  }

}
else {
  
  die('Fehler, Spamschutz aktiv!');

}
Du zeigst das Formular nur an, wenn die SESSION ausgefuellt nicht gesetzt ist, wenn sie gesetzt ist, wird der Query nur abgeschickt, wenn die SESSION spamschutz nicht gesetzt ist, wenn sie doch gesetzt ist, wird zu else gesprungen und das Programm abgebrochen.
Funktioniert besser als Cookies.
Du darfst halt nicht vergessen die SESSIONS zu setzen (;
 
Da ich gelesen habe, dass du PHP am lernen bist, möchte ich dich darauf hinweisen, dass der Befehl session_start() immer am Anfang kommen muss.

Vorher darf keine Ausgabe kommen.
Also:
PHP:
<?php
session_start(); // Richtig
?>

<?php
// Session starten
session_start(); // Richtig
?>

<?php
echo'Session starten';
session_start(); // Falsch
?>

<?php
include "einfügen.php";
session_start(); // Falsch
?>
MfG, matibaski
 
Werbung:
bissle schwachsinnig ist das schon ? da die sessions auch deaktiviert werden können und wenn jmd ein bot schreibt, kann er doch 3 stück pro minute schreiben, d.h. 3*60 pro stunde und über 1 tag 3*60*24 ..... auch ne nette summe ...

warum kein captcha bildchen ? oder eine frage zur allgemeinbildung `?
 
Du kansnt doch zusätzlich sagen, dass man pro IP nur 10 Einträge oder so machen kann. Kann man zwar auch umgehen, aber jemand der auf so viele Sachen Rücksicht nimmt muss schon ei nbisschen verrückt sein... :-)

Corvulus
 
Werbung:
Werbung:
kreativer vorschlag zur bad word list mit kleinem spam schutz ;)

mach was draus!

PHP:
<?php

/*
// ein input feld das den namen timestamp hat (name="timestamp") solltest dumit einem
// aktuellem timestamp füllen (value="<?=time();?>") damit spam verhindert wird
*/

$time = (is_numeric($_GET['timestamp'])) ? $_GET['timestamp'] : false;

if(!$time){ die("Bitte benutzen Sie das original Formular!"); }

$time = time() - $time;

if($time < 3){ die("Wer schreibt schon einen Beitrag in 3 Sekunden?"); }

/*
// aufbau des arrays
// $_bw[0] zu suchendes Wort
// $_bw[1] kommentar nicht zulassen?
//
// Wahlweise auch per MySQL zu erstellen ;)
*/

$_bw = array('****' => false, // Hier steht fu ck ploede bad word list :-D
             'scheiße' => false,
             'viagra' => true);

$text = trim($_GET['text']);

$text = (empty($text)) ? false : $text ;

if(!$text){ die("Bitte füllen Sie das Formular aus!"); }

foreach($_bw as $w => $a)
{
    if(stristr($text, $w) !== false)
    {
        if($a)
        {
            die("Bitte drücken Sie sich nicht aus wie ein kleines Kind!");
        }
        else
        {
            preg_replace("/".$w."/i", '*****', $text);
        }
    }
}

/*
// Eintrag zur datenbank hinzufügen!
*/

?>
 
okey erstmal danke für eure hilfe... ich hab mir etz gedacht das eigentlich captcha wirklich ne gute idee is... aber irgendwie hackts da schon bei mir bei der abfrage:

hab mal kurz nen test gemacht:

HTML:
  <form method="post">
  <input type="text" name="zahl"></input>
  <input type="submit"></input>
  </form>
<?php
 $random = rand(10,20);
 echo $random;

 if($random == $_POST['zahl']){
     echo "Richtiger code";
     }
 else{
  echo "Falscher code";
 }
?>
was is hier falsch?! ich hab doch gmacht wenn $random gleich dem post ist, dann soll richtig kommn!?

aber es kommt immer falsch...

warum?!
 
klar weil er die zahlen erst vergleicht nach dem absenden, und dann hat sich ja die zahl von random schon wieder geändert
PHP:
<?php
if(!isset($_POST["random"]))
{
  $r = rand(0,10);
  ?>
  <form method="POST">
  <input type="hidden" name="random" value="<?php echo $r; ?>" />
  Bitte geben sie die folgende Zahl ein: <?php echo $r; ?><br />
  <input type="text" name="random2" value="" /><br />
  <input type="submit" value="pr&uuml;fen" />
  </form>
  <?php
}
else
{
  if($_POST["random"] == $_POST["random2"])
    echo "richtig";
  else 
    echo "falsch";
}
?>
 
Werbung:
....

**************

....

EDIT - (Frank)
Ein Link, der zu einem Rar Archiv führt, ohne Beschreibung, und ohne zu wissen, was das ist, ist etwas gefährlich
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.
Zurück
Oben