Установка капчи

Тема в разделе "PHP", создана пользователем Squoll2, 24 авг 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Squoll2

    Squoll2 Постоялец

    Регистр.:
    2 июн 2009
    Сообщения:
    80
    Симпатии:
    15
    Люди добрые помогите установить капчу в этот код а точнее чтобы шла проверка при нажатии кнопки добавить
    PHP:
    <?php
        $res 
    $db->query("SELECT * FROM `rigonda_reserv` ORDER BY `id` DESC");
    /* KCAPTCHA */ session_start();
        if(isset(
    $_POST['submit'])) {
            
    $errors = array();
            
    $required_fields = array('userName','userText','keystring');
            
    $errors array_merge($errorscheck_required_fields_2($required_fields$_POST));
            
    $name mysql_real_escape_string(strip_tags($_POST['userName']));
            
    $text mysql_real_escape_string(strip_tags($_POST['userText']));
            if(empty(
    $errors)) {
                
    $qr $db->query("INSERT INTO `rigonda_reserv` (`id`, `name`, `text`, `date`, `level`) 
                VALUES  (0, '
    {$name}', '{$text}', curdate(), 0)");
                
    checkQueryResult_2($qr'index.php?cat=6&act=resAdd''index.php?cat=6&act=resAddErr');
            }
        }
    ?>
    <div id="wn">
        <center>

                <table cellspacing="0" cellpadding="0" border="0" height="316">
                    <tr>
                        <td valign="top" align="left">
                            <!------------->
                            <div style="width: 475px;">
                <?php showContent(5); ?>
                <div id="hrhr"></div>
                <br />
            </div>
            <div id="wn" class="flexcroll" style="height: 190px; width: 455px;">
                <div id="lyr1">
                    <?php if(mysql_num_rows($res) > 0): ?>
                    <table cellspacing="0" cellpadding="0" border="0">
                        <?php while($r mysql_fetch_assoc($res)): ?>
                            <tr>
                                <td width="475">
                                    <span class="name">
                                        <i><?= $r['date'?></i>
                                        &mdash;
                                    </span>
                                    <span>
                                        <?php if($r['level'] == 1): ?>
                                            <?php $hh "<br /><br />"?>
                                            <b style="color: red;"><?= $r['name'?></b>
                                        <?php else: ?>
                                            <?php $hh "<br /><br />"?>
                                            <b><?= $r['name'?></b>
                                        <?php endif ?>
                                    </span>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <span class="name">
                                        <div style="width:430px; margin: 0; padding: 0; padding-left: 10px;"><?= $r['text'?></div>
                                    </span>
                                    <?= $hh ?>
                                </td>
                            </tr>
                        <?php endwhile ?>
                    </table>
                    <?php else: ?>
                        <?= $lnNoRes ?>
                    <?php endif ?>
                </div>
            </div>
        </div>

                        </td>
                    </tr>
                </table>
            
        </center>
        
    </div>
    <div id="second" >
            <form method="post" action="<?= $_SERVER['PHP_SELF'?>?cat=6">
                <table style="padding-left: 27px;" cellspacing="0" cellpadding="0" border="0">
                    <tr>
                        <td align="right" valign="top">
                            <label for="userName"><?= $lnYourName ?>:</label>
                        </td>
                        <td style="width: 210px;" align="right">
                            <input style="width: 200px;" name="userName" type="text" id="userName" />
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2" style="height: 5px;"></td>
                    </tr>
                    <tr>
                        <td align="right" valign="top">
                            <label for="userText"><?= $lnYourText ?>:</label>
                        </td>
                        <td style="width: 210px;" align="right">
                            <textarea style="width: 200px;" rows="7" name="userText" id="userText"></textarea>
                        </td>
                    </tr>
                    <tr>
                        <td align="right" valign="top">
                            
                        </td>
                        <td style="width: 210px;" align="right">
                            <img src="/kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>">
                        </td>
                    </tr>
                    <tr>
                        <td align="right" valign="top">
                            
                        </td>
                        <td style="width: 210px;" align="right">
                            <input type="text" name="keystring">
                        </td>
                    </tr>
                                                    <tr>
                        <td colspan="2" style="height: 5px;"></td>
                    </tr>
                    <tr>
                        <td align="right" colspan="2">
                            <input type="submit" name="submit" id="submit" value="<?= $lnResSend ?>" />
                        </td>
                    </tr>
                </table>
            </form>
            <div style="padding-left: 40px;">
                <? if (!empty($errors)) { display_errors($errors); } ?>
                <?php



                    
    if(isset($_GET['act'])) {
                        
    $act $_GET['act'];
                        if(
    $act == "resAdd" OR $act == "resAddErr") {
                            if(
    $act == "resAdd") {
                                print 
    $lnResOk;
                            }
                            if(
    $act == "resAddErr") {
                                print 
    $lnResErr;
                            }
                        } else {
                            print 
    $lnResPageErr;
                        }
                    }

                
    ?>
            </div>
        </div>
        
        
    А вот сам пример кода проверки
    PHP:
    if(count($_POST)>0){
        if(isset(
    $_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
            echo 
    "Correct";
        }else{
            echo 
    "Wrong";
        }
    }
    unset(
    $_SESSION['captcha_keystring']);
    ?>
     
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    Переделка из твоего кода:
    PHP:
    session_start();
    if(isset(
    $_POST['submit'])) {
            
    $errors = array();
            
    $required_fields = array('userName','userText','keystring');
            
    $errors array_merge($errorscheck_required_fields_2($required_fields$_POST));
            
    $name mysql_real_escape_string(strip_tags($_POST['userName']));
            
    $text mysql_real_escape_string(strip_tags($_POST['userText']));
    //________ПРОВЕРКА КАПЧИ_____________________
    $ucaptcha=isset($_POST['keystring']) ? $_POST['keystring'] : "xxx";
    $captcha=isset($_SESSION['captcha_keystring']) ? $_SESSION['captcha_keystring'] : "yyy";
    if(
    captcha!=ucaptcha)
      
    errors[]="Сообщение о неверной капче";
    //__________________________________

            
    if(empty($errors)) {
                
    $qr $db->query("INSERT INTO `rigonda_reserv` (`id`, `name`, `text`, `date`, `level`) 
                VALUES  (0, '
    {$name}', '{$text}', curdate(), 0)");
                
    checkQueryResult_2($qr'index.php?cat=6&act=resAdd''index.php?cat=6&act=resAddErr');
            }
        }

     
    Squoll2 нравится это.
  3. myweb

    myweb Среда обитания WEB

    Регистр.:
    10 сен 2007
    Сообщения:
    539
    Симпатии:
    246
    про session_start забыли
     
    Squoll2 нравится это.
  4. Squoll2

    Squoll2 Постоялец

    Регистр.:
    2 июн 2009
    Сообщения:
    80
    Симпатии:
    15
    Неработает этот вариант
     
  5. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    Да, надо же, значит в строке №1 мы что-то (оригинал №2) отличное от сессии стартуем :smmne:
    Поясни что не работат? Тут может не работать только 2 момента:
    непонятные функция check_required_fields_2, $db->query, checkQueryResult_2(я исходил из того, что они где-то определены и не вызывают сомнения + параметры переданные им верные). И момент с капчей:
    Если ты видишь картинку <img src="/kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>"> значит проверь в скрипте капчи сюда ли $_SESSION['captcha_keystring'] устанавливается сгенеривованная строка. Если картинки не видно - значит <img src="/kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>"> замени на <img src="/kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>">? поскольку при определенных настройках сервера можешь и не получить картинки.
     
  6. Squoll2

    Squoll2 Постоялец

    Регистр.:
    2 июн 2009
    Сообщения:
    80
    Симпатии:
    15
    Картинки ввижу, при твоём варианте выдаёт пустую страницу, при моём всё работает единственное что неидёт проверки на капчу
     
  7. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    Ну потому что я привел фрагмент кода который идет до твоего HTML Добавь все чтопосле первого ?>.
     
  8. Squoll2

    Squoll2 Постоялец

    Регистр.:
    2 июн 2009
    Сообщения:
    80
    Симпатии:
    15
    Ну я то добавил что то я то понимаю, но вот почему неработает сама капча немогу понять точнее её функция на проверке
     
  9. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    сорри, вот моя опечатка:
    if(captcha!=ucaptcha) знак $ пропустил перед captcha. Еще замени строку "yyy" на false иначе лазейка обхода капчи получится.
     
Статус темы:
Закрыта.