【问题标题】:Simple php program not working简单的php程序不起作用
【发布时间】:2013-03-03 20:50:37
【问题描述】:

复选框无法正常工作。它有 3 个复选框。当我选择所有三个复选框时,我没有收到任何错误。但是当我选择 1 或 2 复选框时,我收到这样的错误:

注意:未定义索引:第 16 行 C:\wamp\www\test\secpage.php 中的 chke

<html>
<body>
<table>
    <form method="post" action="secpage.php">
        <tr>
            <td colspan="2"><center><h4>Registartion Form</h4></center></td>
        </tr>

        <tr>
            <td>Username : </td>
            <td><input type="text" name="txtname" value=""/></td>
        </tr>

        <tr>
            <td>Password : </td>
            <td><input type="password" name="txtpass" vale=""/></td>
        </tr>

        <tr>
            <td>Email : </td>
            <td><input typ="text" name="txtemail" value=""/></td>
        </tr>

        <tr>
            <td>Address : </td>
            <td><textarea name="add" /></textarea></td>
        </tr> 

        <tr>
            <td>Subjects : </td>
            <td><input type="checkbox" name="chkm" value="Maths"</td>Maths
            <td><input type="checkbox" name="chks" value="Science"</td>Science
            <td><input type="checkbox" name="chke" value="English"</td>English 
        </tr>

        <tr>
            <td>Gender : </td>
            <td><input type="radio" name="gen" value="Male"/>Male
                <input type="radio" name="gen" value="Female"/>Female
             </td>
         </tr>

         <tr>
            <td colspan="2"><center><input type="submit" value="Submit"/></center></td>
         </tr>



</body>
</html>

这是 php 页面:

<html>
<body>
<?php
    $uname=$_POST["txtname"];
    $pass=$_POST["txtpass"];
    $email=$_POST["txtemail"];
    $add=$_POST["add"];
    $subm=$_POST["chkm"];
    $subs=$_POST["chks"];
    $sube=$_POST["chke"];   
    $gen=$_POST["gen"];
?>

<table>
<tr>
    <td>Username : </td>
    <td><?php echo $uname; ?></td>
</tr>

<tr>
    <td>Password : </td>
    <td><?php echo $pass; ?></td>
</tr>

<tr>
    <td>Email : </td>
    <td><?php echo $email; ?></td>
</tr>

<tr>
     <td>Address : </td>
     <td><?php echo $add; ?></td>
</tr>

<tr>
    <td>Subject Selected : </td>
    <td><?php echo $subm." ".$subs." ".$sube; ?></td>
</tr>

<tr>
    <td>Gender : </td>
    <td><?php echo $gen ?></td>
</tr>

</table>
</body>
</html>

任何帮助将不胜感激。

【问题讨论】:

  • 更改 vale=""/> 为 value=""/>
  • 您忘记关闭输入元素?失踪>

标签: php


【解决方案1】:

未选中的复选框不会在帖子中发送它的值。所以$_POST["chke"] 实际上并不存在。在从帖子中获取值之前,您应该检查是否存在。

if(isset($_POST["chke"]))
  $sube = $_POST["chke"];

【讨论】:

    【解决方案2】:

    您的输入复选框标记不完整。因此 PHP 无法读取您的帖子值。

    另外,如果没有“选中”,则不会发送 POST 值。

    【讨论】:

      【解决方案3】:

      你忘记关闭checkbox.

      如果你在没有选中复选框的情况下发布表单,那么它会给你错误,就像你现在得到的那样。

      您可以使用@ 忽略此错误,但这不是最佳做法。

      还有

      if(isset($_POST["chkm"]))
      {
        $subm=$_POST["chkm"];
      }
      

      您可以使用上述条件检查if 的值是否设置。

      【讨论】:

        【解决方案4】:

        以下内容将修复您的 undefined index 错误:

        <?php
          $uname = array_key_exists("txtname", $_POST)  ? $_POST["txtname"]  : NULL;
          $pass  = array_key_exists("txtpass", $_POST)  ? $_POST["txtpass"]  : NULL;
          $email = array_key_exists("txtemail", $_POST) ? $_POST["txtemail"] : NULL;
          $add   = array_key_exists("add", $_POST)      ? $_POST["add"]      : NULL;
          $subm  = array_key_exists("subm", $_POST)     ? $_POST["subm"]     : NULL;
          $subs  = array_key_exists("subs", $_POST)     ? $_POST["subs"]     : NULL;
          $sube  = array_key_exists("sube", $_POST)     ? $_POST["sube"]     : NULL;
          $gen   = array_key_exists("gen", $_POST)      ? $_POST["get"]      : NULL;
        ?>
        

        但是,创建一个函数来为您处理通常会更好:

        <?php
        
          function get_expected_post( $expected = array() ){
            $ret = (object) NULL;
            foreach ( $expected as $key ) {
              $ret->{$key} = array_key_exists($key, $_POST) ? $_POST[$key] : NULL;
            }
            return $ret;
          }
        
          $post = get_expected_post(array(
            'txtname', 
            'txtpass',
            'txtemail', 
            'add',
            'subm',
            'subs',
            'sube',
            'get'
          ))
        
        ?>
        

        这样您可以更轻松地扩展表单中的项目,并且无论何时访问以下内容,您都可以确信它的存在——因此不会出错:

        <?php echo $post->subm; ?>
        

        如果您希望将帖子名称转换为脚本中的不同名称,您可以扩展上述内容。此外,您还可以添加额外的安全性,例如解析期望值的值等等。

        【讨论】:

          【解决方案5】:

          在您的 html 中,您需要为每个复选框设置相同的名称

          <td><input type="checkbox" name="chk[]" value="Maths"</td>Maths
          <td><input type="checkbox" name="chk[]" value="Science"</td>Science
          <td><input type="checkbox" name="chk[]" value="English"</td>English
          

          然后,在你的 php 文件中你可以这样做

          $checkbox = $_POST['chk'];
          

          $checkbox 现在将是每个被选中复选框的数组。

          类似的问题在这里 PHP and HTML Checkboxes using POST

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-10-05
            • 1970-01-01
            • 1970-01-01
            • 2013-05-09
            • 2016-03-20
            相关资源
            最近更新 更多