И снова вопрос про каптчу... В поиске не нашел ответа.
С PHP дела никогда не имел. Сейчас потребовалось в форму обратной связи воткнуть простенькую математическую каптчу. Суть проблемы: подставил каптчу в код страницы формы обратной связи. Он выглядит сейчас так:
<?php
session_start ();
?>
<form action=mail.php method=post>
Ваше имя<br><input type=text name=name size=30><p>
Ваш e-mail<br><input type=text name=email size=30><p>
Ваше сообщение<br><textarea name=mess rows=10 cols=50></textarea><p>
<input type=submit value=Отправить>
<img src="http://www.joom1.ru/captcha/captcha.php" />
<input type="text" name="CAPTCHA" />
</form>
<?php
if( $_SESSION['CAPTCHA'] != strip_tags($_POST['CAPTCHA']) ) {
echo 'Вы ввели неправильный код подтверждения!';
} else {
}
?>
Сама каптча такая:
<?php
session_start();
header('content-type: image/png');
$numbers = array();
$numbers[] = rand(1, 9);
$numbers[] = rand(1, 9);
if(rand(0, 1) == 0) {
$_op = '+';
$code = strval($numbers[0]) .' + ' .strval($numbers[1]) .' =';
$_SESSION['CAPTCHA'] = $numbers[0] + $numbers[1];
} else {
$_op = '*';
$code = strval($numbers[0]) .' x ' .strval($numbers[1]) .' =';
$_SESSION['CAPTCHA'] = $numbers[0] * $numbers[1];
}
session_write_close();
$font = dirname(__FILE__) .'/fonts/arial.ttf';
$width = 16;
$height = 24;
$code_length = 7;
$image_height = $height + 2;
$image_width = $width * $code_length + 20;
$im = imagecreatetruecolor($image_width, $image_height);
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
$theme = array();
$theme[] = array('CHAR_COLOR' =>
array('R' => array(150, 201),
'G' => array(250, 252),
'B' => array(0, 126)
),
'BG_COLOR' =>
array('R' => array(150, 230),
'G' => array(150, 230),
'B' => array(150, 230)
)
);
$theme[] = array('CHAR_COLOR' =>
array('R' => array(23, 172),
'G' => array(235, 255),
'B' => array(1, 163)
),
'BG_COLOR' =>
array('R' => array(230, 255),
'G' => array(170, 230),
'B' => array(170, 230)
)
);
$theme[] = array('CHAR_COLOR' =>
array('R' => array(0, 125),
'G' => array(138, 250),
'B' => array(58, 178)
),
'BG_COLOR' =>
array('R' => array(194, 230),
'G' => array(197, 230),
'B' => array(230, 255)
)
);
$pos_x = 5;
$pos_y = 20;
$random = rand(0, (count($theme) - 1) );/* Get a random theme */
$angle = 0;
$size = 16;
for($i = 0, $count = strlen($code); $i < $count; $i++) {
$color = imagecolorallocate($im,
rand($theme[$random]['CHAR_COLOR']['R'][0], $theme[$random]['CHAR_COLOR']['R'][1]),
rand($theme[$random]['CHAR_COLOR']['G'][0], $theme[$random]['CHAR_COLOR']['G'][1]),
rand($theme[$random]['CHAR_COLOR']['B'][0], $theme[$random]['CHAR_COLOR']['B'][1])
);
imagettftext($im, $size, $angle, $pos_x, $pos_y, $color, $font, $code{$i});
$pos_x += $width + 1;
}
imagepng($im);
imagedestroy($im);
?>
При работе с формой mail.php работает как и должен: отслеживает заполнение формы, оправляет мыло и т.д. А вот каптча не работает. То есть мессаги уходят независимо от того введено ли что-нибудь в поле каптчи или нет. Голова уже закипела от непоняток. Подскажите пожалуйста младшему начинающему, что не так в коде, что каптча не участвует в отправке мессаг?
На всякий случай код mail.php выглядит так:
<?php
$xxx =$_POST["xxx"];
$name=$_POST["name"];
$email=$_POST["email"];
$mess=$_POST["mess"];
if (isset ($name))
{
$name = substr($name,0,20);
if (empty($name))
{
echo "<center><b>Не указано имя.<p>";
echo "<a href=kontakt.php>Вернуться и правильно заполнить форму.</a>";
exit;
}
}
else
{
$name = "не указано";
}
if (isset ($email))
{
$email = substr($email,0,20);
if (empty($email))
{
echo "<center><b>Не указан e-mail.<p>";
echo "<a href=kontakt.php>Вернуться и правильно заполнить форму.</a>";
exit;
}
}
else
{
$email = "не указано";
}
if (isset ($mess))
{
$mess = substr($mess,0,1000);
if (empty($mess))
{
echo "<center><b>Нет текста сообщения.<p>";
echo "<a href=kontakt.php>Вернуться и правильно заполнить форму.</a>";
exit;
}
}
else
{
$mess = "не указано";
}
$i = "не указано";
if ($name == $i AND $email == $i AND $mess == $i)
{
echo "Ошибка ! Скрипту не были переданы параметры !";
exit;
}
$to = "admin@joom1.ru";
$headers = "content-type: text/plain";
$subject = "вопрос от посетителя сайта";
$message = "Имя:$name::::::::::Электронный адрес:$email::::::::::Сообщение:$mess:::::::::IP-адрес:$REMOTE_ADDR";
mail ($to,$subject,$message) or print "Не могу отправить письмо.";
echo "<center>Ваше сообщение отправлено. Мы обязательно с Вами свяжемся!<br><a href='index.html'>Вернуться на главную.";
exit;
?>
Заранее благодарю за помощь.
Спустя 18 минут, 28 секунд (8.04.2009 - 17:11) Kuliev написал(а):
pradiz
А где вы здесь проверяете КАПТЧУ??? Я лично ненашел ни слов проние!!!
А где вы здесь проверяете КАПТЧУ??? Я лично ненашел ни слов проние!!!
PHP |
<?php |
Смотри внимательней!!!
Спустя 1 час, 8 минут, 49 секунд (8.04.2009 - 18:20) pradiz написал(а):
Цитата (Kuliev @ 8.04.2009 - 14:11) |
Смотри внимательней!!! |
Извиняюсь дико! Уже действительно шары за гайки зашли.
На самом деле в mail.php добавляю такой код:
PHP |
if($_SESSION['CAPTCHA'] != $_POST['CAPTCHA']) { |
То есть в коде имею следующее:
PHP |
............... |
После такой проверки если в поле каптчи ничего не введено - мессага уходит, при введении любого значения в каптчу - мессага все равно уходит, а на пустой странице пишет что введен неправильный код. Где ошибка? Подскажите плиз несведущему в PHP.
Спустя 37 минут, 33 секунды (8.04.2009 - 18:57) Kuliev написал(а):
pradiz
Забыл в начале скрипта запустить сессию вот она у тебя и не работает!!!!
Забыл в начале скрипта запустить сессию вот она у тебя и не работает!!!!
Спустя 2 часа, 31 минута, 6 секунд (8.04.2009 - 21:29) pradiz написал(а):
Цитата (Kuliev @ 8.04.2009 - 15:57) |
Забыл в начале скрипта запустить сессию... |
Эх блин! Говорила мама в детстве учи сынок С++.......
Не родился во мне программер.
Посмотри пожалуйста код. Сессия запускается. Проверка каптчи идет. Только как проверяется... Не могу разобраться я в этих всех переменных с ходу. Задача блин элементарная для вас наверняка...
PHP |
<?php |
В таком виде получается что если поле каптчи оставлять пустым - сообщение отправляется, но как только в поле появляется какое-либо значение, даже верный результат математического действия, предлагаемого каптчей юзеру, кричит это: Вы ввели неправильный код подтверждения! Чего не хватает может в коде проверки?
Спустя 1 час, 25 минут, 55 секунд (8.04.2009 - 22:54) Joker написал(а):
Сократи код читать больно)
Вот так попробуй:
Вот так попробуй:
PHP |
<?php |
Спустя 13 часов, 35 минут, 34 секунды (9.04.2009 - 12:30) pradiz написал(а):
Цитата (Joker @ 8.04.2009 - 19:54) |
Сократи код читать больно) |
Действительно, так гораздо приятнее глазу, когда код в таком виде )) Там я так понял нужна еще одна скобка закрывающая в 12 строке?
PHP |
if (!empty($error)) |
Всё равно каптча работает как и раньше - неправильно. При пустом поле каптчи мессаги уходят, а при вводе любого значения, даже правильного, - кричит неправильный код подтверждения. Такое ощущение, что отсутствует правильный результат предлагаемого каптчей математического действия, для сравнения.
Спустя 13 минут, 3 секунды (9.04.2009 - 12:43) Kuliev написал(а):
Цитата (pradiz @ 9.04.2009 - 09:30) | ||||
Действительно, так гораздо приятнее глазу, когда код в таком виде )) Там я так понял нужна еще одна скобка закрывающая в 12 строке?
Всё равно каптча работает как и раньше - неправильно. При пустом поле каптчи мессаги уходят, а при вводе любого значения, даже правильного, - кричит неправильный код подтверждения. Такое ощущение, что отсутствует правильный результат предлагаемого каптчей математического действия, для сравнения. |
Ну так посмотри что у тебя в посте передается!
PHP |
echo "<pre>"; |
Спустя 24 минуты, 5 секунд (9.04.2009 - 13:07) pradiz написал(а):
Цитата (Kuliev @ 9.04.2009 - 09:43) |
Ну так посмотри что у тебя в посте передается! |
Пост всё правильно передаёт, только этот результат почему-то каптчёй не учитывается.
Спустя 5 минут, 12 секунд (9.04.2009 - 13:12) Kuliev написал(а):
Цитата (pradiz @ 9.04.2009 - 10:07) | ||
Пост всё правильно передаёт, только этот результат почему-то каптчёй не учитывается. |
Посмотри что в сессии
PHP |
echo "<pre>"; |
Спустя 17 минут, 24 секунды (9.04.2009 - 13:30) pradiz написал(а):
Цитата (Kuliev @ 9.04.2009 - 10:12) |
...что в сессии |
А сессия млин пустая!
Вот этот кусок отвечает за математические действия и результат, который должен быть в сессии? А чем тогда здесь делается запись в сессию?
PHP |
$numbers = array(); |
Спустя 43 минуты, 14 секунд (9.04.2009 - 14:13) Kuliev написал(а):
pradiz
Сейчас проверял твою каптчу все ОК!
А почему ты каптчу именно так подключаешь, а не через относительный путь????
Сейчас проверял твою каптчу все ОК!
А почему ты каптчу именно так подключаешь, а не через относительный путь????
HTML |
<img src="http://www.joom1.ru/captcha/captcha.php" /> |
Спустя 33 минуты, 11 секунд (9.04.2009 - 14:46) pradiz написал(а):
Цитата (Kuliev @ 9.04.2009 - 11:13) |
А почему ты каптчу именно так подключаешь, а не через относительный путь???? |
Я еще раз оправдаюсь, что я не программер в принципе. Если только в Бэйсике ))))) Поэтому понятие "через относительный путь" вводит меня в ступорный трепет. )) Относительный путь это примерно так?
PHP |
<img src="./captcha/captcha.php" /> |
Спустя 3 минуты, 15 секунд (9.04.2009 - 14:49) pradiz написал(а):
Цитата (Kuliev @ 9.04.2009 - 11:13) |
Сейчас проверял твою каптчу все ОК! |
ГЕНИАЛЬНО! Действительно через относительный всё заработало!!!! А я ж дурень думал там нужно глобально всё. С чувством, с толком, с расстановкой... Спасибо просто наиогромнейшее за Вашу помощь! Буду продолжать вникать потихоньку в PHP, покуда мозг еще жив.