За последние 24 часа нас посетили 15098 программистов и 1656 роботов. Сейчас ищут 913 программистов ...

Помогите с установкой каптчи

Тема в разделе "PHP для новичков", создана пользователем dvitaly, 29 окт 2008.

  1. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Здравствуйте, скачал капчу с сайта капча.ру как я понял код
    Код (Text):
    1.  
    2. <?php
    3. session_start();
    4. ?>
    5. <form action="" method="post">
    6. <p>Enter text shown below:</p>
    7. <p><img src="./?<?php echo session_name()?>=<?php echo session_id()?>"></p>
    8. <p><input type="text" name="keystring"></p>
    9. <p><input type="submit" value="Check"></p>
    10. </form>
    11. <?php
    12. if(count($_POST)>0){
    13.     if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
    14.         echo "Correct";
    15.     }else{
    16.         echo "Wrong";
    17.     }
    18. }
    19. unset($_SESSION['captcha_keystring']);
    20. ?>
    нужно вставлять в свой например индекс файл
    Как я понял каптча должна быть распакована в папку с моим файлом, с тем, в который я и собираюсь вставлять этот код
    А что мне делать с индекс файлом который был в папке? Он нужен вообще?
    Можете дать пару советов как это прицепить к моему индексу, вот мой index.php например, потом у меня данные будут идти в мой обработчик

    index.php
    Код (Text):
    1.  
    2.  
    3. <html>
    4. <form action = "handler.php" method="POST">
    5. Enter your name *:
    6. <input type="text"   name="name" maxlength="30" size="25"><br>
    7. Enter your email *:
    8. <input type="text" name="email" maxlength="30" size="30"><br>
    9. Homepage:<input type="text" name="homepage" maxlength="30" size="30"><br>
    10. Enter your msg *(не более 100 символов)<br>
    11. <textarea name="msg" cols="40" rows=10 maxlength="100" ></textarea><br><br>
    12. <input type="submit" name="submit" value="Отправить"
    13. <br>
    14. </form>
    15. </html>
    16. <?php
    17. include ("mysql_connect.php");
    18. $select = mysql_query("
    19. SELECT *
    20. FROM `gb`
    21. ") or die ("Could not select from table".mysql_error());
    22. while ($s= mysql_fetch_assoc($select)) {
    23.    //тело цикла, тут например:
    24.    echo "Запись №: ".$s['ID']."<br>";
    25.    echo "Имя: ".$s['name']."<br>";
    26.    echo "Email адрес: ".$s['email']."<br>";
    27.    echo "Homapage: <a href=http://".$s['homepage']." target=blank>".$s['homepage']."</a><br>";
    28.    echo "Сообщение: ".$s['text']."<br>";
    29.    echo "Сообщение добавлено: ".$s['time']."<br><hr>";
    30.  }
    31.  
    32.  ?>
    Может я что то неправильно делаю? :cry: Спасибо
     
  2. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Вставляешь в свою форму где-нибудь внизу чуть выше сабмита

    PHP:
    1. <p>Enter text shown below:</p>
    2. <p><img src="./?<?php echo session_name()?>=<?php echo session_id()?>"></p>
    3. <p><input type="text" name="keystring"></p>
    4.  
    и перед обработкой формы в handler.php делаешь проверку на
    PHP:
    1.  
    2. if(count($_POST)>0){
    3.    if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){а вот тут сама обработка}
    4. else {echo ("[b]Боты Атакуют!!![/b]")}
    5.  
    Ну и после этого
    PHP:
    1. unset($_SESSION['captcha_keystring']);
    А вот что делать с index.php который был в папке... ну откуда мне знать. Есть несколько вариантов.

    1. Почитай его что ли и посмотри как там каптча подключается.
    2. Не читай. Сотри сразу.
    3. Распечатай и повесь на стенку в рамочке.
    ...
     
  3. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    спасибо большое, попробую
     
  4. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    4. Разошли 30-ти друзьям и будет тебе вечный коннект :):)
    ой... оффтоп :roll:
     
  5. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Как бы всё сделал примерно как подсказал karakh , всё равно выкидывает меня на страницу ту которая else, то есть код постоянно введён неверный, хотя я вводил много раз всё правильно. может я что то неправильно подключил?
    вот мой index.php
    PHP:
    1.  
    2. [i]<?php
    3. ?>[/i]<html>
    4. <body>
    5.  
    6. <form action = "handler.php" method="POST">
    7. <p><center><h2>Поля отмеченные <b>*</b> обязательны для заполнения</h2></center></p>
    8. Enter your name *:
    9. <input type="text"   name="name" maxlength="30" size="25"><br>
    10. Enter your email *:
    11. <input type="text" name="email" maxlength="30" size="30"><br>
    12. Homepage:<input type="text" name="homepage" maxlength="30" size="30"><br>
    13. Enter your msg *(не более 100 символов)<br>
    14. <textarea name="msg" cols="40" rows=10 maxlength="100" ></textarea><br><br>
    15. <!--kcaptcha-->
    16.  
    17. <p>Введите код подтверждения:</p>
    18.  
    19.  <p><img src="./kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>"></p>
    20.  <p><input type="text" name="keystring"></p>
    21.  
    22. <!--//////kcaptcha-->
    23.  
    24. <p><input type="submit" name="submit" value="Отправить">
    25. <input type="reset" value="Очистить форму"></p>
    26. <br>
    27. </form>
    28. </body>
    29. </html>
    30.  
    а вот обработчик:

    PHP:
    1.  
    2. <?php
    3.  if(count($_POST)>0){
    4.         if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] ==  $_POST['keystring']){
    5.         // handler начинается от сюда
    6.        
    7.        
    8.        
    9.     //Redirect_404
    10. $relative_url="index.php";
    11. $relative_404="404.php";
    12.  
    13. $redir_404=header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])
    14. ."/".$relative_404);
    15.  
    16.  
    17. include ("mysql_connect.php");
    18. $create_table= mysql_query("
    19. CREATE TABLE IF NOT EXISTS `gb` (
    20.  `ID` int(11) NOT NULL auto_increment,
    21.  `name` text NOT NULL,
    22.  `email` text NOT NULL,
    23.  `homepage` text NOT NULL,
    24.  `text` text NOT NULL,
    25.  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    26.  PRIMARY KEY  (`ID`)
    27. );
    28. ") or die ("Can not create table".mysql_error());
    29.  
    30.  if ($_POST['name'] == "")
    31. {
    32. header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])
    33. ."/".$relative_url);
    34. die("");
    35. }
    36.  
    37. if ( $_POST['email'] == "" ){
    38. $redir_404;
    39. die("");
    40. }
    41.  
    42.  
    43.  
    44.  
    45. if ( $_POST['msg'] == "" ){
    46. header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])
    47. ."/".$relative_url);
    48. die("");
    49. }
    50.  
    51.  if (IsSet($_REQUEST['submit']) & !empty($_REQUEST['submit'])){
    52. $name=$_POST['name'];
    53. $email=$_POST['email'];
    54. $homepage=$_POST['homepage'];
    55. $msg=$_POST['msg'];
    56.  
    57. $name=htmlspecialchars($name);
    58. if(strlen($name) >= 30 ) {
    59. $name=substr($name,0,30);
    60. }
    61.  
    62.  
    63. $email=trim($email);
    64.  
    65. if(strlen($email) >= 30 ) {
    66. $email=substr($email,0,30);
    67. }
    68.  
    69.  
    70.  
    71. $preg_match=preg_match ('/^[A-Z0-9]+@[A-Z0-9]+\.[A-Z]{2,6}$/i',$email);
    72.  
    73. if(strlen($msg) >= 100 ) {
    74. $email=substr($msg,0,100);
    75. }
    76. $msg=htmlspecialchars($msg);
    77. }
    78.  
    79. if ($preg_match  == "1"){
    80. $insert = mysql_query ("
    81. INSERT INTO `guest_book`.`gb` (
    82. `ID` ,
    83. `name` ,
    84. `email` ,
    85. `homepage` ,
    86. `text` ,
    87. `time`
    88. )
    89. VALUES (
    90. NULL , '$name' , '$email' ,'$homepage', '$msg' ,
    91. CURRENT_TIMESTAMP
    92. );
    93.  
    94. ") or die ("Can't insert into table".mysql_error());
    95.  
    96. header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])
    97. ."/".$relative_url);
    98.  
    99. }          
    100. // Тут заканчивается handler
    101.  } else
    102. {
    103. echo "<center><h3>Вы неверно ввели код подтверждения!</h3></center>";
    104. echo "<center><h3><a href=\"index.php\">Перейти в гостевую книгу </a></h3></center>";
    105. }
    106.     }
    107. unset($_SESSION['captcha_keystring']);
    108.  
    109.  
    110.  
    111.  
    112.  
    113. ?>
    114.  
    115.  
    Помогите пожалуйста найти проблему, благодарю
     
  6. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    1. Сделай простенький скриптик, где вместо всего твоего обработчика стоит if (все в впорядке) {echo "ok"}else {echo "not ok"}
    2. выведи на экран $_SESSION['captcha_keystring'] и $_POST['keystring'] и посмотри чему они до проверки равны.
    3. где у тебя инициализируется $_SESSION['captcha_keystring']? Если isset() выдает false, то медицина бессильна.
    4. отформатируй код отступами, читать невозможно. и в следующий раз пость этот самый маленький скриптик, подробности обработчика формы мне лично ни к чему.
     
  7. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Хорошо, я понял, буду тестить, только вот самое главное что я немогу понять
    Например: у меня есть index.php где записано это:
    Код (Text):
    1.  
    2. <!--kcaptcha-->
    3. <p>Введите код подтверждения:</p>
    4. <p><img src="./kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>"></p>
    5. <p><input type="text" name="keystring"></p>
    6.  <!--//////kcaptcha-->
    и есть эта проверка в обработчике handler.php:

    Код (Text):
    1.  
    2. if(count($_POST)>0){
    3.    if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){а вот тут сама обработка}
    4.  else {echo ("Боты Атакуют!!!")}
    5. Какой то код......
    6. unset($_SESSION['captcha_keystring']);
    В каком из этих двух файлов , или в обеих в самом начале я должен вписывать
    Код (Text):
    1. session_start();
    Попросту сказать в каком файле мне писать
    Код (Text):
    1. session_start();
    ?
     
  8. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    в обоих.
    И вообще, http://php.ru/manual/function.session-start.html
     
  9. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    ясно, спасибо
     
  10. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Я в шоке, что может случиться?
    Скачал архив ещё раз с сайта, распаковал в корневой каталог, пробывал даже не в корневой, в упор не работает каптча, чтобы не вводил всё время "wrong" .Даже чистил кукисы, нечего, слов просто нет :cry:
     
  11. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    и никаких ошибок самое главное, как будто так и должно всё быть
    Всё работает, по крайней мере в mozilla firefox 3.0 работает, эксплоуер отказывается, что делать?
     
  12. dvitaly

    dvitaly Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    У всех нормально эксплоурер 7.0 работает с капчей?