大家好,最近刚开始学PHP
看《PHP和MySQL.Web开发(原书第4版)》,在运行第一章的两个小程序时出现 
Notice: Undefined index:
不知道为什么呀,下载了源码,对比了,一样的。奇怪。
两个文件内容如下:
orderform.html:<html>
<body>
<form action= "processorder.php" method= "post"><table border= "0">
<tr bgcolor= "#cccccc">
<td width= "150">Item</td>
<td width= "15">Quantity</td>
</tr>
<tr>
<td>Tires</td>
<td align= "center"><input type= "text"name= "tireqty"size= "3"
maxlength= "3"/></td>
</tr>
<tr>
<td>Oil</td>
<td align= "center"><input type= "text"name= "oilqty"size= "3"
maxlength= "3"/></td>
</tr>
<tr>
<td>Spark Plugs</td>
<td align= "center"><input type= "text"name= "sparkqty"size= "3"
maxlength= "3"/></td>
</tr>
<tr>
<td colspan= "2"align= "center"><input type= "submit"value= "Submit Order"/></td>
<!-- ><button align= "center" type= "button">Submit Order</button><-->
</tr>
</table>
</form>
</body>
</html>processorder.php:<?php
// create short variable names
// if(isset($_POST['tireqty']) && isset($_POST['oilqty']) && isset($_POST['sparkqty']))
//{
$tireqty = $_POST['tireqty'];
$oilqty = $_POST['oilqty'];
$sparkqty = $_POST['sparkqty'];
//}
?>
<html>
<head>
<title>Bob's Auto Parts - Order Results</title>
</head>
<body>
<h1>Bob's Auto Parts</h1>
<h2>Order Results</h2><?php
echo "<p>Order processed at ";
echo date('H:i, jS F Y');
echo "</p>";
// echo "<p>Order process at ".date('H:i, jS F Y')."</p>";  也可以,用点连接。

echo '<p>Your order is as follows: </p>';
echo $tireqty. 'tires<br />';
echo $oilqty. 'bottles of oil<br />';
echo $sparkqty. 'spark plugs<br />';
?>
</body>
</html>
我在orderform.html的三个文本框(tireqty,oilqty和sparkqty)里分别输入了 2, 4, 6三个数字后,点 Submit Order按钮,跳转到processorder.php,但是出现错误如题,三个数字不能显示。
请指教!!谢谢!

解决方案 »

  1.   

    Notice: Undefined index:这是一个提示,不是错误,在这本书写的时候PHP还没有默认这个提示
    在论坛置顶的常见问题帖子里也有提到解决的方法在_POST变量前做一个 isset($_POST['xxx']) 的判断即可
      

  2.   

    经测试,有POST值:<?php
    /* Created on [2012-5-23] Author[Newton] */
    print_r($_POST);
    #Array ( [tireqty] => 2 [oilqty] => 3 [sparkqty] => 4 )
    ?>
    <html>
    <body>
    <form action= "test15.php" method= "post"><table border= "0">
    <tr bgcolor= "#cccccc">
    <td width= "150">Item</td>
    <td width= "15">Quantity</td>
    </tr>
    <tr>
        <td>Tires</td>
        <td align= "center"><input type= "text"name= "tireqty"size= "3"
            maxlength= "3"/></td>
    </tr>
    <tr>
        <td>Oil</td>
        <td align= "center"><input type= "text"name= "oilqty"size= "3"
            maxlength= "3"/></td>
    </tr>
    <tr>
        <td>Spark Plugs</td>
        <td align= "center"><input type= "text"name= "sparkqty"size= "3"
            maxlength= "3"/></td>
    </tr>
    <tr>
        <td colspan= "2"align= "center"><input type= "submit"value= "Submit Order"/></td>
        <!-- ><button align= "center" type= "button">Submit Order</button><-->
    </tr>
    </table>
    </form>
    </body>
    </html>result:
      

  3.   

    多谢大家热心。
    不过还是用了dmtnewtons的方法就好了。
    在orderform.html里面加了
    <?php
    print_r($_POST);
    ?>
    可以了。
      

  4.   


    昨晚试过了。。加了,错误就变成 undefined variable了,就是那三个变量没被赋值。就是if语句是false。
      

  5.   

    请问为什么
    在orderform.html里面加了
    <?php
    print_r($_POST);
    ?>
    可以了
      

  6.   


    加了判断后 后续的代码也是一样要进行相同的处理的.print_r($_POST) 能解决问题?别搞笑了,这只是输出这个数组内容而已,有没有这个代码对程序本身的功能都没有任何影响
      

  7.   

    PHP.INI设定
    error_reporting = E_ALL & ~E_NOTICE
      

  8.   

    不过现在确实是可以了,加了那个
    <?php
    /* Created on [2012-5-23] Author[Newton] */
    print_r($_POST);
    #Array ( [tireqty] => 2 [oilqty] => 3 [sparkqty] => 4 )
    ?>
    之后,我也不知道为什么呀。奇怪。orderform.html:
    <?php
    /* Created on [2012-5-23] Author[Newton] */
    print_r($_POST);
    ?><html>
    <body>
    <form action= "processorder.php" method= "post"><table border= "0">
    <tr bgcolor= "#cccccc">
    <td width= "150">Item</td>
    <td width= "15">Quantity</td>
    </tr>
    <tr>
    <td>Tires</td>
    <td align= "center"><input type= "text"name= "tireqty"size= "3"
    maxlength= "3"/></td>
    </tr>
    <tr>
    <td>Oil</td>
    <td align= "center"><input type= "text"name= "oilqty"size= "3"
    maxlength= "3"/></td>
    </tr>
    <tr>
    <td>Spark Plugs</td>
    <td align= "center"><input type= "text"name= "sparkqty"size= "3"
    maxlength= "3"/></td>
    </tr>
    <tr>
    <td colspan= "2"align= "center"><input type= "submit"value= "Submit Order"/></td>
    <!-- ><button align= "center" type= "button">Submit Order</button><-->
    </tr>
    </table>
    </form>
    </body>
    </html>processorder.php:
    <?php
        // create short variable names
        // if(isset($_POST['tireqty']) && isset($_POST['oilqty']) && isset($_POST['sparkqty']))
        //{    
            $tireqty = $_POST['tireqty'];
            $oilqty = $_POST['oilqty'];
            $sparkqty = $_POST['sparkqty'];
        //}
    ?>
    <html>
    <head>
        <title>Bob's Auto Parts - Order Results</title>
    </head>
    <body>
    <h1>Bob's Auto Parts</h1>
    <h2>Order Results</h2><?php
        echo "<p>Order processed at ";
        echo date('H:i, jS F Y');
        echo "</p>";
        // echo "<p>Order process at ".date('H:i, jS F Y')."</p>";  也可以,用点连接。
        
        echo '<p>Your order is as follows: </p>';
        echo $tireqty. 'tires<br />';
        echo $oilqty. 'bottles of oil<br />';
        echo $sparkqty. 'spark plugs<br />';
    ?>
    </body>
    </html>
      

  9.   

    请教为什么呀?
    现在在三个文本框里输入后,就可以传递到processorder.php里面了
      

  10.   

    不加那个之前就有notice undefined index加了isset
    或@
    或php.ini里面加了 ~NOTICE
    都不行诶直到加了
    <?php
    /* Created on [2012-5-23] Author[Newton] */
    print_r($_POST);
    #Array ( [tireqty] => 2 [oilqty] => 3 [sparkqty] => 4 )
    ?>
      

  11.   

    像这里直接简化为:processorder.php:
    <?php
      if(!empty($_POST))
      {  
      $tireqty = $_POST['tireqty'];
      $oilqty = $_POST['oilqty'];
      $sparkqty = $_POST['sparkqty'];
      }
    ?>
      

  12.   

    这里直接简化为:processorder.php:
    <?php
      if(!empty($_POST))
      {  
      $tireqty = $_POST['tireqty'];
      $oilqty = $_POST['oilqty'];
      $sparkqty = $_POST['sparkqty'];
      }
    ?>
      

  13.   

    这里可以简化为:processorder.php:
    <?php
      if(!empty($_POST))
      {  
      $tireqty = $_POST['tireqty'];
      $oilqty = $_POST['oilqty'];
      $sparkqty = $_POST['sparkqty'];
      }
    ?>