mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 16:14 Benutzername: Passwort: Auto-Login

Thema: Ein Captcha Problem vom 02.10.2007

Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Ein Captcha Problem
Autor Nachricht
Blodsfana
Threadersteller

Dabei seit: 21.11.2004
Ort: Momentan aus Melsungen
Alter: 38
Geschlecht: Weiblich
Verfasst Di 02.10.2007 15:20
Titel

Ein Captcha Problem

Antworten mit Zitat Zum Seitenanfang

Habe ein Problem beim Einbau eines Captcha Schutzes in mein Mailformular. Hoffe das mir hier jemand helfen kann.

Hier die Index.php wo das Formular drin ist:

Code:
<script>
function check()
{
var email=document.form.email.value, betreff=document.form.subject.value, text=document.form.message.value, nick=document.form.namen.value;
var cemail="",cbetreff="",ctext="", cnick="";

if (email!="")
{
if (document.form.email.value.indexOf('@',0)==-1 || document.form.email.value.indexOf('.',0)==-1)
cemail="Die eingegebene E-Mail Adresse ist nicht korrekt!\n";
}
else
var cemail="Bitte tragen Sie ihre Emailadresse ein.\n";

if (nick=="")
var cnick="Bitte tragen Sie ihren Namen ein.\n\n";

if (betreff=="")
var cbetreff="Bitte tragen Sie einen Betreff für die Email ein.\n";

if (text=="")
var ctext="Bitte tragen Sie eine Nachricht ein.\n";
if (cemail!="" || cbetreff!="" || ctext!="" || cnick!=="")
{
alert(cemail+cbetreff+ctext+cnick)
return false;
}
else
return true;
}
</script>
<?php
session_start();

?></head>
<body>
<form name="form" ACTION="send.php" METHOD="post" onSubmit="return check()">
<table cellpadding="0" cellspacing="0" width="400" border="0">
<tr>
<td width="100"><font face="verdana" size="1">Name:</font></td>
<td><input size="30" type=text name="namen" style="font-family: Verdana; font-size: 8pt; color: #000000; word-spacing: 0; text-align: left; text-indent: 0; border: 1px solid #000000; margin: 0; background-color: #FFFFFF"></td>
</tr>
<tr>
<td><font face="verdana" size="1">Email:</font></td>
<td><input size="30" type=text name="email" style="font-family: Verdana; font-size: 8pt; color: #000000; word-spacing: 0; text-align: left; text-indent: 0; border: 1px solid #000000; margin: 0; background-color: #FFFFFF"></td>
</tr>
<tr>
<td><font face="verdana" size="1">Homepage:</font></td>
<td><input size="30" type=text name="homepage" style="font-family: Verdana; font-size: 8pt; color: #000000; word-spacing: 0; text-align: left; text-indent: 0; border: 1px solid #000000; margin: 0; background-color: #FFFFFF"></td>
</tr>
<tr>
<td><font face="verdana" size="1">Betreff:</font></td>
<td><input size="30" type=text name="subject" style="font-family: Verdana; font-size: 8pt; color: #000000; word-spacing: 0; text-align: left; text-indent: 0; border: 1px solid #000000; margin: 0; background-color: #FFFFFF"></td>
</tr>
<tr>
<td><font face="verdana" size="1">Telefonnummer:</font></td>
<td><input size="30" type=text name="telnummer" style="font-family: Verdana; font-size: 8pt; color: #000000; word-spacing: 0; text-align: left; text-indent: 0; border: 1px solid #000000; margin: 0; background-color: #FFFFFF"></td>
</tr>
<tr>
  <td><font face="verdana" size="1">Rechenaufgabe</font></td>
  <td><img src="rechen-captcha.php"> - <input type="text" name="sicherheitscode" size="5" style="font-family: Verdana; font-size: 8pt; color: #000000; word-spacing: 0; text-align: left; text-indent: 0; border: 1px solid #000000; margin: 0; background-color: #FFFFFF"> </td>
</tr>
<tr>
<td><font face="verdana" size="1">Nachricht:</font></td>
<td><textarea type=text cols=29 rows=6 name="message" style="font-family: Verdana; font-size: 8pt; color: #000000; word-spacing: 0; text-align: left; text-indent: 0; border: 1px solid #000000; margin: 0; background-color: #FFFFFF"></textarea></td>
</tr>
<tr><td height="15" colspan=2></td></tr>
<tr>
  <td>f</td><td><input type="submit" value="Absenden" style="font-size: 8pt; font-family: Verdana; color: #000000; border: 1px solid #000000; background-color: #FFFFFF"> <input type="reset" value="Löschen" style="font-size: 8pt; font-family: Verdana; color: #000000; border: 1px solid #000000; background-color: #FFFFFF"></td></tr>
</table>
<br>
</form>
</body>


Jetzt die Datei send.php die das formular abschickt:

Code:
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script>
var tt=0;
anf();
function anf()
{
if (tt!=0)
location.href="index.php";
tt++;
}
setTimeout("anf()", 5000);
</script>
</head>
<body bgcolor="ffffff">
<?
$datum=date("d.m.Y  -  H:i");
$mail="test@test.de";
mail("$mail", "$subject", "$namen sendete Ihnen eine Nachricht am $datum.\n\n
-----------------\n
$message\n
-----------------\n
+++++++++++++++++\n
-----------------\n
Email: $email\n
Homepage: $homepage\n
Telefonnummer: $telnummer\n
-----------------\n");
?>
<table width="100%" cellpadding="0" cellspacing="0" border="0" height="100%">
<tr><td height="50%"></td></tr>
<tr><td><center><font face="verdana" color="black" size="1">Die Email wurde erfolgreich an <a href="mailto:<?php echo"$mail" ?>><?php echo"$mail" ?></a> versendet. <br><br>Sie werden in 5 Sekunden zur Hauptseite zurückgeleitet. Sollte Ihr Browser dies nicht unterstützen, klicken Sie bitte <a href="index.php" target="_self">hier</a></font></center></td></tr>
<tr><td height="50%"></td></tr>
</table>
</body>
</html>


Und das ist das rechen captcha:

Code:
<?php
session_start();
unset($_SESSION['rechen_captcha_spam']);
$zahl1 = rand(10,20); //Erste Zahl 10-20
$zahl2 = rand(1,10);  //Zweite Zahl 1-10
$operator = rand(1,2); // + oder -

if($operator == "1"){
   $operatorzeichen = " + ";
   $ergebnis = $zahl1 + $zahl2;
}else{
   $operatorzeichen = " - ";
   $ergebnis = $zahl1 - $zahl2;
}

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key))-1, 1);
   $char = chr(ord($char)+ord($keychar));
   $result.=$char;
}
return base64_encode($result);
}

$_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "29jfkd921"); //Key
$_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']);
         
$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,13,28,91);
$hintergrund = imagecolorallocate($img,162,162,162);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>


Und jetzt das Problem, die anzeige der rechenaufgabe und das entsprechende formular zum eintragen der lösung ist in der obigen index.php schon drin. Nur muss dieser code noch irgendwie eingebunden beziehungsweise eingebaut werden. leider klappt das nicht da ich nicht weis wie und wohin.

Code:
<?php
session_start();
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key))-1, 1);
   $char = chr(ord($char)+ord($keychar));
   $result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "29jfkd921");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if(isset($_SESSION['rechen_captcha_spam']) AND $sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);

//
//
//Hier kommt das ursprüngliche Script hin.
//
//

}
?>


Der Key 29jfkd921 muss der Gleiche sein wie bei der rechen-captcha.php. Der Einbau ins bestehende Script ist sehr einfach, es braucht nur eine if-Schleife um das bisherige Script, welche überprüft ob das Ergebnis das eingegeben wurde, der generierten Captcha Rechnung entspricht. Optional kann auch noch ein else Teil angefügt werden, welche den Fehler ausgibt, dass das Ergebnis falsch war.

Das teil welches sagt ob der code falsch ist sollte auch in dem pop up fenster angezeigt werden welches auch meldet das der betreff fehlt oder die mail adresse falsch ist.

Jetzt hoffe ich das ihr mir weiterhelfen könnt oder eventuell ein fertiges script kennt welches der des meinen optisch identisch ist.

Dank schon mal im voraus, Alex
  View user's profile Private Nachricht senden
Ähnliche Themen CGI-Gästebuch Spamschutz - Captcha
[PHP] Captcha-Script mit imagecopymerge()
Captcha in einer Art Lightbox
Reload eines Captcha?
Captcha für eine webmailer.cgi
[TYPO3][ve_guestbook+sr_freecap] kein captcha im formular
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.