Hallo Com,
ich habe hier mal mein register script, aber iwie kann ich beim Captcha eingeben was ich will,
hat vllt jmd nen Fix dafür?
wie baue ich jetzt die Captcha abfrage ein?PHP-Code:<h1>Registration</h1><div class="site"> <?php if(!isset($_POST['reg_username'])) $_POST['reg_username'] = ''; if(!isset($_POST['reg_email'])) $_POST['reg_email'] = ''; odbc_exec($mssql, 'USE [ACCOUNT_DBF]'); $checkacc = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL] WHERE account=\''.mssql_escape_string($_POST['reg_username']).'\''); $checkmail = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL_DETAIL] WHERE email=\''.mssql_escape_string($_POST['reg_email']).'\''); $errors = array(); if(empty($_POST['reg_username']) || empty($_POST['reg_password']) || empty($_POST['reg_confirmpw']) || empty($_POST['reg_email']) || empty($_POST['reg_check']) || empty($_POST['reg_captcha'])) $errors[] = 'Du musst alle Felder ausfüllen!'; if(!empty($_POST['reg_username']) && odbc_result($checkacc, 'count') > 0) $errors[] = 'Der Benutzername existiert bereits!'; if(!empty($_POST['reg_email']) && odbc_result($checkmail, 'count') > 0) $errors[] = 'Die E-Mail Adresse existiert bereits!'; if(!empty($_POST['reg_username']) && (strlen($_POST['reg_username']) > 10 || strlen($_POST['reg_username']) < 4)) $errors[] = 'Dein Benutzername muss 4 - 10 Zeichen enthalten!'; if(!empty($_POST['reg_password']) && (strlen($_POST['reg_password']) > 12 || strlen($_POST['reg_password']) < 6)) $errors[] = 'Dein Passwort muss 6 - 12 Zeichen enthalten!'; if((!empty($_POST['reg_password']) && !empty($_POST['reg_confirmpw'])) && $_POST['reg_password'] != $_POST['reg_confirmpw']) $errors[] = 'Deine Passwort Wiederholung stimmt nicht!'; if(!empty($_POST['reg_email']) && !preg_match('/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/', $_POST['reg_email'])) $errors[] = 'Die E-Mail Adresse ist nicht valide'; if(isset($_POST['reg_submit'])) { if(count($errors) > 0) { echo '<div class="fail">'; foreach($errors as $error) { echo $error.'<br/>'; } echo '</div>'; } else { odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL] (account, password, isuse, member, id_no1, id_no2, realname, reload, OldPassword, TempPassword, cash , votepoints) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\''.mssql_escape_string(md5($_CONFIG['pwdsalt'].$_POST['reg_password'])).'\', N\'T\', N\'A\', NULL, 0, N\'P\', NULL, 0, NULL, 0, 0)'); odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL_DETAIL] (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\'A000\', N\'2\', N\'F\', \''.mssql_escape_string(date('Ymd H:i:s')).'\', N\'20010101\', N\'20990101\', N\'20050101\', N\'O\', NULL, N\''.mssql_escape_string($_POST['reg_email']).'\')'); echo '<div class="success">Dein Account wurde erfolgreich erstellt!</div>'; } } ?> <form method="post"> <table> <tr> <td>Benutzername:</td> <td><input type="text" name="reg_username" maxlength="10" /></td> </tr> <tr> <td>Passwort:</td> <td><input type="password" name="reg_password" maxlength="11" /></td> </tr> <tr> <td>Wdh. Passwort:</td> <td><input type="password" name="reg_confirmpw" /></td> </tr> <tr> <td>E-Mail:</td> <td><input type="text" name="reg_email" /></td> </tr> <tr> <td><img src="./inc/captcha.php" name="captcha" /></td> <td><input type="text" name="reg_captcha" maxlength="5" /></td> </tr> <tr> <td></td> <td><input type="submit" name="reg_submit" value="Account erstellen" /></td> </tr> </table> </form></div>
Danke
MfG
.:Flyff:.
zb
Da du ja eh alles mit is set abfragst^^PHP-Code:
if(!isset($_POST['captcha_eingabe'])
echo '<h1>Gebe ein captcha ein!!</h1>';
^ By Naru - ty :3
Meine Guide's:[HowTo]Einfachen Installer erstellen mit NSIS
[HowTo]Giftboxen erstellen
Ich nehme KEINE LEEREN ICQ/Skype anfragen an!
Helpful Guide:
Wo ist da das Captcha?
Mit freundlichem Gruß
@Papa ich gehe davon aus da er es schon soweit eigbeaut hat und nur an der überprüfung scheitert (liest sich so raus)
^ By Naru - ty :3
Meine Guide's:[HowTo]Einfachen Installer erstellen mit NSIS
[HowTo]Giftboxen erstellen
Ich nehme KEINE LEEREN ICQ/Skype anfragen an!
Helpful Guide:
Selbst dann ist es falsch, da ein Captcha ja aus 2 Teilen besteht.
Richtig wäre in dem fall :
Wobei ich sagen muss das ich bezweifel das dass Captcha so erstellt werden kann :PHP-Code:if(empty($_POST['reg_captcha']) || md5($_POST['reg_captcha']) != md5($_POST['captcha'])) $errors[] = 'Das Captcha ist nicht oder falsch angegeben.';
Ich gehe stark von aus das man die captcha.php so ändern muss das man die Captcha Variable erstellen muss und dann im GET an die captcha.php ergeben muss im img und die captcha.php wird dann zum Bild einfach nur. ( Da hilft auch das Script von mir mit dem Bild erstellen , man muss nur die richtigen einstellungen machen ;-) )PHP-Code:<td><img src="./inc/captcha.php" name="captcha" /></td>
<td><input type="text" name="reg_captcha" maxlength="5" /></td>
Zumindest mach ich es so. Und erstellen tue ich die Captcha variable immer mit der funktion :
Dann sieht mein Script so aus :PHP-Code:function createcaptchacode($varlong){
$captcha = "";
$pool = "qwertzupasdfghkyxcvbnm23456789WERTZUPLKJHGFDSAYXCVBNM";
srand ((double)microtime()*1000000);
for($i=1;$i<=$varlong;$i++) {
$captcha .= substr($pool,(rand()%(strlen ($pool))), 1);
}
return $captcha;
}
PHP-Code:<?php
function createcaptcha($varlong){
$captcha = "";
$pool = "qwertzupasdfghkyxcvbnm23456789WERTZUPLKJHGFDSAYXCVBNM";
srand ((double)microtime()*1000000);
for($i=1;$i<=$varlong;$i++) {
$captcha .= substr($pool,(rand()%(strlen ($pool))), 1);
}
return $captcha;
}
$cre_captcha = createcaptcha('10');
?>
<h1>Registration</h1>
<div class="site">
<?php
if(!isset($_POST['reg_username'])) $_POST['reg_username'] = '';
if(!isset($_POST['reg_email'])) $_POST['reg_email'] = '';
odbc_exec($mssql, 'USE [ACCOUNT_DBF]');
$checkacc = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL] WHERE account=\''.mssql_escape_string($_POST['reg_username']).'\'');
$checkmail = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL_DETAIL] WHERE email=\''.mssql_escape_string($_POST['reg_email']).'\'');
$errors = array();
if(empty($_POST['reg_username']) || empty($_POST['reg_password']) || empty($_POST['reg_confirmpw']) || empty($_POST['reg_email']) || empty($_POST['reg_check']) || empty($_POST['reg_captcha'])) $errors[] = 'Du musst alle Felder ausfüllen!';
if(!empty($_POST['reg_username']) && odbc_result($checkacc, 'count') > 0) $errors[] = 'Der Benutzername existiert bereits!';
if(!empty($_POST['reg_email']) && odbc_result($checkmail, 'count') > 0) $errors[] = 'Die E-Mail Adresse existiert bereits!';
if(!empty($_POST['reg_username']) && (strlen($_POST['reg_username']) > 10 || strlen($_POST['reg_username']) < 4)) $errors[] = 'Dein Benutzername muss 4 - 10 Zeichen enthalten!';
if(!empty($_POST['reg_password']) && (strlen($_POST['reg_password']) > 12 || strlen($_POST['reg_password']) < 6)) $errors[] = 'Dein Passwort muss 6 - 12 Zeichen enthalten!';
if((!empty($_POST['reg_password']) && !empty($_POST['reg_confirmpw'])) && $_POST['reg_password'] != $_POST['reg_confirmpw']) $errors[] = 'Deine Passwort Wiederholung stimmt nicht!';
if(!empty($_POST['reg_email']) && !preg_match('/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/', $_POST['reg_email'])) $errors[] = 'Die E-Mail Adresse ist nicht valide';
if(!empty($_POST['reg_captcha']) || md5($_POST['reg_captcha']) != md5($_POST['captcha'])) $errors[] = 'Das Captcha ist nicht oder falsch angegeben.'; //Hier einfach abfragen
if(isset($_POST['reg_submit'])) {
if(count($errors) > 0) {
echo '<div class="fail">';
foreach($errors as $error) {
echo $error.'<br/>';
}
echo '</div>';
} else {
odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL] (account, password, isuse, member, id_no1, id_no2, realname, reload, OldPassword, TempPassword, cash , votepoints) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\''.mssql_escape_string(md5($_CONFIG['pwdsalt'].$_POST['reg_password'])).'\', N\'T\', N\'A\', NULL, 0, N\'P\', NULL, 0, NULL, 0, 0)');
odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL_DETAIL] (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\'A000\', N\'2\', N\'F\', \''.mssql_escape_string(date('Ymd H:i:s')).'\', N\'20010101\', N\'20990101\', N\'20050101\', N\'O\', NULL, N\''.mssql_escape_string($_POST['reg_email']).'\')');
echo '<div class="success">Dein Account wurde erfolgreich erstellt!</div>';
}
}
?>
<form method="post">
<table>
<tr>
<td>Benutzername:</td>
<td><input type="text" name="reg_username" maxlength="10" /></td>
</tr>
<tr>
<td>Passwort:</td>
<td><input type="password" name="reg_password" maxlength="11" /></td>
</tr>
<tr>
<td>Wdh. Passwort:</td>
<td><input type="password" name="reg_confirmpw" /></td>
</tr>
<tr>
<td>E-Mail:</td>
<td><input type="text" name="reg_email" /></td>
</tr>
<tr>
<td><img src="./inc/captcha.php?cap=<?php echo $cre_captcha; ?>" /><input type="hidden" name="captcha" value="<?php echo $cre_captcha; ?>" /></td>
<td><input type="text" name="reg_captcha" maxlength="10" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="reg_submit" value="Account erstellen" /></td>
</tr>
</table>
</form>
</div>
Jetzt fehlt nur noch die passende Captcha.php ^^
Und diese schaut zB so aus :
PHP-Code:<?php
header ("Content-type: image/png");
$text = $_GET['cap'];
$im_width = '120';
$im_height = '17';
$text_size = '5';
$im = imagecreate ($im_width,$im_height);
$background_color = ImageColorAllocate ($im, 0, 0, 0);
$text_color = ImageColorAllocate ($im, 217, 165, 70);
ImageString($im,$text_size,'7','1',$text,$text_color);
ImagePNG ($im);
?>
Mit freundlichem Gruß
Und so siehts bei mir aus:
Captcha.php
PHP-Code:<?php
session_start();
unset($_SESSION['captcha_spam']);
function randomString($len) {
function make_seed(){
list($usec , $sec) = explode (' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
//Der String $possible enthält alle Zeichen, die verwendet werden sollen
$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}
$text = randomString(5); //Die Zahl bestimmt die Anzahl stellen
$_SESSION['captcha_spam'] = $text;
$img = ImageCreateFromPNG('../images/captcha.png'); //Backgroundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Farbe
$ttf = $_SERVER['DOCUMENT_ROOT']."./captcha/ARIAL.TTF"; //Schriftart
$ttfsize = 11; //Schriftgrösse
$angle = rand(0,5);
$t_x = rand(1,8);
$t_y = 14;
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
header('Content-type: image/png');
imagejpeg($img);
imagedestroy($img);
?>dazu die abfrage noch:PHP-Code:<img src="captcha/captcha.php" border="0" title="Sicherheitscode">
<input name="Sicherheitscode" type="text" maxlength="5" />
PHP-Code:if($_POST['Sicherheitscode'] != $_SESSION['captcha_spam']){
$error = "bblabla code falsch blabla";
}
fertig.
Du hast schon gemerkt das dem sein Ausschnitt bereits included wird nur? Somit ist es zumindest an dieser Stelle nicht mehr möglich eine Session zu starten ;-)
Also muss das session_start(); in die index.php oder welche Datei die Hauptdatei auch immer ist ganz oben herein. Sonst kann keine Session im Script abgerufen werden.
Und wirklich sinnig ist es auch nicht hier an der Stelle mit Session zu arbeiten. Extra dafür eine Session starten wenn man ohne arbeitet? Dann lieber über POST. Da kann auch keiner rein fuschen.
Mit freundlichem Gruß
Antwort ob und wie es Funktioniert, sind immer Herzlich Willkommen @ Themen Starter
Mit freundlichem Gruß
Lesezeichen