2014-09-30 2 views
-1

Я создаю форму HTML, которая ссылается на файл PHP для отправки электронной почты. Тем не менее, люди продолжают нажимать на страницу действий формы, которая затем отправляет мне электронное письмо без какой-либо заполненной информации. Я бы хотел решить эту проблему, защищая эту страницу действий от внешних обращений.Как заставить людей случайно получить доступ к действию формы Страница

Вот мой код:

HTML форма:

<form name="homecontact" action="/admin/formactions/writequick.php" method="POST"> 
     <input name="name" placeholder="Name"></input> 
     <input name="email" placeholder="Email"></input> 
     <input name="phone" placeholder="Phone"></input> 
     <textarea name="message" placeholder="Message"></textarea> 
     <input type="submit" style="background:MidnightBlue; color:white;"> 
</form> 

PHP скрипт:

<?php 
$to  = '[email protected]'; 
$subjectadmin = 'CONTACT FORM from My Website'; 
$subjectuser = 'Contact Confirmation from My Website'; 
$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$comments = $_POST['message']; 
$messageadmin = 'A customer just submitted a form on Your Website. Here is their message:' . "\n" . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n"; 
$messageuser = 'Hello,' . ' ' . $name . '!' . "\n" . "\n" . 'Thank you for contacting My Website! We have received your contact form and we will get back to you as soon as we can.' . "\n" . "\n" . 'Just for your records, here is what you submitted to us:' . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n" . "\n" . 'Thank you for choosing My Website!'; 
$headers = 'From: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

mail($to, $subjectadmin, $messageadmin, $headers); 
mail($email, $subjectuser, $messageuser, $headers); 
?> 

Форма работает отлично, но я просто не знаю, как удержать людей от удара эту страницу действий, если они не пройдут через форму.

+0

Вы должны использовать 'isset()' и 'empty()' с условными операторами. Сессии и токены были бы приятным дополнением. –

+0

UPDATE: Я попытался найти все решения на странице, но ничего не работает. Я знаю, что это проблема, а не вы, но есть ли какие-либо предложения? Спасибо! –

+0

Вы видели ответ, который я написал? http://stackoverflow.com/a/26113089/ –

ответ

1

«Мне нравится это, но это будет отправить его, если только одно поле пустым? Я не хочу, чтобы люди должны поставить свою контактную информацию, если они не хотят.»

Quickest исправить то: имя вашей кнопки отправить

<input type="submit" style="background:MidnightBlue; color:white;" name="submit"> 

и обернуть ваш код внутри условного оператора.

if(isset($_POST['submit'])){ 

    // rest of your PHP/mail code 

} 

затем просто использовать заголовок для перенаправления на почту успеха

... 
mail($email, $subjectuser, $messageuser, $headers); 
header("Location: http://www.example.com/"); 
exit; 

Используйте это в виде: (заменить его на один у вас есть сейчас)

<input type="submit" style="background:MidnightBlue; color:white;" name="submit"> 

Перепишите:

<?php 
if(isset($_POST['submit'])) { 

$to  = '[email protected]'; 
$subjectadmin = 'CONTACT FORM from My Website'; 
$subjectuser = 'Contact Confirmation from My Website'; 
$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$comments = $_POST['message']; 
$messageadmin = 'A customer just submitted a form on Your Website. Here is their message:' . "\n" . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n"; 
$messageuser = 'Hello,' . ' ' . $name . '!' . "\n" . "\n" . 'Thank you for contacting My Website! We have received your contact form and we will get back to you as soon as we can.' . "\n" . "\n" . 'Just for your records, here is what you submitted to us:' . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n" . "\n" . 'Thank you for choosing My Website!'; 
$headers = 'From: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

mail($to, $subjectadmin, $messageadmin, $headers); 
mail($email, $subjectuser, $messageuser, $headers); 

// redirect after mail sent 
header("Location: http://www.example.com/"); // modify it to your site 
exit; 

} 

else{ echo "You can't do that from here."; } 
?> 
-2

Попробуйте

<form name="homecontact" action="/admin/formactions/writequick.php?action=mail" method="POST"> 
</form> 

в вашей writequick.php странице

if(isset($_GET['action'])){ 
//place your mail code 


} 
0

Вы можете попробовать это:

<?php 
if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST)) { 

    // you should also validate your _POST data (email syntaxis, etc) 

    $to  = '[email protected]'; 
    $subjectadmin = 'CONTACT FORM from My Website'; 
    $subjectuser = 'Contact Confirmation from My Website'; 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $comments = $_POST['message']; 
    $messageadmin = 'A customer just submitted a form on Your Website. Here is their message:' . "\n" . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n"; 
    $messageuser = 'Hello,' . ' ' . $name . '!' . "\n" . "\n" . 'Thank you for contacting My Website! We have received your contact form and we will get back to you as soon as we can.' . "\n" . "\n" . 'Just for your records, here is what you submitted to us:' . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n" . "\n" . 'Thank you for choosing My Website!'; 
    $headers = 'From: [email protected]' . "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 

    mail($to, $subjectadmin, $messageadmin, $headers); 
    mail($email, $subjectuser, $messageuser, $headers); 
} 
?> 

Таким образом, это не имеет значения, если пользователь выходит непосредственно на эту страницу (в режиме GET). Он должен будет пройти через форму сообщения, чтобы фактически вызвать функцию mail(). Можно также добавить простой дополнительный уровень безопасности (чтобы избежать сообщений запросов от других сайтов), добавив скрытый вход в виде:

<input type="hidden" name="hash" value="<?=md5(date("Y-m-d H"))?>"> 

А потом просто применить эту проверку в начале файла writequick.php:

if($_POST['hash'] == md5(date("Y-m-d H"))) { 

Надеюсь, что это поможет!

+1

'isset ($ _ POST) && count ($ _ POST)' - суммировано в '! Empty ($ _ POST)' – wavemode

+0

@wavemode, что вы правы, я обновил ответ. Благодаря! – andufo

0

Wrap код в

if($_SERVER['REQUEST_METHOD']=='POST'){ 
    //Do stuff here 
} 

Это будет убедиться, что пользователь делает запрос на запись, прежде чем делать что-нибудь. Также вам нужно будет проверить, что переменные имеют значения перед отправкой по почте. Используйте

if(!empty($_POST['variable_key_here'])){ 
    //Do stuff here 
} 
+0

Мне это нравится, но он все равно отправит его, если только одно поле пустым? Я не хочу, чтобы люди должны были указывать свою контактную информацию, если они этого не хотят. –

0

вы можете проверить $_POST супер глобального массива

<?php 
    if(isset($_POST['name'])) { 
    $to  = '[email protected]'; 
    $subjectadmin = 'CONTACT FORM from My Website'; 
    $subjectuser = 'Contact Confirmation from My Website'; 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $comments = $_POST['message']; 
    $messageadmin = 'A customer just submitted a form on Your Website. Here is their message:' . "\n" . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n"; 
    $messageuser = 'Hello,' . ' ' . $name . '!' . "\n" . "\n" . 'Thank you for contacting My Website! We have received your contact form and we will get back to you as soon as we can.' . "\n" . "\n" . 'Just for your records, here is what you submitted to us:' . "\n" . 'Name:' . ' ' . $name . "\n" . 'Email:' . ' ' . $email . "\n" . 'Phone:' . ' ' . $phone . "\n" . 'Comments:' . ' ' . $comments . "\n" . "\n" . 'Thank you for choosing My Website!'; 
    $headers = 'From: [email protected]' . "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 

    mail($to, $subjectadmin, $messageadmin, $headers); 
    mail($email, $subjectuser, $messageuser, $headers); 
    } else { 
     die("Access denied"); 
    } 
    ?> 
0

Ваш код представить контактные данные на ваш почтовый правильно, но нет никакой проверки в нем.

У нас есть много методов для проверки форм:

1.You может использовать CAPTCHA, в вашей форме.

Проверка подлинности Java ScriptClient Side, а также проверка подлинности на стороне сервера для проверки правильного шаблона электронной почты, пустого поля, специальных символов html и всех.

Проверить эту ссылку:

http://www.w3schools.com/php/php_form_url_email.asp

http://www.w3schools.com/js/js_form_validation.asp

Есть много методов для валидаций, только Google в соответствии с вашими требованиями и ваша проблема будет решена.

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