未定义的变量和未定义的索引错误

时间:2013-09-03 02:05:29

标签: php

我正在处理的程序应该从输入框中删除破折号,空格等,然后将数字显示给用户。

我在php代码中收到一个未定义的变量和未定义的索引错误。错误在第35和41行。我猜这个功能超出了范围,但我不确定。

我用类似的代码制作了阶乘计算器,它运行良好。我已经尝试将该代码调整到这个问题,但我无法让它工作。我不知道为什么,但是我在理解php如何工作方面遇到了很多麻烦。

谢谢!

<?php
  function getCardNum($cardNum) {

  $ccNum = true;
  if ($_POST) {
     $number = $_POST['cardNum'];
     $number = preg_replace('/[\-\" "]/', '', $number);
     if (is_numeric($number)) {
        $ccNum = true;
     }
     else {
        $ccNum = false;
     }
      return $number;
  }
}

  ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Card Validator</title>
    <link rel="stylesheet" type="text/css" href="common.css" />
  </head>
  <body>
    <h3>Enter your credit card number!:</h3>
    <form method="POST">
      <table border="0">
        <tr>
          <td>Enter numeric character only</td>
          <td><input type="text" name="cardNum" id="cardNum" size = "50" /></td>
          <td>
            <?php
              if ($cardNum) {
                 echo '<p style="color:green;">Number is valid</p>';
                 echo '<p style="color:green;">' . getCardNum($_POST['cardNum']) . '</p>';
                    }
                 else {
                 echo '<p style="color:red;">Number contains non-numeric characters!</p><br />';
                 echo '<p style="color:red;">' . getCardNum($_POST['cardNum']) . '</p>';
                       }
                       ?>
          </td>
        </tr>
        <td><input type="submit" name="cardNum" id="cardNum" value="Submit" /></td>
        <td><input type="reset" name="resetButton" id="resetButton" value="Reset" /></td>
        </tr>           
      </table>
    </form>
  </body>
</html>

3 个答案:

答案 0 :(得分:2)

if ($_POST) {将始终评估为true,因为$_POST超全局始终存在。你必须做更具体的测试,如if (isset($_POST['cardNum']))

答案 1 :(得分:1)

在解决您不确定它们是否存在于数组中的键之前,请使用isset()函数。

例如:

if (isset($_POST['cardNum'])) {
    echo '<p style="color:green;">Number is valid</p>';
    echo '<p style="color:green;">' . getCardNum($_POST['cardNum']) . '</p>';
}

答案 2 :(得分:1)

我不得不改变一些条件,但我认为这应该按预期工作。

submit输入已重命名为submit,因为它导致了冲突。

添加了if (is_numeric($_POST['cardNum'])) {

if ((!is_numeric($_POST['cardNum'])) && (isset($_POST['cardNum']))) {

<?php

function getCardNum() {
$ccNum = true;

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

     $number = $_POST['cardNum'];
     $number = preg_replace('/[\-\" "]/', '', $number);
     if (is_numeric($number)) {
        $ccNum = true;
     }
     else {
        $ccNum = false;
     }
      return $number;
}
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Card Validator</title>
    <link rel="stylesheet" type="text/css" href="common.css" />
  </head>
  <body>
    <h3>Enter your credit card number!:</h3>
    <form method="POST" action="">
      <table border="0">
        <tr>
          <td>Enter numeric character only</td>
          <td><input type="text" name="cardNum" id="cardNum" size = "50" /></td>
          <td>

<?php


if (is_numeric($_POST['cardNum'])) {

    echo '<p style="color:green;">Number is valid</p>';
    echo '<p style="color:green;">' . getCardNum($_POST['cardNum']) . '</p>';

}
if ((!is_numeric($_POST['cardNum'])) && (isset($_POST['cardNum']))) {


    echo '<p style="color:red;">Number contains non-numeric characters!</p><br />';
    echo '<p style="color:red;">' . getCardNum($_POST['cardNum']) . '</p>';


}
?>

          </td>
        </tr>
        <td><input type="submit" name="submit" id="cardNum" value="Submit" /></td>
        <td><input type="reset" name="resetButton" id="resetButton" value="Reset" /></td>
        </tr>           
      </table>
    </form>
  </body>
</html>