2013-09-18 3 views
0

Хорошо, поэтому я отправляю форму html 5 в php-скрипт с некоторым скрытым полем. Одно скрытое поле работает, а другое - нет. Может ли кто-нибудь помочь мне разобраться?Скрытое поле, не отображающееся в скрипте PHP

Вот форма:

<form action="mail_action.php" method="post"> 
    <!--Hidden information data--> 
    <input type="hidden" name="email_address" value="[email protected]" /> 
    <input type="hidden" name="email_subject" value="Hello World" /> 

    <!--The form--> 
    <input name="form_data[]"> 
    <input name="form_data[]"> 
    <input name="form_data[]"> 
    <input type="submit"> 

</form> 

А вот сценарий:

<?php 
//Grabbing hidden field data. 
$email = $_POST["email_address"]; 
$subject = $_POST["email_subject"]; 
$headers = 'From: [email protected]' . "\r\n" . 
      'Reply-To: [email protected]' . "\r\n" . 
      'X-Mailer: PHP/' . phpversion(); 

foreach($_POST['form_data'] as $item) 
{ 
//Asigning the message fields to $message variable. 
$message .= $item; 

//The spaces inbetweeen 
$message .= "\r\n"; 
} 

if(mail ($email, $subject, $message, $headers)){ 
    echo "Your Message was sucessfully emailed to: ".$email; 
    } else { 
     echo "Opps, Didn't send."; 
     } 
?> 

EMAIL_ADDRESS, полевые работы скрытые, но не предмет, в будущем спасибо.

+0

Просто комментарий - это, вероятно, не очень хорошая идея, чтобы поместить адрес получателя в скрытом поле, как это; спамер мог бы очень легко обойти это, чтобы отправлять электронные письма почти кому угодно, в основном с любым контентом, который он хотел. (также, если это ваш фактический адрес электронной почты, вы можете отредактировать его из вопроса, чтобы избежать его подхвата спамерами, травлящими этот сайт!) – Spudley

+0

Может быть, есть javascript, который пустёт ввод названия, прежде чем отправить форма? –

+0

этот код должен сработать, как вы узнали, что предмет не прошел? это проверка почты? или это, сбросив его значение непосредственно перед функцией php «mail»? – Gar

ответ

2

Из Руководства PHP:

The ('=.') Является конкатенация оператор присваивания, который добавляет аргумент на правой стороне в аргументе на левой стороне.

В вашем сценарии, аргумент на левой стороне пуст, и она будет генерировать E_NOTICE говоря переменная $message не определена.

Другими словами, переменная не существует вне вашего цикла, поэтому вы добавляете к переменной, которая не существует.

Это должно исправить:

$message = ""; //initialize it 
foreach($_POST['form_data'] as $item) 
{ 
//Asigning the message fields to $message variable. 
$message .= $item; 

... 

} 
+1

Это правильное предложение, но оно не затрагивает вопрос, который был задан. – Spudley

+0

Но это работает. Моя проблема: $ subject = $ _POST ["email_subject"]; не входит в мой скрипт. –

1

Код Предоставленный работает хорошо, и все значения становятся заселены в $ _POST. проверить его и дайте нам знать результат

array(3) { ["email_address"]=> string(22) "[email protected]" ["email_subject"]=> string(11) "Hello World" ["form_data"]=> array(3) { [0]=> string(5) "dwdcw" [1]=> string(2) "fw" [2]=> string(3) "dfw" } } 
+0

По некоторым причинам принято решение о работе. Я думаю, что браузер может кэшировать страницу или что-то в этом роде. Это очень странно! –

Смежные вопросы