За последние 24 часа нас посетили 19484 программиста и 1964 робота. Сейчас ищут 1415 программистов ...

Генерация контрольного числа (CAPTCHA)

Тема в разделе "Обработка изображений средствами PHP", создана пользователем xak2, 10 янв 2007.

  1. xak2

    xak2 Guest

    Теперь сделал, отличьно работает, теперь думаю надо идти в Обработку изображений средствами ПХП и думать как сделать более замудреный рисунок. Но вот еще один вопрос. Я тут увидил такое. http://www.nazcaweb.net/support.php. Можно отослать сообщения в аську прямо с сайта? Как это реализовать.

    Всем большое спаибо за помощь.
     
  2. xak2

    xak2 Guest

    А нет вот еще. Сесия создается и картинка генерируется с цифрами, но когда я жму субмит, на следующей странице сессии нету!? Где она, в форме стоит так:
    <form action="Notice.php" method="post">
    Может надо ссылку поменять или еще чтото сделать?
     
  3. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    http://www.captcha.ru/kcaptcha/
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Мэй би session_start(); упустили?
     
  5. xak2

    xak2 Guest

    Да но теперь вот что еще:
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Notice.php:9) in C:\Notice.php on line 13
    61333620
    Пишет ошибку но контрольное число из сесии показывает.
     
  6. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    что там на 13-ой строке?
     
  7. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Как всегда юзерские камменты выручают ;)
     
  8. xak2

    xak2 Guest

    Вот такая ситуайия все работает, за исключением малейшей глупости. Еслия ввожу неверное число, то мне пишет ошибку, вы ввели неверное число, но при обновлении страницы скрипта, Сессии придается значение того числа которое я ввел в POST. Т.е. если $_SESSION['Number'] = "1234"; А я ввел 4321, то напишет ошибку, но при обновлении $_SESSION['Number'] приобретет значение 4321, какбудто сессия на один шаг отстает от того что я пишу.
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Значит ошибка где-то в присваиваний переменной значения.
     
  10. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Дай полный код твоего скрипта.
     
  11. xak2

    xak2 Guest

    Скрипты оченьдлинные я дам только касающее теме.
    Форма для запалнения:
    Код (Text):
    1. <form action="Notice.php" method="post"><img src="Image.php"><input name="Number" type="text" size="20"></form>
    Image.php (Скрипт генерации изображения)
    PHP:
    1. <?php
    2. $_SESSION['Number'] = mt_rand (0000000, 99999999);
    3. $img = imagecreatetruecolor(130, 30);
    4. $white = imagecolorallocate($img, 255, 255, 255);
    5. $red = imagecolorallocate($img, 255, 0, 0);
    6. $green = imagecolorallocate($img, 0, 255, 0);
    7. $blue = imagecolorallocate($img, 0, 0, 255);
    8. $random_color = imagecolorallocate($img, rand(180,240), rand(180,240), rand(180,240));
    9. imagestring($img, 5, rand(0,50), rand(0,15), $_SESSION['Number'], $random_color);
    10. header('Content-type: image/jpeg');
    11. imagejpeg($img);
    12. ?>
    Скрипт регистрации. Запускается при нажатии Субмит (Notice.php):
    Код (Text):
    1. <?php
    2. session_start();
    3. echo $_SESSION['Number']."<br>";
    4. echo $_POST['Number'];
    5. ?>
    При активации скрипта там где сесия напишет число которое сгенерировалось и записалось в сесию Number, а там где POST, число которое ввел пользователь. При обновлении скрипта, число сессии приобритает значение поста.
     
  12. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Похоже, ошибка в скрипте регистрации, можешь со мной связаться, может помогу: 344-871-105.
     
  13. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    xak2

    посмотри в сравнениях этих значений, не стоит ли = вместо ==
     
  14. Anonymous

    Anonymous Guest

    // Тему переименовал и перенес.
    // Moderated. Горбунов.
     
  15. xak2

    xak2 Guest

    У меня нету Аськи, только скайп, ник: xak3pp.
    Я вообще для провреки из файла Notice.php убрал все и записал туда:
    PHP:
    1. <?php
    2. echo $_SESSION['Number']."<br>";
    3. echo $_POST['Number'];
    4. ?>
    Нигде на страницах нет сравнения, но при обновление $_SESSION['Number'] получает значение $_POST['Number']. Не может ли это быть изза одинаковых имен Number?
     
  16. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Значит есть присваивание.
    Значит в этих очень длинных скриптах и есть баг.
     
  17. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    ты нажимаешь F5, подтверждаешь переотправку данных и у тебя ДВА раза печатается чисто которое в $_POST['Number']?
     
  18. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    просто фишка в том, что в этом случае не выводится никакого сообщения об ошибке..

    просто поиском ищи все if/elseif и смотри, что у тебя в условиях.
     
  19. xak2

    xak2 Guest

    Переменная $_SESSION['Number'] только один раз упомянута в скрипте, как и $_POST['Number']. С помощью if/elseif проверял. Только что скопировал файлы убрал все лишнее некасающееся сессии и заработало как надо. Буду пытаться найти чтото в файлах.
     
  20. xak2

    xak2 Guest

    Запарило, в скрипте ничего неработает, я переименовал POST Number в CAPTCHA, убрал проверку и сравнение, убрал присвоения, но всеравно сесия при обновлении присваивает введенное число а не из сессии.
    Вот все файлы целиком:
    Form.php:
    PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <link href="Style.css" rel="stylesheet" type="text/css" />
    6. </head>
    7. <body topmargin="0" leftmargin="0">
    8. <div align="center">
    9. <form action="Notice.php" method="post">
    10. <table cellpadding="0" cellspacing="0" width="97%" class="Top">
    11.     <tr>
    12.         <td>
    13.         </td>
    14.     </tr>
    15.     <tr>
    16.         <td style="margin-bottom: 5px">
    17.         <b>Кому сообщение:</b>
    18.         </td>
    19.     </tr>
    20.     <tr>
    21.         <td style="margin-left: 30px">
    22.         <select name="MassageTo" size="1">
    23.         <option value="Administration">Администратору</option>
    24.         <option value="SupportService">Службе поддержки</option>
    25.         <option value="Manager">Менеджеру</option>
    26.         <option value="AdvertisingAgent">Рекламному агенту</option>
    27.         </select>
    28.         </td>
    29.     </tr>
    30.     <tr>
    31.         <td style="margin-top: 10px; margin-bottom: 5px">
    32.         <b>Тип отправляемого сообщения:</b>
    33.         </td>
    34.     </tr>
    35.     <tr>
    36.         <td style="margin-left: 30px">
    37.           <input type="radio" name="MassageType" value="Вопрос" checked> Вопрос
    38.           <input type="radio" name="MassageType" value="Предложение"> Предложение
    39.           <input type="radio" name="MassageType" value="Благодарность"> Благодарность
    40.           <input type="radio" name="MassageType" value="Жалоба"> Жалоба
    41.         </td>
    42.     </tr>
    43.     <tr>
    44.         <td style="margin-top: 10px; margin-bottom: 5px">
    45.         <b>Тема сообщения:</b>
    46.         </td>
    47.     </tr>
    48.     <tr>
    49.         <td style="margin-left: 30px">
    50.         <input name="MassageTitle" type="text" id="MassageTitle" size="25">
    51.         </td>
    52.     </tr>
    53.     <tr>
    54.         <td style="margin-top: 10px; margin-bottom: 5px">
    55.         <b>Введите текст сообщения в следующее поле:</b>
    56.         </td>
    57.     </tr>
    58.     <tr>
    59.         <td style="margin-left: 30px">
    60.         <textarea name="Massage" cols="50" rows="5" id="Massage"></textarea><br>
    61.         <input type="checkbox" name="sms"> SMS&nbsp;&nbsp;&nbsp;
    62.         <input type="checkbox" name="icq"> ICQ&nbsp;&nbsp;&nbsp;
    63.         <input type="checkbox" name="e-mail" checked> E-mail
    64.         </td>
    65.     </tr>
    66.     <tr>
    67.         <td style="margin-top: 10px; margin-bottom: 5px">
    68.         <b>Как с вами связаться?</b>
    69.         </td>
    70.     </tr>
    71.     <tr>
    72.         <td>
    73.         <dl>
    74.                 <dd>
    75.                 <table>
    76.                     <tr>
    77.                         <td>
    78.                         Имя:
    79.                         </td>
    80.                         <td>
    81.                         <input name="Name" type="text" size="20"></td>
    82.                     </tr>
    83.                     <tr>
    84.                         <td>
    85.                         Эл. адрес:
    86.                         </td>
    87.                         <td>
    88.                         <input name="Mail" type="text" size="20"></td>
    89.                     </tr>
    90.                     <tr>
    91.                         <td>&nbsp;</td>
    92.                     </tr>
    93.                     <tr>
    94.                         <td><img src="Image.php"></td>
    95.                         <td>
    96.                         <input name="CAPTCHA" type="text" size="7" maxlength="7"></td>
    97.                     </tr>
    98.                     <tr>
    99.                         <td>&nbsp;</td>
    100.                     </tr>
    101.                     </table>
    102.                 <input type="checkbox" name="SendCopy" value="1"> Отправить мне копию письма.<br />
    103.                 <input type="checkbox" name="Important" value="1"> Свяжитесь со мной по данному вопросу как можно быстрее.<br />
    104.                 <input type="Submit">&nbsp;
    105.                 <input type="Reset"></dd>
    106.             </dl></td>
    107.     </tr>
    108. </table>
    109. </form>
    110. </div>
    111. </body>
    112. </html>
    Notice.php:
    PHP:
    1. <?php
    2. include("Config.php");
    3. ?>
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    5. <html xmlns="http://www.w3.org/1999/xhtml">
    6. <head>
    7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    8. <link href="Style.css" rel="stylesheet" type="text/css" />
    9. </head>
    10. <body topmargin="0" leftmargin="0">
    11. <div align="center">
    12. <table cellpadding="0" cellspacing="0" border="0" width="97%">
    13.     <tr>
    14.         <td>
    15. <?php
    16. echo $_SESSION['Number']." ".$_POST['CAPTCHA'];
    17. if (!empty($_POST['MassageTitle']) && !empty($_POST['Massage']) && !empty($_POST['Name']) && !empty($_POST['Mail']) && !empty($_POST['CAPTCHA']))
    18. {
    19.     $MassageTitle = htmlspecialchars($_POST['MassageTitle'], ENT_QUOTES);
    20.     $Massage = htmlspecialchars($_POST['Massage'], ENT_QUOTES);
    21.     $Name = htmlspecialchars($_POST['Name'], ENT_QUOTES);
    22.     $Mail = htmlspecialchars($_POST['Mail'], ENT_QUOTES);
    23.     $Number = htmlspecialchars($_POST['CAPTCHA'], ENT_QUOTES);
    24.     $MassageType = $_POST['MassageType'];
    25.     /*if ($_SESSION['Number'] == $Number)
    26.     { */
    27.         if ($_POST['MassageTo'] == "Administration") $MassageTo = "Администратор"; $MailTo = $AdministrationMail;
    28.         if ($_POST['MassageTo'] == "SupportService") $MassageTo = "Службе поддержки"; $MailTo = $SupportServiceMail;
    29.         if ($_POST['MassageTo'] == "Manager") $MassageTo = "Менеджер"; $MailTo = $ManagerMail;
    30.         if ($_POST['MassageTo'] == "AdvertisingAgent") $MassageTo = "Рекламный агент"; $MailTo = $AdvertisingAgentMail;
    31.    
    32.         if ($_POST['Important'] == "1")
    33.         {
    34.             $Important = " Важно!";
    35.             $IfImportant = "<br><br>Мы свяжемся с вами в течении 12 часов!";
    36.             $IfImportantAdmin = "<br><br>Ответить в течении 12 часов!";
    37.         }
    38.        
    39.         $SendMassage = "Тема |".$Important." ".$MassageType.": ".$MassageTitle."<br><br>".$Massage."<br><br>---------------<br>Прислал: ".$Name."<br>Эл. адрес: ".$Mail."<br>---------------".$IfImportantAdmin;
    40.         echo $SendMassage."<br><br><hr>";
    41.         mail($MailTo,$Mail,$SendMassage);
    42.  
    43.         if (!empty($_POST['SendCopy']))
    44.         {
    45.             $MassageCopy = "Тема | Копия:".$Important." ".$MassageType.": ".$MassageTitle."<br><br>".$Massage."<br><br>---------------<br>Прислал: ".$Name."<br>Эл. адрес: ".$Mail."<br>---------------".$IfImportant."<br><br>С уважением, ".$MassageTo."!<br>---------------<br>САЙТ: [url=http://www.domen.com]www.domen.com[/url]<br>E-MAIL: [email=support@domen.com]support@domen.com[/email]<br>ICQ: 123456789<br>---------------";
    46.             echo $MassageCopy;
    47.             mail("xak2@one.lv",$Mail,$MassageCopy);
    48.         }
    49.     /*}
    50.     else
    51.     {
    52.         echo "<b>Вы ввели неверное контрольное число!</b>";
    53.     }*/
    54. }
    55. else
    56. {
    57.     echo "<b>ОШИБКА:</b><br /><br />";
    58.     if (empty($_POST['MassageTitle']))
    59.     {
    60.         echo "Вы незаполнили поле &quot;<b>Тема сообщения</b>&quot;!<br />";
    61.     }
    62.     if (empty($_POST['Massage']))
    63.     {
    64.         echo "Вы незаполнили поле &quot;<b>Текст сообщения</b>&quot;!<br />";
    65.     }
    66.     if (empty($_POST['Name']))
    67.     {
    68.         echo "Вы незаполнили поле &quot;<b>Имя</b>&quot;!<br />";
    69.     }
    70.     if (empty($_POST['Mail']))
    71.     {
    72.         echo "Вы незаполнили поле &quot;<b>Эл. адрес</b>&quot;!<br />";
    73.     }
    74.     if (empty($_POST['CAPTCHA']))
    75.     {
    76.         echo "Вы незаполнили поле &quot;<b>Контрольное число</b>&quot;!<br />";
    77.     }
    78. }
    79. ?>
    80.         </td>
    81.     </tr>
    82. </table>
    83. </div>
    84. </body>
    85. </html>
    Image.php:
    PHP:
    1. <?php
    2. $_SESSION['Number'] = mt_rand(0000000, 9999999);
    3. $img = imagecreatetruecolor(130, 30);
    4. $white = imagecolorallocate($img, 255, 255, 255);
    5. $red = imagecolorallocate($img, 255, 0, 0);
    6. $green = imagecolorallocate($img, 0, 255, 0);
    7. $blue = imagecolorallocate($img, 0, 0, 255);
    8. $random_color = imagecolorallocate($img, rand(180,240), rand(180,240), rand(180,240));
    9. $random_x = rand(0,50);
    10. $random_y = rand(0,15);
    11. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $red);
    12. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $red);
    13. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $red);
    14. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $green);
    15. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $green);
    16. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $green);
    17. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $blue);
    18. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $blue);
    19. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $blue);
    20. imageellipse($img, 10, 10, 50, 50, $red);
    21. imageellipse($img, 50, 50, 50, 50, $green);
    22. imageellipse($img, 100, 100, 50, 50, $blue);
    23. imagestring($img, 5, $random_x, $random_y, $_SESSION['Number'], $random_color);
    24. imageellipse($img, 20, 20, 50, 50, $red);
    25. imageellipse($img, 60, 600, 50, 50, $green);
    26. imageellipse($img, 90, 90, 50, 50, $blue);
    27. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $red);
    28. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $red);
    29. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $red);
    30. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $green);
    31. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $green);
    32. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $green);
    33. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $blue);
    34. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $blue);
    35. imageellipse($img, rand(0,110), rand(0,40), 50, 50, $blue);
    36. header('Content-type: image/jpeg');
    37. imagejpeg($img);
    38. ?>
    Попробуйте найти, где что ни так, меня уже выводит из себя этот скрипт.
     
  21. Anonymous

    Anonymous Guest

    MassageTo — кому сделать массаж ?
     
  22. Anonymous

    Anonymous Guest

    ЗЫ. Ошибок много.
    Разнеси код по фукциям, структурируй лучше. Смотреть и искать счас там ошибки — нереально. Раздели! Раздели логику от представления.
     
  23. xak2

    xak2 Guest

    Привиди пример ошибок чтобы знать где я ошибаюсь. Незная этого я несделаю себе лучше.