当选中该行的复选框时,在html表的特定行获取输入文本

时间:2018-05-23 13:21:19

标签: php html

我的每一行都有一个带复选框的html表,当我点击特定行的复选框时,我应该使用php回显输入文本。但是,我只能获取第一行的输入文本。所有其他行都给我一个空白数据。我不明白我的代码是什么错误

     <?php
     if(isset($_POST['submit']))
      {
         foreach($_POST['test'] as $key=>$value)
               { 
                  echo $_POST['tCode'][$key];
                 }
            }

        ?>
          <html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


                <div style="width:48%; margin-left:440px">
    <table border="0px" align="center" class = "table" style="margin-right:530px;">
 <form name="MainForm" method="post" action=""  >
        <tr>
            <th style = "float:right">Tracking code:</th>
            <th>
               <td> <input type="textbox" name="tCode[]" id="1" ></td>
       <td> <input type="checkbox" name="test[]" id="name" value ="1" /> 
          </td>
            </th>
        </tr>
           <tr>
            <th style = "float:right" >Order Code: </th>
            <th>
                 <td> <input type="textbox" name="tCode[]" id="2" ></td>
          <td> <input type="checkbox" name="test[]" id="name" value ="2" /> 
           </td>
            </th>
            <th>
              </tr>
                 <tr>
                   <th style = "float:right" >product Code: </th>
               <th>
                      <td> <input type="textbox" name="tCode[]" id="3" > 
         </td>
             <td> <input type="checkbox" name="test[]" id="name1" value ="3"/></td>
            </th>
            <th>
                      </tr>
                <td></td>
             <td><input class="btn" type="submit" value="Submit" name = "submit" style="margin-left:50px" /></td>

            

当我勾选第一个复选框,并在第一个texbox中键入hello world时,单击“提交”,它可以回显“hello world”,而对于其他复选框,输入的文本为空白,尽管文本框具有值它。

1 个答案:

答案 0 :(得分:0)

好的,这里有很多值得解决的事情。请记住,这源于希望帮助您成为更好的程序员的精神。并非所有这些都适用于PHP,但所有反馈都将帮助您成为更好的编码器。

  1. 请勿使用内联样式。他们不满意,他们使代码混乱/难以诊断,并且他们使维护变得非常困难。
  2. 请使用代码编辑器为您解决问题(我是PHPStorm的忠实粉丝)。代码中包含了我在下面清理过的各种不匹配的html标签。
  3. 不要不必要地使用id。在html输入上,使用id只有两个目的:(a)所以你可以用CSS样式来解决它们,或者(b)所以你可以使用一些javascript代码轻松访问它们。你们两个都没做,所以我把所有的ID都删掉了。
  4. 使用适当的间距和缩进格式化代码。格式化使得阅读和故障排除变得更加容易。
  5. 将PHP“密钥”放在输入名称中。这是你遇到困难的原因之一 - 索引不匹配。
  6. 在访问数组元素之前,请先使用防御性编码(检查某些内容isset! emptyarray_key_exists)。注意我在下面使用array_key_exists - 这是因为其他方法仍然可以返回FALSE,即使它已设置(但没有值)。
  7. 它无效的原因是因为复选框仅在$_POST超全局中出现,如果已选中。因此,索引与您期望的不匹配。例如,仅检查第二个框导致$key为1,而不是2,如您所料。

    我已经更新了输入以及PHP。

    以下代码已经过更新,测试并证明有效:

    <?php
    if( isset( $_POST[ 'submit' ] ) ) {
        // this is for debugging / testing.  Comment / remove as necessary
        var_dump( $_POST );
    
        // load ALL of the text inputs for convenient access in the loop
        $codes = $_POST['tCode'];    
    
        // test first to be sure ANY checkboxes were checked, to prevent notices
        if ( isset( $_POST[ 'test' ] ) ) {
            // loop over all posted checkboxes
             foreach( $_POST[ 'test' ] as $key => $on ) { 
                 // isset or ! empty can return FALSE if present, but empty value
                 if ( array_key_exists( $key, $codes ) ) {
                     echo '<br>The input for row ' . $key . ' is: ' . $codes[ $key ];   
                 }
             }
         }
    }
    ?>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>
            </title>
        </head>
        <body>
            <form name="MainForm" method="post" action="" >
                <table>
                    <tr>
                        <th>
                            Tracking code:
                        </th>
                        <td>
                            <input type="textbox" name="tCode[1]" >
                        </td>
                        <td>
                            <input type="checkbox" name="test[1]" />
                        </td>
                    </tr>
                    <tr>
                        <th style = "float:right" >
                            Order Code: 
                        </th>
                        <td>
                            <input type="textbox" name="tCode[2]" >
                        </td>
                        <td>
                            <input type="checkbox" name="test[2]" />
                        </td>
                    </tr>
                    <tr>
                        <th>
                            product Code: 
                        </th>
                        <td>
                            <input type="textbox" name="tCode[3]" >
                        </td>
                        <td>
                            <input type="checkbox" name="test[3]" />
                        </td>
                    </tr>
                </table>
                <input class="btn" type="submit" value="Submit" name="submit" />
            </form>
        </body>
    </html>