0

使用 php/mysql 处理存储日志应用程序,我遇到了 SQL 查询问题,该查询应该将整个事情联系在一起。

基本上,该程序允许用户输入具有各种字段(id#、项目名称、客户名称、测量单位等)的项目。创建项目后,存储日志页面(代码如下所示)为每个项目显示一个单独的 HTML 表。每个表格的底部都有一个表单,允许用户提交存储输入/输出事务。提交时,事务被添加到数据库,然后程序重定向到存储日志页面。

现在,我要做的是设计日志页面,以便每个事务都显示在它对应的表中。因此,如果我有一个 ID 号为“15”的项目,我希望项目 15 的 HTML 表在该表的自己的行中显示该项目的每个事务。但是,如果移动 ID 为“14”,我希望事务仅显示在项目 #14 的表中。

这是我的代码:

<?php
 $script = '<script> 
 $(document).ready(function(){
    $(".datepicker").datepicker();
        }); </script>' ; 
        $title = "View/Edit Storage - " ;
        include('inc/header.php');   
        $projects = mysqli_query($con, "SELECT projectname, moveid, customername, PPU, UoM FROM newproject");
        $transactions = mysqli_query($con, "SELECT * FROM newtransaction as t where $tranresults[moveid] == t.moveid"); 

while ($results = mysqli_fetch_array($projects, MYSQLI_ASSOC)) {
    echo "<table align='center'>";
        echo "<th colspan='7'>";
            echo $results[moveid] . " -- " . $results[projectname] . " c/o " . $results[customername] . " -- " . "$" . $results[PPU] . "/" . $results[UoM];
        echo "</th>";
        echo "<tr>";
            echo "<td>Move ID</td>";
            echo "<td>In/Out</td>";
            echo "<td>Number of Units</td>";
            echo "<td>Date</td>";
            echo "<td>RR/DT#</td>";
        echo "</tr>";

while ($tranresults = mysqli_fetch_array($transactions, MYSQLI_ASSOC)){
    echo "<tr>";
        echo "<td>$tranresults[moveid]</td>";
        echo "<td>$tranresults[IORO]</td>";
        echo "<td>$tranresults[units]</td>";
        echo "<td>$tranresults[transdate]</td>";
        echo "<td>$tranresults[refno]</td>";
    echo "</tr>";
}?>
                    <tr>
                    <form action="transadded.php" name='addnewtransaction' method="POST">
                        <td><input type="text" name="moveID" size="20" value="<?php echo $results[moveid]; ?>" readonly> </td>
                        <td><select id="inoutselect" name="inorout">
                                <option value="Select">Select</option>
                                <option value="Storage In">Storage In</option>
                                <option value="Storage Out">Storage Out</option>
                            </select> </td>
                        <td><input type="text" name="numberofunits" size="20"></td>
                        <td><input type="text" name="dateoftransaction" size="20" class="datepicker"></td>
                        <td><input type="text" name="rrdt" size="20"> </td>
                        <td><input type="submit" value="Add" id="logsubmit"></td>
                    </form>
                    </table>
                    <br /><br />
    <?php   };?>

免责声明:我知道代码目前容易受到 SQL 注入的影响,一旦基本功能完成,我将修复它。

4

2 回答 2

0

首先更改此错误:(示例)

...$tranresults[moveid] == t.moveid...

...".$tranresults['moveid']." = t.moveid... // equal sign / single quotes 

然后''输入所有键名(在您的情况下):

例子:

...$results[moveid]...

...$results['moveid']... // with single quotes

并且当您将键名或变量放入字符串中时,请引用以下内容:

例子:

echo "<td>$tranresults[moveid]</td>";

echo "<td>".$tranresults['moveid']."</td>";
于 2013-09-12T01:04:31.780 回答
0

您问题中的错误是因为$transactions返回FALSE而不是任何结果。这是因为您正在构建的 SQL 中存在语法错误。首先,您不能只将数组访问转储到字符串中——您必须断开字符串或使用花括号来指示您希望插入该变量。其次,您应该在关联数组中的键名周围加上引号 - PHP 会找出您想要的内容,但仍会在日志中生成 E_WARNING。第三,您使用的是无效 SQL 的双等号。

这是您的原始行:

$transactions = mysqli_query($con, "SELECT * FROM newtransaction as t where $tranresults[moveid] == t.moveid");

它应该是:

$transactions = mysqli_query($con, "SELECT * FROM newtransaction as t where {$tranresults['moveid']} = t.moveid");

_编辑_

从评论中我们发现第 9 行引用了一个直到第 24 行才设置的变量,并且无论如何都是错误的变量。这是代码的另一个破解,移动了第二个 SQL 查询并清理了一些数组访问。

$projects = mysqli_query($con, "SELECT projectname, moveid, customername, PPU, UoM FROM newproject");

while ($results = mysqli_fetch_array($projects, MYSQLI_ASSOC)) {
    echo "<table align='center'>";
    echo "<th colspan='7'>";
    echo $results['moveid'] . " -- " . $results['projectname'] . " c/o " . $results['customername'] . " -- " . "$" . $results['PPU'] . "/" . $results['UoM'];
    echo "</th>";
    echo "<tr>";
    echo "<td>Move ID</td>";
    echo "<td>In/Out</td>";
    echo "<td>Number of Units</td>";
    echo "<td>Date</td>";
    echo "<td>RR/DT#</td>";
    echo "</tr>";
    $transactions = mysqli_query($con, "SELECT * FROM newtransaction as t where {$results['moveid']} = t.moveid"); 
    while ($tranresults = mysqli_fetch_array($transactions, MYSQLI_ASSOC)){
        echo "<tr>";
        echo "<td>{$tranresults['moveid']}</td>";
        echo "<td>{$tranresults['IORO']}</td>";
        echo "<td>{$tranresults['units']}</td>";
        echo "<td>{$tranresults['transdate']}</td>";
        echo "<td>{$tranresults['refno']}</td>";
        echo "</tr>";
    }
?>
于 2013-09-12T01:10:36.740 回答