Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: php. Обратная связь  (Прочитано 6166 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« : 06-06-2010 14:31 » 

делаю форму обратной связи. Без "защиты от роботов" всё работает. Пытаюсь добавить защиту. Правильность ввода кода с картинки проверяет, а вот само сообщение отправить не получается - пишет что не введено имя (и т.д.)
Вот код:

Код:
<div id="Layer9">
<p align="center" class="style8">Если у вас возникли какие-либо вопросы - заполните данную форму и наш менеджер свяжется с вами в ближайшее время</p>

<?php
function show_form()
{
?>

<form action="" method=post>
<div align="center" class="style8">
<br />
<span class="style13">Фамилия Имя Отчество <span class="style14">*</span> </span><br />
<input type="text" name="FIO" size="50"/>
<br />
<span class="style13">e-mail </span><br />
<input type="text" name="Mail" size="50" />
<br />
<span class="style13">Контактный телефон <span class="style14">*</span></span><br />
<input type="text" name="Phone" size="50" />
<br />
<span class="style13">Текст письма </span><span class="style15">*</span><br />
<textarea name="mess" rows="4" cols="47"></textarea>
</div>
</form>
<table width="541" border="0" align=center>
  <tr>
    <td width="535"><div align="center"><span class="style10">поля, отмеченные [<span

class="style14">*</span>] - обязательные для заполнения</span></div></td>
  </tr>
</table>

<?php
 
echo &#39;<div id="Layer13">&#39;;
  
echo &#39;<div align="center">&#39;;
    
echo &#39;<form action="&#39;.$_SERVER[&#39;PHP_SELF&#39;].&#39;" method="post">&#39;;
    
echo &#39;<img src="captcha.php" border="0" alt="" /><br/>&#39;;
    
echo &#39;<input type="text" name="code" value="" /><br/>&#39;;
    
echo &#39;<input type="submit" name="submit" value="Отправить" />&#39;;
    
echo &#39;</form>&#39;;
   
echo &#39;</div>&#39;;
echo &#39;</div>&#39;;
}

function 
complete_mail() {
        
// $_POST[&#39;FIO&#39;] содержит данные из поля "Фамилия Имя Отчество", trim() - убираем все лишние 

пробелы и переносы строкhtmlspecialchars() - преобразует специальные символы в HTML сущностибудем 

считать для того
чтобы простейшие попытки взломать наш сайт обломалисьну и  substr($_POST[&#39;FIO&#39;], 0, 

100) - урезаем текст до 100 символовДля переменных $_POST[&#39;Mail&#39;], $_POST[&#39;Phone&#39;], $_POST[&#39;mess&#39;] все 

аналогично

        $_POST
[&#39;FIO&#39;] =  substr(htmlspecialchars(trim($_POST[&#39;FIO&#39;])), 0, 100);
        
$_POST[&#39;Mail&#39;] =  substr(htmlspecialchars(trim($_POST[&#39;Mail&#39;])), 0, 50);
        
$_POST[&#39;Phone&#39;] =  substr(htmlspecialchars(trim($_POST[&#39;Phone&#39;])), 0, 30);
        
$_POST[&#39;mess&#39;] =  substr(htmlspecialchars(trim($_POST[&#39;mess&#39;])), 0, 1000000);

        // если не заполнено поле "Имя" - показываем ошибку 0
        
if (empty($_POST[&#39;FIO&#39;]))
             
output_err(0);
        
// если не заполнено поле "Сообщение" - показываем ошибку 2
        
if(empty($_POST[&#39;mess&#39;]))
             
output_err(2);
// создаем наше сообщение
        // require &#39;class.phpmailer.php&#39;;
        
$mess = &#39;
Имя отправителя:&#39;.$_POST[&#39;FIO&#39;].&#39;
Контактный email:&#39;.$_POST[&#39;Mail&#39;].&#39;
Контактный телефон:&#39;.$_POST[&#39;Phone&#39;].&#39;
Сообщение:&#39;.$_POST[&#39;mess&#39;];
$Title = &#39;massege from site&#39;;
        // $to - кому отправляем
        
$to = &#39;tat.yasha@mail.ru&#39;;
        // $from - от кого
        
$from=&#39;test@mail.ru&#39;;
        
mail($to$Title$mess"From:".$from);
        echo &
#39;Спасибо! Ваше письмо отправлено.&#39;;
}

function 
output_err($num)
{
    
$err[0] = &#39;ОШИБКА! Не введено имя.&#39;;
    
$err[1] = &#39;ОШИБКА! Неверно введен e-mail.&#39;;
    
$err[2] = &#39;ОШИБКА! Не введено сообщение.&#39;;
    
echo &#39;<p>&#39;.$err[$num].&#39;</p>&#39;;
    
show_form();
    exit();
}

if (!empty(
$_POST[&#39;submit&#39;])){
  
if($_POST[&#39;code&#39;] == $_SESSION[&#39;code&#39;])
    // echo &#39;<p style="color:green">Защитный код верен!</p>&#39;;
    // echo &#39;.$_POST[&#39;FIO&#39;].&#39;;
    
complete_mail();
  else
    echo &
#39;<p style="color:red">Неверный защитный код!</p>&#39;;
  
unset( $_SESSION[&#39;code&#39;] );
  
show_form();
}
else 
show_form();
?>


</div>

Подскажите, в чем ошибка?!
« Последнее редактирование: 06-06-2010 14:57 от Finch » Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 06-06-2010 15:01 » 

У тебя капча и сами поля разбросаны по разным формам. Насколько я помню, при submit отправляются на сервер поля только той формы, откуда произошло подтверждение.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Tatyana
Участник

ru
Offline Offline
Пол: Женский

« Ответ #2 : 06-06-2010 15:10 » new

Finch, спасибо! Ошибка была именно в этом.
Записан

Smile, though your heart is aching
Smile, even though it's breaking ©
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines