【问题标题】:Retrieve multiple checkbox and display other related information from database in a table检索多个复选框并在表格中显示数据库中的其他相关信息
【发布时间】:2014-03-16 09:54:09
【问题描述】:

我得到了从数据库中打印出来的复选框列表。如果用户制作多个复选框,我可以从数据库中检索数据并将其显示在表中,但我无法从数据库中检索其他信息并将其显示在同一个表中。

这是我的代码:

<table border='1'>

<tr>
<th>TITLE</th>
<th>PERCENTAGE RESULT</th>
</tr>

<?php 

if(isset ($_POST["submit1"]))
{
    $selectedcheckbox = $_POST["selectedcheck"];

    $query = "SELECT * FROM compareresult where subject=$selectedcheckbox";
   $sql_query = mysql_query($query) or die('Error 3 :'.mysql_error());
    while($data = mysql_fetch_array($sql_query,MYSQL_ASSOC)){

      $result=$data['result'];
    }

    foreach($selectedcheckbox as $title)
    {

       echo "<tr>";
        echo "<td>".$title."</td>";
       echo "<td>".$result."</td>";
    }           
        echo "</tr>";

}
?>

我想在用户选择多个复选框后显示结果,所以我写道:

 echo $result in table

以便结果可以显示在所选标题旁边的表格中,但我收到错误:

第 31 行 C:\xampp\htdocs\sam\c.php 中的数组到字符串转换错误 3:'where 子句'中的未知列 'Array'

【问题讨论】:

  • 我可以看到你已经有一个非常接近的声明(一个括号)你能把你得到的错误写下来吗,因为这样我们就会对你开枪。另外,返回 $selectedcheckbox 的值是什么?它只是一个数字作为ID,还是一个名字?我也可以告诉你它会返回一个语句,因为你不循环你的查询。所以你的整个帖子数组将被输入到查询中,所以它找不到你的查询,因此可能是错误
  • 您的问题非常广泛。阅读有关该主题的书并遵循一些教程可能会更好。我还建议您考虑使用 PDO oder Mysli 而不是 Mysql。
  • @Dorvalla.. $selectedcheckbox 来自其他 page.php 发布多个选中复选框的值.. 它来自此代码..
  • @Dorvalla 这是错误...第 31 行 C:\xampp\htdocs\sam\c.php 中的数组到字符串转换错误 3:“where 子句”中的未知列“数组”

标签: php html mysql sql


【解决方案1】:

我目前不在环境中测试您的问题,我这样做是出于我的想法,但请尝试以下类似的方法。

if(isset($_POST['submit1'])){
    $checkbox = isset($_POST['selectedcheck']) ? $_POST['selectedcheck'] : array();
    foreach($checkbox as $title){

        $query = "SELECT * FROM compareresult where subject='".$title."'";
        $result=mysql_query($query);  // <-- to avoid SQL injections, please change your method from mysql_query to mysqli_query (use the mysqli functions instead of mysql) 
        while($data = mysql_fetch_array($result)){
             $result=$data['result'];

             echo "<tr>";
             echo "<td>".$title."</td>";
             echo "<td>".$result."</td>";
             echo "</tr>
             }
        } 
   }

它首先检查您的复选框是否被选中,如果它们被选中,则将其放入数组中。 然后它运行 foreach 语句,将复选框值设置为标题。如果查询的标题在数据库中,它将在那里运行,如果是,则通过 while 循环将其吐出。冲洗并重复直到完成。

编辑

我看到您将 open tablerow 语句放在 foreach 中,但在外面将其关闭。所以要么你想把它全部打印在一行上,要么是一个错误?如果它在一行上,请确保在 while 循环之前打开表行并在之后结束它,否则就像我吐出来一样。

【讨论】:

  • 很好的答案,但最好不要在 OP 代码中复制 SQL 注入错误。我会修复它(因为它是一行)或者至少在你的描述中指出它。
  • @halfer 更新为指向 mysql / mysqli 函数的指针。我同意你的说法,pdo 或 mysqli 更安全。
  • 我现在只使用$escapedTitle = mysql_real_escape_string($title),但是是的,参数化会更好。
猜你喜欢
  • 2014-05-20
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多