0

我在这里看到了一些例子,但他们都没有真正做我想要的。根据我从中提取的数据库中的捆数,我最多可以有 100 行。我有后端工作和所有,但问题是当我希望它们显示为每个捆数的新行时,行只是水平跨越(新行在每个出口重量之后开始)。解决此问题的最佳/正确方法是什么?我正在尝试使用 PHP 来完成所有这些逻辑。如果我只是在我的 PHP 中为每个 tr 标签包装 td 标签,那么我只会得到一个长的垂直显示数据......我被卡住了。谢谢!

在此处输入图像描述

你可以看到 html,我的 JS 和 PHP 是(单独的文件):

HTML

<table id="table" align="center">
            <thead>
                <tr>
                    <th>Bale #</th>
                    <th>Cable #</th>
                    <th>Shipping #</th>
                    <th>GP Cable Type</th>
                    <th>Exit Weight</th>
                </tr>
            </thead>
            <tbody id="bale_data">
            </tbody>
        </table>

JS

function baleData() {
 $.ajax({
    url: './php/baleData.php',
    success: function(data) {
        $('#bale_data').append(data);
    },
    error: function(xrs, thrownError, xhr) {
        alert("Ajax Error" + xrs.status + thrownError + xhr.status);
    }
});
};

PHP

//Create array
$column = array("bale_no","cable_no","shipment_no","gp_cable_type","exit_weight");

//Define JSON array
$array = array();

//Run SQL for each array value
for ($i=1; $i<=100; $i++) {
    foreach ($column as $value) {
        $sql="SELECT $value FROM bundle_lanes WHERE bale_no='$i'";

        $result = mysql_query($sql) or die ('Error'.mysql_error());

        while ($data = mysql_fetch_array($result)) {
            print "<td><input value=\"".$data[$value]."\"></td>";
        }
    }
}

//Return array
print json_encode($array);
4

3 回答 3

2

您拨打的电话比您真正需要的要多,而且您没有在任何地方创建新行。每个 $i 只有 1 个查询,但您也可以通过将查询限制为 100 来减少这种情况。

$column = array("bale_no","cable_no","shipment_no","gp_cable_type","exit_weight");

//Define JSON array
$array = array();

//Run SQL for each array value
for ($i=1; $i<=100; $i++) {
        $sql="SELECT ".implode(',',$column)." FROM bundle_lanes WHERE bale_no='$i'";
        $result = mysql_query($sql) or die ('Error'.mysql_error());
        while ($data = mysql_fetch_array($result)) {
            print "<tr>";
            foreach($column as $value)
                print "<td><input value=\"".$data[$value]."\"></td>";
            print "</tr>";
        }
}

如果您想摆脱该 foreach,请将您的查询更改为

$sql="SELECT ".implode(',',$column)." FROM bundle_lanes LIMIT 100";
于 2013-06-06T19:41:36.363 回答
1

在这部分代码中:

print "<td><input value=\"".$data[$value]."\"></td>";

您正在创建表的表数据部分。您需要为 SQL 的每个结果创建一行,并为每个对象数据tr附加几行。td

while ($data = mysql_fetch_array($result)) {
  print "<tr>";
  print "<td><input value=\"".$result[$attribute1]."\"></td>";
  print "<td><input value=\"".$result[$attribute2]."\"></td>";
  print "<td><input value=\"".$result[$attribute3]."\"></td>";
  // etc...
  print "</tr>";
}

PS:上面的代码是你应该如何做的一个例子。您必须使其适应您的环境。

于 2013-06-06T19:42:15.947 回答
0

由于您有 5 个列,因此您可以添加一个计数器来计算您添加的每个单元格,并在每 5 个单元格后重置计数器并创建一个新行。这是一个例子:

$counter = 0;

//Run SQL for each array value
for ($i=1; $i<=100; $i++) {
        foreach ($column as $value) {
                if($counter == 0){
                print "<tr>"; //Create the new row
            }
                $sql="SELECT $value FROM bundle_lanes WHERE bale_no='$i'";

                    $result = mysql_query($sql) or die ('Error'.mysql_error());

                while ($data = mysql_fetch_array($result)) {
                print "<td><input value=\"".$data[$value]."\"></td>";
                $counter++; //After we added a new cell we update the counter
                }
            if($counter == 5){ //After each 5 added cells we end the new row and reset the counter
                print "</tr>";
                $counter = 0;
            }
        }
}
于 2013-06-06T19:44:53.150 回答