2013-04-06 2 views
0

У меня возникли проблемы с моим PHP-кодом. Я использую IF-ELSE, чтобы проверить, что все идет нормально, но он продолжает давать мне «Вы не вводили получателя».Отправить сообщение [PHP]

<?php 

$to=trim($_POST['toperson']); 
$from=trim($_POST['spoofrom']); 
$message=trim($_POST['message']); 
$subject=trim($_POST['subj']); 


if (substr_count($to, '@') <= 1) { 
    if (!isset($to)) { 
     if (!isset($from)) { 
      if (!isset($subject)) { 
       if (!isset($message)) { 
        mail($to, $subject, $message, "From: " . $from); 
        print "Message was sent!"; 
       }else {print "You did not enter a message";} 
      }else {print "You did not enter a subject";} 
     }else {print "You did not enter a from email";} 
    }else {print "You did not enter a recipient";} 
}else{print "You entered 2 or more emails.";} 

?> 
+0

Вы проверили имя текстового поля получателя в форме? Может быть, это неправильно. – zkanoca

+1

Пожалуйста, узнайте о вводе заголовка письма. –

ответ

1

Попробуйте

заменить ваши условия if (!isset($to)) на if (isset($to)) и добавить пустой чек

Doc: http://php.net/manual/en/function.isset.php

http://www.php.net/manual/en/function.empty.php

Как это:

if (substr_count($to, '@') <= 1) { 
    if (isset($to) && !empty($to)) { 
     if (isset($from) && !empty($from)) { 
      if (isset($subject) && !empty($subject)) { 
       if (isset($message) && !empty($message)) { 
        mail($to, $subject, $message, "From: " . $from); 
        print "Message was sent!"; 
       }else {print "You did not enter a message";} 
      }else {print "You did not enter a subject";} 
     }else {print "You did not enter a from email";} 
    }else {print "You did not enter a recipient";} 
}else{print "You entered 2 or more emails.";} 
+0

это не имеет никакого смысла. Поскольку уже существует привязка '$ to = ...;', так что вызов isset ВСЕГДА является истинным (если ключ существует, например, он не является нулевым). Проверьте на пустой ... – bwoebi

+0

@bwoebi: Действительно. Назначение не будет выполнено с сообщением об ошибке «неопределенный индекс», если параметр URL отсутствует. –

+0

Да, это то, что я сказал: «(если существовал ключ, например, он не является нулевым)». Btw. Я не думаю, что он хочет проверить, была ли форма манипулирована, но если все поля были заполнены. – bwoebi

0

Вы в конечном итоге имеете в виду: empty() вместо isset(), поскольку он всегда установлен ... но не всегда заполнен?

Или проверить, если isset($_POST['to']) и другие ключи, но не использовать IsSet на назначенных переменных (проверка is_null/=== null лучше там

0

Ваш код будет отправлять почту, если ваши все данные формы являются пустыми. if(!isset($_POST["something"]) означает, что условный процесс будет срабатывать, если ваши данные НЕ установлены.

Удалить восклицательные знаки.

0

Убедитесь, что ваша форма имеет правильную валидацию с использованием регулярного выражения & | html5/css3 перед подачей заявки. ! Использовать пустой() стих Исеть(), наконец, я предлагаю положить

if (mail($to, $subject, $message, "From: " . $from)) { 
    print "Message was sent!"; 
} else { print "email failed to send!"; } 

Кроме того, я бы поставил От: при установке переменной не называя его, но это больше личное предпочтение.

$from= "From: trim($_POST['spoofrom'])"; 
Смежные вопросы