【问题标题】:Populating html table with database data through user selection in php通过 php 中的用户选择使用数据库数据填充 html 表
【发布时间】:2013-04-05 00:40:49
【问题描述】:

所以,我有一个复选框,允许用户选择他们想要查看的列。因此,如果用户只想选择 2 列(例如,TicketID 和 Category),它将只显示 ID 的数据和票的类别。到目前为止,这是我所拥有的:

表格:

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <ul>
        <li><input type="checkbox" name="filter[]" value="TicketID" >Ticket ID</li>
        <li><input type="checkbox" name="filter[]" value="Category" />Category</li>
        <li><input type="checkbox" name="filter[]" value="Priority" />Priority</li>
        <li><input type="checkbox" name="filter[]" value="Status" />Status</li>
        <li><input type="checkbox" name="filter[]" value="InitialDescription" />Initial Description</li>
        <li><input type="checkbox" name="filter[]" value="SubmittedDate" />Submitted Date</li>
        <li><input type="checkbox" name="filter[]" value="Description" />Status Description</li>
        <input type="submit" value="Refresh Filters">
    </ul>
</form>
</td>
<td>
    <?php 


    viewTicketTable($_SESSION['userID'],$_POST['filter']);

        ?>

viewticketTable函数:

function viewTicketTable($userID,$columns) {
/* Accepts $userID which will identify the tickets related with the user and
$columns which will filter only the columns that are required and outputs the
table with the columns passed through. */


/* 
$columns_array = explode(',', $columns);

foreach($array as $array){
    echo $array;
} */


foreach($columns as $filter) {
    $filter = $filter  . ',' ;

}

$filter = substr($filter, 0, -1);   


$query = mysql_query("
SELECT $filter
FROM Ticket
LEFT JOIN TicketHistory
ON Ticket.TicketID = TicketHistory.TicketID
WHERE CustomerID = $userID;
");



/* Creation of the table */
echo '
    <table border="1">
        <thead>
            <tr>';
            foreach($columns as $tableHeader) {
                $tableHeader = '<th scope="col">' . $tableHeader  . '</th>' ;
                echo $tableHeader;
            }
echo '
            </tr>
        </thead>
        <tbody>
';

/*Looping through the script to print out all the information.*/
while ($row = mysql_fetch_array($query) or die(mysql_error())) {
    echo '
            <tr>';
                foreach($columns as $field) {
                    echo '<td>' . $row[$field] . '</td>';
                }
            echo '</tr>
    ';
}


echo '  </tbody>
    </table>';

}

问题在于 while 循环。 row[$field] 仅填充最后一列,而不是填充所有列。有什么帮助吗?

【问题讨论】:

  • 首先;你需要做一些事情来强化你的查询以防止 SQL 注入。现在,任何有足够能力使用浏览器检查和编辑您的页面的人都可以将其中一个过滤器输入值更改为恶意内容。
  • 现在我只是想让它工作......但谢谢你的提醒 :)

标签: php html mysql filter


【解决方案1】:

您的 SQL 语法有错误 - 在 " 关闭之前您有一个额外的 ;

此外,您应该使用mysql_fetch_assoc 代替mysql_fetch_array,因为在不指定方法的情况下使用mysql_fetch_array 将返回一个双精度数组。

【讨论】:

  • 我试过这个:function test($userID, $columns) { foreach($columns as $filter) { $filter = $filter . ',' ; } $filter = substr($filter, 0, -1); $query = mysql_query(" SELECT $filter FROM Ticket LEFT JOIN TicketHistory ON Ticket.TicketID = TicketHistory.TicketID WHERE CustomerID = $userID "); $row = mysql_fetch_assoc($query) or die(mysql_error()); print_r($row); } 它返回:Array ( [Priority] => 3 ) 是不是 sql 错误?
【解决方案2】:

我修好了。如果有人有同样的问题,我会发布答案。

问题已解决:

    $filter = "";
foreach($columns as $c) {
    $filter = $filter . $c  . ',' ;

}

$filter = substr($filter, 0, -1);   

循环没有将值分配给 $filter 变量,因此我必须创建一个外部变量。 foreach 循环中还有另一个错误,我必须用 if 语句修复(不是最好的方法,但它有效):

foreach($columns as $field) {
if ($field == 'Ticket.TicketID'){
    $field = 'TicketID';
}
echo '<td>' . $row[$field] . '</td>';
}

$row 数组中不接受 Ticket.TicketID,因此我不得不将其更改为 TicketID

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多