Jump to content
  • 0

Капча на PHP


Вадим Некрасов
 Share

Question

Вот код:

<?php 
 
header('Content-type: image/png');
 
$t=rand(1000, 10000);
 
$a=imagecreate(100,20);
 
$b=imagecolorallocate($a, 139, 137, 137);
 
$n=imagecolorallocate($a, 0,0,0);
 
$m=imagestring($a, 5, 2, 2, $t, $n);
 
imagepng($a);
 
?>
 
А вот другой код:
 
<form method="POST">
 
<input type="text" name="kap">
 
<input type="submit">
 
</form>
 
<?php 
 
header('Content-type: image/png');
 
$t=rand(1000, 10000);
 
$a=imagecreate(100,20);
 
$b=imagecolorallocate($a, 139, 137, 137);
 
$n=imagecolorallocate($a, 0,0,0);
 
$m=imagestring($a, 5, 2, 2, $t, $n);
 
imagepng($a);
 
?>
 
Здесь я добавил форму. С верхним кодом все нормально, а вот с нижним нет. Когда я добавляю форму, код перестает работать и изображение выводиться в виде текста, но форма отображается. Еще если форму написать с низу, то ее просто не будет в браузере, а если с верху, то будет ошибка. Что делать? 
Edited by Вадим Некрасов
Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

А вы от балды всё пишете или хоть немного понимаете что делают те или иные функции?

А что не так? Работа и изображениями большая тема. Только вчера взялся за нее и не все до конца понимаю

Link to comment
Share on other sites

  • 0

То есть она должна идти первой в выводе, перед ее вызовом не должно быть никаких HTML тэгов, пустых строк . 

Допустим, но почему он не выводит форму даже если она после HTTP заголовка? 

Link to comment
Share on other sites

  • 0

Или решает что выводить, а что нет. Похоже на формат файла. Будет txt, html теги не интерпретируются, будет html - интерпретируется.  

Edited by Вадим Некрасов
Link to comment
Share on other sites

  • 0

Ну... можно еще так) В качестве НИР.

<form method="POST"><input type="text" name="kap"><input type="submit"></form><?php//header('Content-type: image/png');$t=rand(1000, 10000);$a=imagecreate(100,20);$b=imagecolorallocate($a, 139, 137, 137);$n=imagecolorallocate($a, 0,0,0);$m=imagestring($a, 5, 2, 2, $t, $n);imagepng($a, "image.png");imagedestroy($a); echo "<img src=\"image.png\">";

 Соответственно, картинка получается в каталоге скрипта) а src в теге картинки ищется тоже там же. Это к вопросу о работе header() - без вывода он не нужен.

Edited by bryknyk
Link to comment
Share on other sites

  • 0
 Соответственно, картинка получается в каталоге скрипта) а src в теге картинки ищется тоже там же. Это к вопросу о работе header() - без вывода он не нужен.

 

тоже не вариант

 

 

ТС А что тебе мешает без заголовков в формате base-64  картинку вывести?

Link to comment
Share on other sites

  • 0

В общем, догадливость — не лучшая сторона топикстартера. Этот код каптчи выводит изображение в формате png. Header сообщает, что это будет png, а imagepng возвращает данные. Соответственно, если этот код вставить до формы, то, веронятно, покажется картинка, а форма — нет, так как этот html-код не является валидными данными для изображения. Если же сначала вывести форму, то сервер отправит заголовок, что это html и будет ошибка на функции header, так как заголовки уже отправлены. Но дело даже не в этом. Дело в том, что логику и представление смешивать нельзя никогда. Достаточно просто вынести эту каптчу в отдельный файл, например, captcha.php, а в форме просто его выводить как картинку

<img src="captcha.php" alt="captcha">
  • Like 1
Link to comment
Share on other sites

  • 0

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

ключевое слово - сам =)

Link to comment
Share on other sites

  • 0

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

ключевое слово - сам =)

А я учился по учебникам, где такие моменты разъяснялись. Что я делал не так?
Link to comment
Share on other sites

  • 0
А я учился по учебникам, где такие моменты разъяснялись. Что я делал не так?

Дело не в том как ты получал информацию, а в том какой опыт ты получил. Полезный или бессмысленный 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy