在行中的最后一个单元格后动态插入新表行

时间:2013-06-06 19:31:32

标签: php

我在这里看到了一些例子,但没有一个真正做我想做的事。根据我提取的数据库中的包号,我最多可以有100行。我有后端工作和所有,但问题是当我希望它们显示为每个打包编号的新行时(每个出口权重后新行开始),行横跨水平。什么是最好/正确的方法?我试图用PHP做所有这些逻辑。如果我只用tr标签将td标签包装在我的PHP中,那么我只是得到一个很长的垂直数据显示...我被卡住了。谢谢!

enter image description here

你可以看到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);

3 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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>";
}

P.S。:上面的代码是你应该如何做的一个例子。你必须根据自己的情况调整它。

答案 2 :(得分: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;
            }
        }
}