как вставить капчу?

Тема в разделе "PHP", создана пользователем printer, 29 янв 2016.

  1. printer

    printer

    Регистрация:
    28 янв 2016
    Сообщения:
    0
    Симпатии:
    0
    Всем привет! У меня есть готовый код капчи, но я никак не могу его вывести при ргистрации, просьба помочь!
    Код:
    <?php
    @error_reporting(E_ALL ^ E_NOTICE);
    @ini_set('display_errors', true);
    @ini_set('html_errors', false);
    @ini_set('error_reporting', E_ALL ^ E_NOTICE);
    function clean_url ($url) {
    if ($url == '') return;
    $url = str_replace("http://", "", $url);
    if (strtolower(substr($url, 0, 4)) == 'www.')  $url = substr($url, 4);
    $url = explode('/', $url);
    $url = reset($url);
    $url = explode(':', $url);
    $url = reset($url);
    return $url;
    }
    if (clean_url($_SERVER['HTTP_REFERER']) != clean_url($_SERVER['HTTP_HOST'])) return;
    session_start();
    $font=imagecreatefrompng("fonts/font.png");
    imagealphablending($font, true);
    $fontfile_width=imagesx($font);
    $fontfile_height=imagesy($font)-1;
    $font_metrics=array();
    $symbol=0;
    $reading_symbol=false;
    $alphabet = "0123456789";
    $alphabet_length = strlen($alphabet);
    for($i=0;$i<$fontfile_width && $symbol<$alphabet_length;$i++){
    $transparent = (imagecolorat($font, $i, 0) >> 24) == 127;
    if(!$reading_symbol && !$transparent){
    $font_metrics[$alphabet{$symbol}]=array('start'=>$i);
    $reading_symbol=true;
    continue;
    }
    if($reading_symbol && $transparent){
    $font_metrics[$alphabet{$symbol}]['end']=$i;
    $reading_symbol=false;
    $symbol++;
    continue;
    }
    }
    $image = imagecreatetruecolor(165,60);
    $width = ImageSX($image);
    $height = ImageSY($image);
    imagealphablending($image, true);
    $background_color = array(247,247,247);
    $foreground_color = array(70,70,70);
    $white=imagecolorallocate($image, 255, 255, 255);
    $black=imagecolorallocate($image, 128, 128, 0);
    imagefilledrectangle($image, 0, 0, ImageSX($image)-1, ImageSY($image)-1, $white);
    $string = '';
    $x = 5;
    $y = 5;
    for ($i=0;$i<6;$i++) {
    $char = rand(0,9);
    $string .= $char;
    if ($x > 15) $x = $x - 2;
    imagecopy($image,$font,$x,$y,$font_metrics[$char]['start'],1,$font_metrics[$char]['end']-$font_metrics[$char]['start'],42);
    $x += $font_metrics[$char]['end']-$font_metrics[$char]['start'];
    }
    for ($i=0;$i<10;$i++) {
    ImageSmoothAlphaLine($image,Rand(5,$width*0.5),Rand(5,$height-5),rand($width*0.5,$width-5),rand(5,$height-5),255,255,255);
    }
    for ($i=0;$i<2;$i++) {
    ImageSmoothAlphaLine($image,rand(5,10),Rand(5,$height-5),rand($width-10,$width-5),rand(5,$height-5),0,0,0);
    }
    $center=$x/2;
    $img2=imagecreatetruecolor(ImageSX($image), ImageSY($image));
    $rand1=mt_rand(750000,1200000)/10000000;
    $rand2=mt_rand(750000,1200000)/10000000;
    $rand3=mt_rand(750000,1200000)/10000000;
    $rand4=mt_rand(750000,1200000)/10000000;
    $rand5=mt_rand(0,3141592)/500000;
    $rand6=mt_rand(0,3141592)/500000;
    $rand7=mt_rand(0,3141592)/500000;
    $rand8=mt_rand(0,3141592)/500000;
    $rand9=mt_rand(330,420)/110;
    $rand10=mt_rand(330,450)/110;
    for($x=0;$x<ImageSX($image);$x++){
    for($y=0;$y<ImageSY($image);$y++){
    $sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1;
    $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10;
    if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){
    $color=255;
    $color_x=255;
    $color_y=255;
    $color_xy=255;
    }else{
    $color=imagecolorat($image, $sx, $sy) & 0xFF;
    $color_x=imagecolorat($image, $sx+1, $sy) & 0xFF;
    $color_y=imagecolorat($image, $sx, $sy+1) & 0xFF;
    $color_xy=imagecolorat($image, $sx+1, $sy+1) & 0xFF;
    }
    if($color==0 && $color_x==0 && $color_y==0 && $color_xy==0){
    $newred=$foreground_color[0];
    $newgreen=$foreground_color[1];
    $newblue=$foreground_color[2];
    }else if($color==255 && $color_x==255 && $color_y==255 && $color_xy==255){
    $newred=$background_color[0];
    $newgreen=$background_color[1];
    $newblue=$background_color[2];
    }else{
    $frsx=$sx-floor($sx);
    $frsy=$sy-floor($sy);
    $frsx1=1-$frsx;
    $frsy1=1-$frsy;
    $newcolor=(
    $color*$frsx1*$frsy1+
    $color_x*$frsx*$frsy1+
    $color_y*$frsx1*$frsy+
    $color_xy*$frsx*$frsy);
    if($newcolor>255) $newcolor=255;
    $newcolor=$newcolor/255;
    $newcolor0=1-$newcolor;
    $newred=$newcolor0*$foreground_color[0]+$newcolor*$background_color[0];
    $newgreen=$newcolor0*$foreground_color[1]+$newcolor*$background_color[1];
    $newblue=$newcolor0*$foreground_color[2]+$newcolor*$background_color[2];
    }
    imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue));
    }
    }
    $_SESSION['captcha'] = $string;
    header("content-type: image/png");
    imagepng($img2);
    imagedestroy($img2);
    function ImageSmoothAlphaLine ($image, $x1, $y1, $x2, $y2, $r, $g, $b, $alpha=0) {
    $icr = $r;
    $icg = $g;
    $icb = $b;
    $dcol = imagecolorallocatealpha($image, $icr, $icg, $icb, $alpha);
    if ($y1 == $y2 || $x1 == $x2)
    imageline($image, $x1, $y2, $x1, $y2, $dcol);
    else {
    $m = ($y2 - $y1) / ($x2 - $x1);
    $b = $y1 - $m * $x1;
    if (abs ($m) <2) {
    $x = min($x1, $x2);
    $endx = max($x1, $x2) + 1;
    while ($x < $endx) {
    $y = $m * $x + $b;
    $ya = ($y == floor($y) ? 1: $y - floor($y));
    $yb = ceil($y) - $y;
    $trgb = ImageColorAt($image, $x, floor($y));
    $tcr = ($trgb >> 16) & 0xFF;
    $tcg = ($trgb >> 8) & 0xFF;
    $tcb = $trgb & 0xFF;
    imagesetpixel($image, $x, floor($y), imagecolorallocatealpha($image, ($tcr * $ya + $icr * $yb), ($tcg * $ya + $icg * $yb), ($tcb * $ya + $icb * $yb), $alpha));
    $trgb = ImageColorAt($image, $x, ceil($y));
    $tcr = ($trgb >> 16) & 0xFF;
    $tcg = ($trgb >> 8) & 0xFF;
    $tcb = $trgb & 0xFF;
    imagesetpixel($image, $x, ceil($y), imagecolorallocatealpha($image, ($tcr * $yb + $icr * $ya), ($tcg * $yb + $icg * $ya), ($tcb * $yb + $icb * $ya), $alpha));
    $x++;
    }
    } else {
    $y = min($y1, $y2);
    $endy = max($y1, $y2) + 1;
    while ($y < $endy) {
    $x = ($y - $b) / $m;
    $xa = ($x == floor($x) ? 1: $x - floor($x));
    $xb = ceil($x) - $x;
    $trgb = ImageColorAt($image, floor($x), $y);
    $tcr = ($trgb >> 16) & 0xFF;
    $tcg = ($trgb >> 8) & 0xFF;
    $tcb = $trgb & 0xFF;
    imagesetpixel($image, floor($x), $y, imagecolorallocatealpha($image, ($tcr * $xa + $icr * $xb), ($tcg * $xa + $icg * $xb), ($tcb * $xa + $icb * $xb), $alpha));
    $trgb = ImageColorAt($image, ceil($x), $y);
    $tcr = ($trgb >> 16) & 0xFF;
    $tcg = ($trgb >> 8) & 0xFF;
    $tcb = $trgb & 0xFF;
    imagesetpixel ($image, ceil($x), $y, imagecolorallocatealpha($image, ($tcr * $xb + $icr * $xa), ($tcg * $xb + $icg * $xa), ($tcb * $xb + $icb * $xa), $alpha));
    $y ++;
    }
    }
    }
    }
    ?>
    --- Добавлено, 29 янв 2016 ---
    А вот сама форма регистрации! Если код корявый, то подправьте пожалуйста!
    Код:
    <?PHP
    $_OPTIMIZATION["title"] = "Регистрация";
    $_OPTIMIZATION["description"] = "Регистрация пользователя в системе";
    $_OPTIMIZATION["keywords"] = "Регистрация нового участника в системе";
    if(isset($_SESSION["user_id"])){ Header("Location: /account"); return; }
    $referer_id = (isset($_COOKIE["i"]) AND intval($_COOKIE["i"]) > 0 AND intval($_COOKIE["i"]) < 1000000) ? intval($_COOKIE["i"]) : 1;
    $db->Query("SELECT * FROM `db_users_a` WHERE `id` = '$referer_id'");
    if ($db->Numrows() > 0){
    $r = $db->FetchArray();
    $referer_name = $r["user"];
    } else {
    $referer_name = 'admin';
    $referer_id = 1;
    }
    ?>
    <div class="text_right">
    <div class="text_pages_top"></div>
    <div class="text_pages_content">
    <div class="s_divide"></div>
    <div class="text" style="padding-top:0px;">
    <?PHP
    if(isset($_POST["loginform"])){
    $lmail = $func->IsMail($_POST["email"]);
    $login = $func->IsLogin($_POST["login"]);
    if($login !== false){
    if($lmail !== false){
    $db->Query("SELECT `id`, `user`, `pass`, `referer_id`, `banned` FROM `db_users_a` WHERE `email` = '$lmail' AND `user` = '$login'");
    if($db->NumRows() == 1){
    $log_data = $db->FetchArray();
    $pass = $func->md5Password($_POST["pass"]);
    if($log_data["pass"] == $pass){
    if($log_data["banned"] == 0){
    # Считаем рефералов
    $db->Query("SELECT COUNT(*) FROM `db_users_a` WHERE `referer_id` = '".$log_data["id"]."'");
    $refs = $db->FetchRow();
    $db->Query("UPDATE `db_users_a` SET `referals` = '$refs', `date_login` = '".time()."', `ip` = INET_ATON('".$func->UserIP."') WHERE `id` = '".$log_data["id"]."'");
    $_SESSION["user_id"] = $log_data["id"];
    $_SESSION["user"] = $log_data["user"];
    $_SESSION["referer_id"] = $log_data["referer_id"];
    Header("Location: /account.html");
    }else echo "<div class='err'>Аккаунт заблокирован</div>";
    }else echo "<div class='err'>Пароль указан неверно</div>";
    }else echo "<div class='err'>Указанный пользователь не зарегистрирован в системе</div>";
    }else echo "<div class='err'>Email указан неверно</div>";
    }else echo "<div class='err'>Логин указан неверно</div>";
    }
    ?>
    <?php   
    if(isset($_POST["singup"])){
    $login = $func->IsLogin($_POST["login"]);
    $pass = $func->IsPassword($_POST["password"]);
    $rules = isset($_POST["rules"]) ? true : false;
    $time = time();
    $ip = $func->UserIP;
    $ipregs = $db->Query("SELECT * FROM `db_users_a` WHERE INET_NTOA(db_users_a.ip) = '$ip' ");
    $ipregs = $db->NumRows();
    $passmd = $func->md5Password($pass);
    $email = $func->IsMail($_POST["email"]);
    if($rules){
    if($login !== false){
    if($email !== false){
    if($pass !== false){
    if($pass == $_POST["re_password"]){
    //$db->Query("SELECT COUNT(*) FROM `db_users_a` WHERE `ip` = '$ipp'");
    //if($db->FetchRow() == 0){
    $db->Query("SELECT COUNT(*) FROM `db_users_a` WHERE `user` = '$login' AND `email` = '$email'");
    if($db->FetchRow() == 0){
    # Регаем пользователя
    $db->Query("INSERT INTO `db_users_a` (`user`, `email`, `pass`, `referer`, `referer_id`, `date_reg`, `ip`)
    VALUES ('$login','$email','$passmd','$referer_name','$referer_id','$time',INET_ATON('$ip'))");
    $lid = $db->LastInsert();
    $db->Query("INSERT INTO `db_users_b` (`id`, `user`, `money_b`)  VALUES ('$lid', '$login', '300')");
    # Вставляем статистику
    $db->Query("UPDATE `db_stats` SET `all_users` = all_users + 1 WHERE `id` = '1'");
    # Отправляем
    $sender = new isender;
    $sender -> SendAfterReg($login, $email, $pass);   
    echo "<div class='ok'>Вы успешно зарегистрировались!</div>";
    }else echo "<div class='err'>Данный пользователь уже существует!</div>";
    }else echo "<div class='err'>Пароль и повтор пароля не совпадают!</div>";
    }else echo "<div class='err'>Пароль заполнен неверно!</div>";
    }else echo "<div class='err'>E-mail заполнен неверно!</div>";
    }else echo "<div class='err'>Логин заполнен неверно!</div>";
    }else echo "<div class='err'>Вы не подтвердили правила!</div>";
    }
    ?>
    <div class="narrow">
    <div class="title_r">Вход</div>
    <form name="loginform" action="/signup.html" method="post">
    <input name="login" type="text" value="<?=(isset($_POST["login"])) ? htmlspecialchars($_POST["login"]) : false; ?>" placeholder="Пользователь" class="input_text"/>
    <input name="email" type="text" placeholder="E-mail" value="<?=(isset($_POST["email"])) ? htmlspecialchars($_POST["email"]) : false; ?>" class="input_text"/>
    <input name="pass" type="password" placeholder="Пароль" class="input_text"/>
    <div class="clear"></div>
    <input type="submit" class="subm_button" value="Вход" name="loginform">
    </form>
    <div class="terms_main">
    <label for="terms"><a href="/recovery.html">Забыли пароль?</a></label>
    </div>
    </div>
    <div class="narrow_r">
    <div class="title_r">Регистрация</div>
    <form name="singup" method="post" action="/signup.html">
    <input type="text" placeholder="Пользователь"  value="<?=(isset($_POST["login"])) ? htmlspecialchars($_POST["login"]) : false; ?>" name="login" class="input_text"/>
    <input type="text" placeholder="E-mail" value="<?=(isset($_POST["email"])) ? htmlspecialchars($_POST["email"]) : false; ?>"/ name="email" class="input_text"/>
    <input type="password" placeholder="Пароль" value="" name="password" class="input_text"/>
    <input type="password" placeholder="Подтвердить пароль" value="" name="re_password" class="input_text"/>
    <div class="clear"></div>
    <div class="terms_main">
    <input type="checkbox" name="rules"/> <label for="terms">Я прочитал и соглашаюсь с <a href="/rules.html" target="_blank">условиями</a> использования сайта</label>
    </div>
    <input type="submit" class="subm_button" value="Регистрация" name="singup"/>
    </form>
    </div>
    </div>
    </div>
    <div class="text_pages_bottom"></div>
    </div>
     
  2. akafake

    akafake

    Регистрация:
    2 фев 2016
    Сообщения:
    0
    Симпатии:
    0
    а в чем конкретно загвоздка?
     
  3. bloodlight

    bloodlight

    Регистрация:
    24 мар 2013
    Сообщения:
    46
    Симпатии:
    58
    Автор, напиши лучше куда собрался капчу вставить.
     
  4. chirs

    chirs

    Регистрация:
    14 фев 2016
    Сообщения:
    1
    Симпатии:
    0
    как всё-таки тяжко без отступов в коде... еще бы сжали бы в одну строчку без пробелов весь код...
    а по делу: для начала добавьте в форме регистрации <img> для вывода капчи (src="файл_с_кодом_капчи") и <input> для ввода данных из капчи пользователем
    затем добавьте проверку на равенство введенных данных и $_SESSION['captcha']