【问题标题】:getting wrong variable from checkboxes从复选框中获取错误的变量
【发布时间】:2014-03-09 15:04:53
【问题描述】:

我有一个带有复选框的 HTML 表格,其中将显示来自 MYSQL 数据库的行。 问题是当我标记其中一行以对其执行某些操作时,它给了我一个错误的值,但 MYSQL 代码运行正确并且它更新了正确的行, 我很困惑,无法弄清楚问题是什么,直到一个小时前它还可以正常工作。 我已经使用 echo 函数来查看值的结果,每次它显示 $i 和地址为零的数组为零,但是 MYSQL UPDATE 代码获取正确的值并更新正确的行。

HTML 表格:

<?php
        $connection = mysql_connect('localhost', '', '');
        $db = mysql_select_db('table', $connection);
        mysql_query("SET CHARACTER SET utf8;");
        mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'"); 


        /* Inbox section */
        $query = mysql_query("SELECT * FROM article WHERE editor='' && status='Under Review' ", $connection);

            $string = '';

            if (mysql_num_rows($query)){
            $_SESSION["count"]=mysql_num_rows($query);
            ?>

        <form method="POST" action="">
        <table cellspacing='0' width="800"  border='1'>
            <tr>
                <th>Title</th>
                <th>Firstname</th>
                <th>Lirstname</th>
                <th>Article Title</th>
                <th>Article File</th>
                <th>Reviewer Email Address</th>
                <th>Mark</th>

            </tr>

        <?php   while($row = mysql_fetch_assoc($query)){ ?>



            <tr>
                <td align='center'><input type='text' name='title[]' id='title' value= "<? echo $row['title']; ?>" ></td>
                <td align='center'><input type='text' name='fname[]' id='fname' value= "<? echo $row['fname']; ?>" ></td>
                <td align='center'><input type='text' name='lname[]' id='lname' value= "<? echo $row['lname']; ?>" ></td>
                <td align='center'><input type='text' name='mastitle[]' id='mastitle'  value= "<? echo $row['mstitle']; ?>"></td>
                <td align='center'><input type='text' name='file[]' id='file' value="<? echo $row['msfile']; ?> "></td>
                <td align='center'><input type='text' name='editoremail[]' id='editoremail' ></td>
                <td align="center"><inputtype="checkbox" name="checkbox[]" id="checkbox" value="<? echo $row['id']; ?>" /></td>

            </tr>               
      <?php } ?>

            </table>
            <div class='cleaner h10'></div>
            <input type='submit' name='send' id='send' value='Send'>
        </form>

php 代码:

 <?php
        // Check if button name "Submit" is active, do this 
        if(isset($_POST['send']) && $_POST['send'] == 'Send')
         {


            for($i=0;$i<=$_SESSION["count"];$i++)
            {
                if(isset($_REQUEST['checkbox'][$i]))
                    {
                        $set_id = $_REQUEST['checkbox'][$i];

                        $sql_new=mysql_query(" UPDATE `article` SET  `editor`='SENT'  WHERE `id`='$set_id' ", $connection);
                    echo $i;
                    echo "<br>" .   $article=$_REQUEST['file'][$i];
                    echo "<br>" .   $TOmail=$_REQUEST['editoremail'][$i];
                    echo "<br>" .   $manutitle=$_REQUEST['mastitle'][$i];

                    }   
            }
        }
    ?>

【问题讨论】:

  • 您的复选框和输入字段未在 php 代码中正确映射。复选框[1] 并不总是指代倾斜[1]、fname[1]...等。使用复选框名称,如 name="checkbox[ echo $loop_counter; ?>]" 其中 $loop_counter 的值为 0, 1, 2...
  • 如果我这样做,我应该如何检查哪一个是我选择的那个,我应该在 mysql 查询代码中放入 { WHERE id='$set_id'} 什么?
  • 你只需要改变你这行代码 $set_id = $_REQUEST['checkbox'][$i];如果你告诉我 $_SESSION["count"] 的业务逻辑,我可以这样做。
  • $_SESSION["count"] 用于计算可用行数,我已将其添加到代码顶部。
  • @Fred-ii- SESSION_START 在我的页面顶部,我没有在这里显示。

标签: php html mysql variables checkbox


【解决方案1】:
<?php
$row_counter = 0;
while($row = mysql_fetch_assoc($query)){ ?>
    <tr>
        <td align='center'><input type='text' name='title[]' id='title' value= "<? echo $row['title']; ?>" ></td>
        <td align='center'><input type='text' name='fname[]' id='fname' value= "<? echo $row['fname']; ?>" ></td>
        <td align='center'><input type='text' name='lname[]' id='lname' value= "<? echo $row['lname']; ?>" ></td>
        <td align='center'><input type='text' name='mastitle[]' id='mastitle'  value= "<? echo $row['mstitle']; ?>"></td>
        <td align='center'><input type='text' name='file[]' id='file' value="<? echo $row['msfile']; ?> "></td>
        <td align='center'><input type='text' name='editoremail[]' id='editoremail' ></td>
        <td align="center"><inputtype="checkbox" name="checkbox[]" id="checkbox" value="<? echo $row['id'].'_'.$row_counter++; ?>" /></td>
    </tr>                
 <?php } ?>

业务逻辑代码...

            $a_set_id = explode('_', $_REQUEST['checkbox'][$i]);
            $set_id   = $a_set_id[0];
            $row_no   = $a_set_id[1];

            $sql_new=mysql_query(" UPDATE `article` SET  `editor`='SENT'  WHERE `id`='$set_id' ", $connection);
            echo $i;
            echo "<br>" .   $article=$_REQUEST['file'][$row_no];
            echo "<br>" .   $TOmail=$_REQUEST['editoremail'][$row_no];
            echo "<br>" .   $manutitle=$_REQUEST['mastitle'][$row_no];

【讨论】:

  • 提前谢谢,你能解释一下你做了什么吗?
  • 现在复选框存储两个信息,db_table_row_id 和 form_table_row_counter,由“_”分隔。是否有效..
  • 我遇到了您修复的代码的另一个问题,如果有一行或记录您的代码将不起作用,并且 $article 和 $TOmail & $manutitle 变量值为空。但是如果记录数超过一个,它会起作用,确切的问题是你的代码不会计算第一行,它会在第一行之后开始计算记录,我该怎么办?
  • 在这种情况下 $row_no 的值是什么)......它应该是“0”,在这种情况下 $_REQUEST 具有什么样的值。它不像 $_REQUEST['file']=array('value') ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多