неопределенная переменная форма php - PullRequest
0 голосов
/ 13 мая 2011

Я работаю над этой формой PHP и продолжаю сталкиваться с этой проблемой.

<?php
  // User settings
  $to = "myemail@yahooo.com";
  $subject = "Test Form";

  // Include extra form fields and/or submitter data?
  // false = do not include
  $extra = array(
    "form_country"  => true,
    "form_stateSelect" => true
  );

  // Process
  $action = isset($_POST["action"]) ? $_POST["action"] : "";

  if (empty($action)) {
    // Send back the contact form HTML
    $output = "<div style='display:none'> 
    <div class='contact-content'>
      <h1 class='contact-title'>Send us a message:</h1>
      <div class='contact-loading' style='display:none'></div>
      <div class='contact-message' style='display:none'></div>
      <form action='#' style='display:none'>
        <label for='contact-name'>Name</label>
        <input type='text' id='contact-name' class='contact-input' name='name'  />";

    if ($extra["form_country"]) {
      $output .= "
        <label for='contact-country'>Servicio</label>
        <table>
          <tr>
            <td>
            <select id='contact-country' name='country' onchange='populateState()'>
            </select>
            </td>
          </tr>
          </table>";
    }
    if ($extra["form_stateSelect"]) {
      $output .= "
        <label for='contact-stateSelect'>Sub-servicio</label>
              <table>
        <td>
            <select id='contact-stateSelect' name='stateSelect'>
            </select>
            <script language='javascript'>initCountry('US'); </script>
            </td>           </table>
      ";
    }

    $output .= "
        <label>&nbsp;</label>
        <button type='submit' class='contact-send contact-button' tabindex='1006'>Send</button>
        <button type='submit' class='contact-cancel contact-button simplemodal-close' tabindex='1007'>Cancel</button>
        <br/>
        <input type='hidden' name='token' value='" . smcf_token($to) . "'/>
      </form>
    </div>
  </div>";

    echo $output;
  }
  else if ($action == "send") {
    // Send the email
    $name = isset($_POST["name"]) ? $_POST["name"] : "";
    $country = isset($_POST["country"]) ? $_POST["country"] : $country;
    $stateSelect = isset($_POST["stateSelect"]) ? $_POST["stateSelect"] : $stateSelect ;
    $token = isset($_POST["token"]) ? $_POST["token"] : "";

    // make sure the token matches
    if ($token === smcf_token($to)) {
      smcf_send($name, $country, $stateSelect );
      echo "Your message was successfully sent.";
    }
    else {
      echo "Unfortunately, your message could not be verified.";
    }
  }

  function smcf_token($s) {
    return md5("smcf-" . $s . date("WY"));
  }

  // Validate and send email
  function smcf_send($name, $country, $stateSelect) {
    global $to, $extra;

    // Filter and validate fields
    $name = smcf_filter($name);
    $country = smcf_filter($country);
    $stateSelect = smcf_filter($stateSelect);

    // Set and wordwrap message body
    $body = "From: $name\n\n";
    $body .= "Servicio: $country\n\n";
    $body .= "Sub-servicio: $stateSelect";

    // Build header
    $headers = "From: $name\n";
    $headers .= "X-Mailer: PHP/SimpleModalContactForm";

    // UTF-8
    if (function_exists('mb_encode_mimeheader')) {
      $country = mb_encode_mimeheader($country, "UTF-8", "B", "\n");
      $stateSelect = mb_encode_mimeheader($stateSelect, "UTF-8", "B", "\n");
    }
    else {
      // you need to enable mb_encode_mimeheader or risk 
      // getting emails that are not UTF-8 encoded
    }
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-type: text/plain; charset=utf-8\n";
    $headers .= "Content-Transfer-Encoding: quoted-printable\n";

    // Send email
    @mail($to, $subject, $body, $headers) or 
      die("Unfortunately, a server issue prevented delivery of your message.");
  }

  // Remove any un-safe values to prevent email injection
  function smcf_filter($value) {
    $pattern = array("/\n/","/\r/","/content-type:/i","/to:/i", "/from:/i", "/cc:/i");
    $value = preg_replace($pattern, "", $value);
    return $value;
  }

  exit;
?>

Когда я пытаюсь отправить электронное письмо, оно говорит, что у меня есть неопределенная переменная в строке 81:

$stateSelect = isset($_POST["stateSelect"]) ? $_POST["stateSelect"] : $stateSelect ;

Когда я удаляю последние $stateSelect и добавляю "", это устраняет ошибку, но затем, когда я отправляю форму, это поле отображается пустым.

$country и $stateSelect - выпадающие списки. Все, что я выберу в $country, влияет на выпадающий список $stateSelect.

Ответы [ 2 ]

3 голосов
/ 14 мая 2011
 $stateSelect = isset($_POST["stateSelect"]) ? $_POST["stateSelect"] : $stateSelect ;
                                                                       ^^^^^ undefined at this point

если значение POST не установлено, вы пытаетесь установить для StateSelect равное себе. На данный момент stateSelect не определено, поэтому вы присваиваете неопределенную переменную себе.

0 голосов
/ 14 мая 2011

Похоже, есть 2 проблемы:

  1. этап send не отправляет параметр запроса stateSelect
  2. , когда это происходит, в строке 81,вы пытаетесь присвоить неопределенную переменную $stateSelect себе в это время

    $ stateSelect = isset ($ _ POST ["stateSelect"])?$ _POST ["stateSelect"]: $ stateSelect;

Я бы проверил, чтобы раскрывающийся список stateSelect name был stateSelect (а не только id), чтобырешить первую проблему.

Вторая проблема, я бы нашел способ сделать это:

$stateSelect = isset($_POST["stateSelect"]) ? $_POST["stateSelect"] : "Select One" ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...