-1

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

我的 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>
4

3 回答 3

2

if ($_POST) {将始终评估为真,因为$_POST超全局一直存在。你将不得不做更具体的测试,比如if (isset($_POST['cardNum']))

于 2013-09-03T02:11:07.927 回答
1

在对不确定它们是否存在于数组中的键进行寻址之前,请使用isset()函数。

例如:

if (isset($_POST['cardNum'])) {
    echo '<p style="color:green;">Number is valid</p>';
    echo '<p style="color:green;">' . getCardNum($_POST['cardNum']) . '</p>';
}
于 2013-09-03T02:09:31.317 回答
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>
于 2013-09-03T02:44:10.023 回答