doppelpost verhindern

Status
Nicht offen für weitere Antworten.
Hi, danke schon mal für die schnelle Antwort!

PHP:
<?

// [...]


$io == 1; // in dem anschließenden SQL-Querry wird nur wenn $io immernoch 1 ist, der Querry ausgeführt

    $spamschutz = strtoupper($_POST['txt']); // $_POST['inhalt'] ist der Inhalt des Formularfeldes, dass ich überprüfe
    
    
    $sql_spamschutz = "SELECT * FROM $sd_spamschutz ORDER BY id";
    $result_spamschutz = mysql_query($sql_spamschutz);
    
    while ($reihe = mysql_fetch_assoc($result_spamschutz)) {
        
        if (strstr($spamschutz, $reihe['spaminhalt']) != FALSE) {
            
            echo 'Ihre Nachricht wurde als <font color="darkred">Spam</font> klassifiziert.';
            $io = 0;    // die $io Variable (In Ordnung) setz ich auf null, und der eintrag wird anschließend nur gespeichert, wenn $io = 1 ist.
        }
    }

if ($io == 1) {

//hier der Datenbankeintrag

$ip ="$REMOTE_ADDR"; 
$link = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbtable, $link);

if($txtMessage!="" && $txtNickname!=""){
	$txtMessage=format_message($txtMessage);
	$txtNickname=format_title($txtNickname);
	
	
	
	
	if(mysql_query("INSERT INTO $shoutbox (time, nick, txt,ip) VALUES('".time()."', '$txtNickname', '$txtMessage','$ip')")){
 header("Location: http://www.stokesdesign.de/"); 
}  }


$ausgabe = mysql_query("SELECT * FROM $shoutbox ORDER BY time DESC LIMIT 6");
} 
?>

Weiß jetzt nicht, ob das korrekt eingefügt ist! Hab auf jeden Fall die Datenbank erstellt, wie du gesagt hast (2 Felder - id & badwords) - aber nun werden keine Einträge mehr angezeigt und man kann auch nichts mehr einspeichern..
 
Also, zuerst musst du in der Zeile

PHP:
if (strstr($spamschutz, $reihe['spaminhalt']) != FALSE) {

spaminhalt zu dem Namen deiner Spalte ändern. Ist wie du wahrscheinlich sagst: badwords

Sonst sehe ich so auf die Schnelle keine weiteren Fehler... Schreib mal, ob das dann funktioniert
 
@ Hektik: Hat irgendwie nicht funktioniert - hab ich aber jetzt ein wenig anders gelöst..

PHP:
<? 
if (isset($_POST["pruefung"]))
{
    // Postvariablen aufarbeiten
  $pruefung = $_POST["pruefung"];
  $eintragen = $_POST["eintragen"];
    // Hier den Namen der Textarea anpassen
   //  nur rechts im $_POST-Bereich das Wort message ersetzen
  $message = stripslashes($_POST["txtMessage"]);
    // Nach wieviel Fehlversuchen soll der Schreiber rausgeworfen werden ?
    // Der Poster hat z.B. 3 Fehlversuche, beim 4. geht es ab.
   //  Das greift nur, wenn im Text ein Wort aus der Badword Liste vorhanden ist.
  $rauswurf = 2;
    // Wohin soll er rausgeworfen werden ?
  $url_rauswurf = "http://www.antispam.de/";
    // Hinweistext für den Spammer
  $spamhinweis = "No Spam please ";
   // Die Liste kann beliebig erweitert werden
  $badwords =  "thanks,good,great,thank,tnx,look,looking,perfect,very,nice,gay,casino,sex,viagra, pharma,blowjob, blow,www.meccanicxc.org,agencies,fuck,damn,Shit,Cocksucker,motherfucker,Pussy,Cunt,Asshole,Fuckhead,Fuckface,Dick,Shitface,Assholecleaner,Fucking bitch,Tits,Bitch,God damn whore,Clit,Twat,Bastard,win";


  // Rauswurf wenn oben angegebene Menge an Postings erreicht wurde
  if ($pruefung == $rauswurf): header("location:".$url_rauswurf.""); endif;
  $wordtest = explode(",",$badwords);
  foreach ($wordtest as $value)
  {
   if (stristr($message,$value)):
     $eintragen = 0;
     $spam = 1;
   endif;
  }
  if ($spam == 1):
   if (empty($pruefung)) $pruefung = 1; else $pruefung = bcadd($pruefung,1,0);
   $spamtext = $spamhinweis;
  endif;
} // Ende $_POST["pruefung"]
?>
<?
// [...]




$ip ="$REMOTE_ADDR"; 
$link = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbtable, $link);

if($txtMessage!="" && $txtNickname!=""){
    $txtMessage=format_message($txtMessage);
    $txtNickname=format_title($txtNickname);
    
	if ($eintragen == 1)
 {
	
    if(mysql_query("INSERT INTO $shoutbox (time, nick, txt,ip) VALUES('".time()."', '$txtNickname', '$txtMessage','$ip')")){
 header("Location: http://www.stokesdesign.de/"); 
}  }

}
$ausgabe = mysql_query("SELECT * FROM $shoutbox ORDER BY time DESC LIMIT 6");



?> 
<table width="200" border="0" align="left" cellpadding="0" cellspacing="0" bgcolor="#23231F" class="box" id="shoutbox">
  <tr> 
    <td width="200">
      <table width="100%" border="0" cellpadding="0"cellspacing="0" valign="top">
        <tr>
          <td><img src="img/logo.gif" width="200" height="65" /></td>
        </tr>
        <tr> 
          <td> 
            <script language=JavaScript>
<!--
function infos(url) {

var punkt = url.indexOf(".");
var slash = url.indexOf("/")+1;
var name = url.substring(slash,punkt);
var windowname = "InfosOf"+name;

infowindow = window.open(url,windowname,"scrollbars=no,width=270,height=500,resizable=no,dependent=yes");

infowindow.moveTo(screen.width/2-240,screen.height/2-290);
infowindow.focus();

}
//-->
</script>
            <form name="frmMsgBox" method="POST" action="index.php">
              <table width="100%" border="0" cellspacing="0" cellpadding="1">
                <tr>
                  <td colspan="2" class="text">&nbsp;</td>
                </tr>
                <tr> 
                  <td class="text" width="30%"> &nbsp;Name:</td>
                  <td class=text width="70%"> 
                    <input type="text" name="txtNickname" maxlength="36" size="20">                  </td>
                </tr>
                <tr> 
                  <td class="text" width="30%"> &nbsp;Message:</td>
                  <td width="70%"> 
                    <input type="text" name="txtMessage" size="20" value="" maxlength="300">                  </td>
                </tr>
              </table>
               &nbsp;
               <input type="submit" name="senden" value="senden">
			   <input type="hidden" name="pruefung" value="<? echo $pruefung;?>">
				<input type="hidden" name="eintragen" value="1" />
            </form>          </td>
        </tr>
        <tr>
          <td align="top" valign="top">&nbsp;</td>
        </tr>
        <tr> 
          <td align="top" valign="top"> 
            <?php while($print = mysql_fetch_array($ausgabe)){?>
            <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td width="2%">&nbsp;</td> 
                <td class="sbtext" width="98%"><b> 
                  <span class="sbname"><?=$print[nick]?></span>
                  </b><br>
                  schrieb am
                  <? print date("d.m.", $print[time]); ?>
                  um 
                  <? print date("H:i", $print[time]); ?>
                  <br>
                  <span class="sbtext">
                  <?=$print[txt]?></span>
                  <br>
                  <br></td>
              </tr>
            </table>
            <? } ?></td>
        </tr>
        <tr>
          <td align="top" valign="top"><div align="left"><a href="#" onclick="sbarchiv()">archiv</a></div></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<?php echo $spamtext; ?>

Also bevor dir die Daten in die Datenbank schreibt, prüft er noch mit "eintragen=1", ob die badwords vorhanden sind, die ich oben eingetragen hab... Klappt soweit auch! ;)

@ RS9999: Wie baue ich die denn genau ein? Gibt es noch ne Möglichkeit, Einträge rauszufilter, die mehr als 2 Links beinhalten? Bei mir häufen sich, wie oben schon gesagt, Einträge, mit so 20-30 Links zu irgendwelchen idiotischen Seiten...
 
Zu mysql_real_escape_string() hat Gumbo doch bereits einen Vorschlag gemacht.
Ansonsten benutze meinen Link zum Thema. Dort findest Du die Antworten.

Zu Deiner zweiten Frage, da wäre folgendes möglich:

PHP:
<?php 
      //Nehmen wir an das kommt aus dem Formularfeld    
   $_POST['txtMessage'] = 'Testtext0<a href="http://www.spam-eins.de">link1</a>Testtext1<a href="http://www.spam-zwei.de">link2</a>Testtext2<a href="http://www.spam-drei.de">link3</a>Testtext3<a href="http://www.spam-vier.de">link4</a>Testtext4<a href="http://www.spam-fünf.de">link5</a>Testtext5';
   
   //Filter zum lesen aller Links im Text.
   $filter = '/(<\/?.*a>)/iU';
   preg_match_all($filter,$_POST['txtMessage'],$matches);
   //Anzahl der gefundenen Stellen ermitteln.
   $anzahl = count($matches[0]);
   
   //Maximale Anzahl der Links auf 2 begrenzen!
   $_POST['txtMessage'] = preg_replace($filter,'Link',$_POST['txtMessage'],$anzahl-2);
 ?>
 
Zuletzt bearbeitet:
Hi, danke für die Antwort - wo setze ich das denn im Script ein? Ich hab da ein neues kleines Problem gefunden.. zum einem blockt er nun auch Wörter wie "hassen" - weil dort das Wort ass drinnen ist :) Kann man das irgendwie umgehen?

Zum zweiten erkennt das Script nicht mehr Links. Ich hatte das vorher so geschrieben, wenn jemand Links eingibt, das Script diese sofort umwandeln und in "->LINK" ausgibt? Könnt ihr da vllt. mal drüber gucken? Wäre sehr nett!

Grüße aus Köln

Marius
 
@RS9999: Könntest du bitte nochmal aufs Script gucken? Habs probiert - aber bei mir klappt es nicht - kann auch sein, dass ich es an der falschen Stelle eingebaut habe..
 
Status
Nicht offen für weitere Antworten.
Zurück