【问题标题】:Undefined variable even after using isset即使在使用 isset 之后也未定义的变量
【发布时间】:2014-03-22 10:10:35
【问题描述】:

我收到以下联系表单错误

注意:未定义变量:C:\xampp\htdocs\tedx\contact.php 中第 45 行的 sumNums

我已经尝试过“设置”它。

下面是我的 HTML 标记。

<form class="contact-form" method="post" action="contact.php" name="contactform" id="contactform">
      <div class="row">
        <div class="large-6 columns">
          <div class="row">
            <div class="large-12 columns">
              <label>Name<small class="astrix">*</small>
                <input type="text" id="name" name="name" />
              </label>
            </div>
          </div>
          <div class="row">
            <div class="large-12 columns">
              <label>Email<small class="astrix">*</small>
                <input type="text" id="email" name="email" />
              </label>
            </div>
          </div>
          <div class="row">
            <div class="large-12 columns">
              <label>Subject<small class="astrix">*</small>
                <input type="text" id="subject" name="subject" />
              </label>
            </div>
          </div>
        </div>
        <div class="large-6 columns">
          <label>Message<small class="astrix">*</small>
            <textarea cols="30" rows="8" id="comments" name="comments"></textarea>
          </label>
        </div>
      </div>

      <div class="row captcha">
        <div class="large-6 columns">
          <label for="captcha-code">Enter the following sum<small class="astrix">*</small><br>
            <span class="captcha-chars" name="captcha-chars">
              <span name="num1" id="num1">
                <?php
                  $num1 = rand(1, 9);
                  echo $num1;
                ?>
              </span>
              +
              <span name="num2" id="num2">
                <?php
                  $num2 = rand(1, 9);
                  echo $num2;
                ?>
              </span>
              <?php $sumNums = $num1+$num2; ?>
              <input type="hidden" value="<?php echo $sumNums; ?>" name="sunNums" id="sumNums">
            </span>
            <input type="text" id="verify" name="verify">
          </label>
        </div>
        <div class="large-6 columns mt-25">
          <button type="submit" id="submit" class="submit"><img src="img/btn-submit.png" alt=""></button>
        </div>
      </div>
    </form>

还有 PHP:

    <?php

if(!$_POST) exit;

// Email address verification, do not edit.
function isEmail($email) {
    return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$name     = trim($_POST['name']);
$email    = trim($_POST['email']);
$subject  = trim($_POST['subject']);
$comments = trim(strip_tags($_POST['comments'], '<p><b><a><i>'));
$verify   = trim($_POST['verify']);
if(isset($_POST['sumNums'])) {$sumNums = $_POST['sumNums'];}

if(trim($name) == '') {
    echo '<div class="error_message"><i class="fi-x"></i>You must enter your name.</div>';
    exit();
} else if(!ctype_alpha($name)) {
    echo '<div class="error_message"><i class="fi-x"></i>Your name should\'t contain digits or speicla characters</div>';
    exit();
} else if(trim($email) == '') {
    echo '<div class="error_message"><i class="fi-x"></i>You must enter your email ID</div>';
    exit();
} else if(!isEmail($email)) {
    echo '<div class="error_message"><i class="fi-x"></i>You have entered an invalid email ID, try again.</div>';
    exit();
}

if(trim($subject) == '') {
    echo '<div class="error_message"><i class="fi-x"></i>You must enter a subject.</div>';
    exit();
} else if(!ctype_alpha($subject)) {
    echo '<div class="error_message"><i class="fi-x"></i>Your subject should\'t contain digits or speicla characters</div>';
    exit();
} else if(trim($comments) == '') {
    echo '<div class="error_message"><i class="fi-x"></i>You must enter a message.</div>';
    exit();
} else if(!isset($verify) || trim($verify) == '') {
    echo '<div class="error_message"><i class="fi-x"></i>You must enter the verification number.</div>';
    exit();
} else if(trim($verify) != $sumNums) {
    echo '<div class="error_message"><i class="fi-x"></i>The verification number you entered is incorrect.</div>';
    exit();
}

if(get_magic_quotes_gpc()) {
    $comments = stripslashes($comments);
}


// Configuration option.
// Enter the email address that you want to emails to be sent to.
// Example $address = "joe.doe@yourdomain.com";

//$address = "example@themeforest.net";
$address = "njshah@aixsol.com";


// Configuration option.
// i.e. The standard subject will appear as, "You've been contacted by John Doe."

// Example, $e_subject = '$name . ' has contacted you via Your Website.';

$e_subject = 'You\'ve been contacted by ' . $name . '.';


// Configuration option.
// You can change this if you feel that you need to.
// Developers, you may wish to add more fields to the form, in which case you must be sure to add them here.

$e_body = "You have been contacted by $name with regards to $subject, their additional message is as follows." . PHP_EOL . PHP_EOL;
$e_content = "\"$comments\"" . PHP_EOL . PHP_EOL;
$e_reply = "You can contact $name via email, $email.";

$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

if(mail($address, $e_subject, $msg, $headers)) {

    // Email has sent successfully, echo a success page.

    echo "<div id='success_page' class='success_message'>";
    echo "<p><i class='fi-check'></i>Message sent successfully.";
    echo "Thank you <strong>$name</strong>, your message has been submitted to us.</p>";
    echo "</div>";

} else {

    echo 'ERROR!';

}

我该如何解决这个问题?

【问题讨论】:

  • 顺便说一句,第 45 行是 } else if(trim($verify) != $sumNums) {
  • 如果我不'isset'它,我会得到一个'undefined:index'错误,只有'sumNums'。适用于其他值。

标签: php post contact isset


【解决方案1】:

您需要回答自己关于以下行的问题。如果 POST 没有提交,$sumNums 会被定义吗?

if(isset($_POST['sumNums'])) {$sumNums = $_POST['sumNums'];}

【讨论】:

  • 我得到了你想要在这里描绘的东西。未提交隐藏字段。解决方法是什么?
  • 当那里没有 $_POST 时,您需要分配变量。所以就像给它一样给它并分配$sumNums = ""
  • 但是我如何在后端获取 $sumNums 隐藏字段的值以将其与#verify 进行比较?我无法将其设置为预定义的数字,因为它是两个随机数的总和。
  • 您需要在第 45 行的 $sumNums 上添加 isset() 然后 :)
  • 摆脱了错误,但现在它没有得到验证,而它是一个简单的相等验证。
【解决方案2】:

在表格中,您为 sunNums 提供了错误的名称,它应该是 sumNums

所以,替换

<input type="hidden" value="<?php echo $sumNums; ?>" name="sunNums" id="sumNums">

<input type="hidden" value="<?php echo $sumNums; ?>" name="sumNums" id="sumNums">

我刚刚更改了name 属性。

【讨论】:

    【解决方案3】:

    您的输入有

    name="sunNums"
    

    你正在使用

    if(isset($_POST['sumNums'])) {$sumNums = $_POST['sumNums'];}
    

    【讨论】:

    • 是的,这是一个愚蠢的错误。我解决了它,但仍然收到相同的“未定义变量”错误。
    • 在同一行 num ?
    • 是的,在同一行。
    • hmnm 我检查了代码和 PHP 代码没有任何问题。您的表单的文件名是什么?
    • 文件名为contactus.php
    【解决方案4】:

    HTML 中名称为sunNums

    <input type="hidden" value="<?php echo $sumNums; ?>" name="sunNums" id="sumNums">
    

    但是在PHP 中你使用sumNums

    if(isset($_POST['sumNums'])) {$sumNums = $_POST['sumNums'];}
    

    【讨论】:

      【解决方案5】:

      问题是这样的:

      if(isset($_POST['sumNums'])) {$sumNums = $_POST['sumNums'];}
      

      $sumNums 变量未定义。 $_POST 中没有这样的索引。

      【讨论】:

        【解决方案6】:

        你可以初始化值

        $sumNums = '';
        

        之前

        if(isset($_POST['sumNums'])) {$sumNums = $_POST['sumNums'];}
        

        否则也可以替换

        } else if(trim($verify) != $sumNums) {
        

        通过

        } else if(isset($sumNums) && trim($verify) != $sumNums) {
        

        希望对你有帮助:)

        【讨论】:

          【解决方案7】:

          替换:

          <input type="hidden" value="<?php echo $sumNums; ?>" name="sunNums" id="sumNums">
          

          <input type="hidden" value="<?php echo $sumNums; ?>" name="sumNums" id="sumNums">
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-09
            • 2016-02-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-07
            • 2022-08-18
            相关资源
            最近更新 更多