PHP $ _POST не переносит элементы поля - PullRequest
1 голос
/ 29 марта 2012

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

contact.php

<form name="contact" method="post" action="thankyou.php">
  <input type="hidden" name="flag" value="1" />
  <table style="width: 500px;">
  <tr>
    <td><p><em><strong>Your email: *</strong></em></p></td>
    <td><input name="email" type="text" size="30" /></td>
  </tr>
  <tr>
    <td><p><em><strong>Subject:</strong></em></p></td>
    <td><input name="subject" type="text" size="30" /></td>
  </tr>
  <tr>
    <td><p><em><strong>Message: *</strong></em></p></td>
    <td><textarea name="message" type="text" rows="7" cols="30"></textarea></td>
  </tr>
  <tr>
    <td></td>
    <td><div style="height:5px"></div></td>
  </tr>
  <tr>
    <td colspan="2"><p>To help protect us against spam, please type <em>storage</em> below: *</p></td>
  </tr>
  <tr>
    <td></td>
    <td><input name="spam_test" maxlength="7" type="text" size="5" /></td>
  </tr>
  <tr>
    <td></td>
    <td><div style="height:5px"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><input type="submit" value="Send" />
    <input type="reset" value="Reset" /></td>
  </tr>
  </table>
</form>

thankyou.php

<?php
  $user_message = "";
  if(isset($_POST['flag'])) {
    $flag = "true";
    if (strlen($_POST['message']) > 20000) {
      $user_message = "Message too long, please shorten.";
      $flag = "false";
    }
    if (strlen($_POST['message']) < 1) {
      $user_message = "Message cannot be blank.";
      $flag = "false";
    }
    if (strlen($_POST['subject']) > 5000) {
      $user_message = "Subject too long, please shorten.";
      $flag = "false";
    }
    if(!check_email($_POST['email'])) {
      $user_message = "Invalid email address, please re-enter.";
      $flag = "false";
    }
    if($_POST['spam_test'] != "storage") {
      $user_message = "Please fill out the spam prevention field correctly.";
      $flag = "false";
    }
    if($flag == "true") {
      $user_message = "Your message has been sent. We will be in touch shortly.";

      $headers = "From: ContactForm@example.com\r\n";
      $headers .= "Reply-To: " . $_POST['email'] . "\r\n";
      $headers .= "Return-Path: " . $_POST['email'] . "\r\n";

      $msg = "This is an automatically generated email from the Contact Form on mrstore.co.uk - below is a message from a user:\n\n";
      $msg .= "User's email:  " . $_POST['email'] . "\n\n";
      $msg .= "Message: " . $_POST['message'] . "\n";

      $subject = "Contact Us Message From Website: " . $_POST['subject'];

      if(!mail('user@example.org', $subject, $msg, $headers)) {
      $user_message = "Error Sending Email, please try again later.";
      }
    }
  }
?>
<h2><?php echo $user_message; ?></h2>

EDIT Ниже приведен результат print_r ($ _ POST) ... Элементы поля переносятся в thankyou.php, но обрабатываются неправильно (т. Е. В этом примере спам-ключ неверен), а почта не отправляется.

Array ( [flag] => true [email] => user@example.org [subject] => This is the subject [message] => hello moto [spam_test] => blah )

РЕДАКТИРОВАТЬ 2 Я чувствую, что все ближе к выяснению, но теперь выдает ошибку 500 серверов. Я также создал переменную $ email в thankyou.php и указал ее на $ _POST ['email']). Вот функция check_email ...

function check_email($email) {
        // First, we check that there's one @ symbol, and that the lengths are right
        if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
            // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
            return false;
        }
        // Split it into sections to make life easier
        $email_array = explode("@", $email);
        $local_array = explode(".", $email_array[0]);
        for ($i = 0; $i < sizeof($local_array); $i++) {
            if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) {
                return false;
            }
        }
        if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
            $domain_array = explode(".", $email_array[1]);
            if (sizeof($domain_array) < 2) {
                return false; // Not enough parts to domain
            }
            for ($i = 0; $i < sizeof($domain_array); $i++) {
                if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
                    return false;
                }
            }
        }
        return true;
    }

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ ... Я НАДЕЖДА !! Я сузил это до этого, если заявление ...

if($flag == "true") {
                            $headers = "From: ContactForm@mrstore.co.uk\r\n";
                            $headers .= "Reply-To: " . $_POST['email'] . "\r\n";
                            $headers .= "Return-Path: " . $_POST['email'] . "\r\n";

                            $msg = "This is an automatically generated email from the Contact Form on mrstore.co.uk - below is a message from a user:\n\n";
                            $msg .= "User's email:  " . $_POST['email'] . "\n\n";
                            $msg .= "Message: " . $_POST['message'] . "\n";

                            $subject = "Contact Us Message From Website: " . $_POST['subject'];
                            mail("dgengler@ccseo.com", $subject, $msg, $headers);
                            $user_message = "Your message has been sent. We will be in touch shortly.";                }

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

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

if(!check_email($_POST['email'])) {

Возможно, попробуйте:

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {

И посмотрите, работает ли это.

0 голосов
/ 29 марта 2012

Я не смог найти никаких проблем для отправки данных POST.

Убедитесь, что ваша функция 'check_email' существует. и ваша функция отправки электронной почты работает правильно.

...