Помогите разобраться с PHP

12
RENT2016
На сайте с 31.01.2016
Offline
11
975

Добрый день!

Поставил форму обратной связи на сайте, а она глючит: отказывается проводить проверку. Подскажите в чем может быть проблема?

А вот больной зуб:

<?php
header("Content-type: text/html; charset=utf-8");
//**********************************************
if(empty($_POST['js'])){

$log =="";
$error="no"; //флаг наличия ошибки

$posName = addslashes($_POST['posName']);
$posName = htmlspecialchars($posName);
$posName = stripslashes($posName);
$posName = trim($posName);

$posEmail = addslashes($_POST['posEmail']);
$posEmail = htmlspecialchars($posEmail);
$posEmail = stripslashes($posEmail);
$posEmail = trim($posEmail);

$posText = addslashes($_POST['posText']);
$posText = htmlspecialchars($posText);
$posText = stripslashes($posText);
$posText = trim($posText);

//Проверка правильность имени
if(!$posName || strlen($posName)>20 || strlen($posName)<3) {
$log.="<li>Неправильно заполнено поле \"Ваше имя\" (3-15 символов)!</li>"; $error="yes"; }

//Проверка email адреса
function isEmail($posEmail)
{
return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
,$posEmail));
}

if($posEmail == '')
{
$log .= "<li>Пожалуйста, введите Ваш email!</li>";
$error = "yes";

}

else if(!isEmail($posEmail))
{

$log .= "<li>Вы ввели неправильный e-mail. Пожалуйста, исправьте его!</li>";
$error = "yes";
}

//Проверка наличия введенного текста комментария
if (empty($posText))
{
$log .= "<li>Необходимо указать текст сообщения!</li>";
$error = "yes";
}

//Проверка длины текста комментария
if(strlen($posText)>1010)
{
$log .= "<li>Слишком длинный текст, в вашем распоряжении 1000 символов!</li>";
$error = "yes";
}

//Проверка на наличие длинных слов
$mas = preg_split("/[\s]+/",$posText);
foreach($mas as $index => $val)
{
if (strlen($val)>60)
{
$log .= "<li>Слишком длинные слова (более 60 символов) в тексте записи!</li>";
$error = "yes";
break;
}
}
sleep(2);

//Если нет ошибок отправляем email
if($error=="no")
{
//Отправка письма админу о новом комментарии
$to = "ххххх@gmail.com";//Ваш e-mail адрес
$mes = "Человек по имени $posName отправил Вам сообщение из формы обратной связи Вашего сайта: \n\n$posText";

$from = $posEmail;
$sub = '=?utf-8?B?'.base64_encode('Новое сообщение с Вашего сайта').'?=';
$headers = 'From: '.$from.'
';
$headers .= 'MIME-Version: 1.0
';
$headers .= 'Content-type: text/plain; charset=utf-8
';
mail($to, $sub, $mes, $headers);
echo "1"; //Всё Ok!
}
else//если ошибки есть
{
echo "<p style='font: 13px Verdana;'><font color=#FF3333><strong>Ошибка !</strong></font></p><ul style='list-style: none; font: 11px Verdana; color:#000; border:1px solid #c00; border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; background-color:#fff; padding:5px; margin:5px 10px;'>".$log."</ul><br />"; //Нельзя отправлять пустые сообщения

}
}
KB
На сайте с 10.08.2006
Offline
164
KGB
#1

if(empty($_POST['js']))

Что проверяем?

RENT2016
На сайте с 31.01.2016
Offline
11
#2

Имя, мыло, телефон, текст.

Если правильно вас понял, эта строчка должна выглядеть так?

if(empty($_POST["posName", "posEmail", "posTell", "posText"])){

---------- Добавлено 01.06.2016 в 14:47 ----------

Не фурычит

---------- Добавлено 01.06.2016 в 14:58 ----------

А js у формы такой:

// JavaScript Document

$(document).ready(function() {
// Форма обратной связи................................./

var regVr22 = "<div><img style='margin-bottom:-4px;' src='img/load.gif' alt='Отправка...' width='16' height='16'><span style='font: 11px Verdana; color:#333; margin-left:6px;'>Сообщение обрабатывается...</span></div><br />";

$("#send").click(function(){
$("#loadBar").html(regVr22).show();
var posName = $("#posName").val();
var posEmail = $("#posEmail").val();
var posTell = $("#posTell").val();
var posText = $("#posText").val();
$.ajax({
type: "POST",
url: "php/send.php",
data: {"posName": posName, "posEmail": posEmail, "posTell": posTell, "posText": posText},
cache: false,
success: function(response){
var messageResp = "<p style='font-family:Verdana; font-size:11px; color:green; border:1px solid #00CC00; padding:10px; margin:20px; border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; background-color:#fff;'>Спасибо, <strong>";
var resultStat = "!</strong> Ваше сообщение отправлено!</p>";
var oll = (messageResp + posName + resultStat);
if(response == 1){
$("#loadBar").html(oll).fadeIn(3000);
$("#posName").val("");
$("#posEmail").val("");
$("#posTell").val("");
$("#posText").val("");
} else {
$("#loadBar").html(response).fadeIn(3000); }
}
});
return false;
});


});
Ragnarok
На сайте с 25.06.2010
Offline
239
#3

if(empty($_POST['js'])){

господи

return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
,$posEmail));

что

$posEmail = addslashes($_POST['posEmail']);
$posEmail = htmlspecialchars($posEmail);
$posEmail = stripslashes($posEmail);
$posEmail = trim($posEmail);

за

if(!$posName || strlen($posName)>20 || strlen($posName)<3) {
$log.="<li>Неправильно заполнено поле \"Ваше имя\" (3-15 символов)!</li>";

говнокод

$error = "yes";
//TODO: перестать откладывать на потом
RENT2016
На сайте с 31.01.2016
Offline
11
#4

Спасибо, кэп. Как его исправить?

MI
На сайте с 16.07.2008
Offline
74
#5

Проще воспользоватся конструкторами форм обратной связи

RENT2016
На сайте с 31.01.2016
Offline
11
#6
metadon.info:
Проще воспользоватся конструкторами форм обратной связи

Все, что я встречал - с обратными ссылками, не хочется.

Код работает, но есть небольшие глюки:

  • Не проводит проверку $posName
  • Не подставляет $posName в формируемое сообщение
  • Почему-то не отправляет письма с адресом mail.ru

Все остальное работает. Уже голову сломал! Может кто подскажет чего не хватает?

MI
На сайте с 16.07.2008
Offline
74
#7

Возможно это поможет:

1. if(!$posName || заменить на if(empty($posName) ||

2. По виду должно работать, можно попробовать

$mes = "Человек по имени $posName

на

$mes = "Человек по имени ".$posName."

3. Не понял в чём проблема.

Если не доходят письма на mail.ru то значит на хостинге что-то не правильно с отправкой писем через mail() или письмо не по стандарту получилось.

Советую mail() заменить на PHPMailer, можно и через SMTP с помощью PHPMailer отправлять если что-то с отправкой писем через хостинг.

RENT2016
На сайте с 31.01.2016
Offline
11
#8
1. if(!$posName || заменить на if(empty($posName) ||

Снова выдает ошибку, что поле не заполнено, хотя значение введено. Второй день об это бьюсь.

2. По виду должно работать, можно попробовать
$mes = "Человек по имени $posName
на
$mes = "Человек по имени ".$posName."

Ничего не изменилось. Не могу понять: почему при равных условиях формируются posEmail и posTell, но не posName?

totamon
На сайте с 12.05.2007
Offline
437
#9

а код формы где?

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
RENT2016
На сайте с 31.01.2016
Offline
11
#10
totamon:
а код формы где?

Если вы имеете ввиду HTML, то не думаю, что он нужен. С ним все нормально, я его сто раз проверял.

Вот что не так с этим PHP? По всем признакам posName должен отображаться, но его почему-то нет.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий