0

我有一个表,我可以选择并回显列 (th) 和字段数据 (td) 的名称。但用户可以添加和删除列。我如何编写更灵活的代码来适应用户的变化?我的意思是能够在不知道所有字段的情况下拥有整个表格。

<?php  
$sql = "SELECT * from eee";
$result = mysql_query($sql,$con);
$id = mysql_field_name($result, 0);
$a = mysql_field_name($result, 1);
$b = mysql_field_name($result, 2);
$c = mysql_field_name($result, 3);
?>

<tr>
<th><input class="gris" type="text" name="<?php echo $id ?>" value="<?php echo $id ?>"/></th>
<th><input class="gris" type="text" name="<?php echo $a ?>" value="<?php echo $a ?>"/></th>
<th><input class="gris" type="text" name="<?php echo $b ?>" value="<?php echo $b ?>"/></th>
<th><input class="gris" type="text" name="<?php echo $c ?>" value="<?php echo $c ?>"/></th>
</tr>

<?php
$result = mysql_query("SELECT * FROM eee");
while($row = mysql_fetch_array($result))  {
?>
<tr>
<td> <input class="blanc" type="text" name="num" value="<?php echo $row['id']?>"/> </td>
<td><input class="blanc" type="text" name="a" value="<?php echo $row['a']?>"/></td>
<td><input class="blanc" type="text" name="b" value="<?php echo $row['b']?>"/></td>
<td><input class="blanc" type="text" name="c" value="<?php echo $row['c']?>"/></td>
</tr>

<?php } ?>

</table>
4

3 回答 3

2

What you are attempting to do is provide for a poor man's ORM. I would suggest to you to read up on INFORMATION_SCHEMA. It is an ANSI standard that can provide you meta information about your databases and tables. You can select column names on the fly from there, and many modern RDMS's support it.

Another option would be to investigate Doctrine as it will provide this functionality for you.

于 2012-12-27T17:58:42.913 回答
1

首先,就像人们评论的那样,您应该使用新的 mysql 库,例如 mysqli。

您可以使用 mysql_fetch_assoc($result) 来获取关联( column => value )数组。然后你可以循环遍历它。

$result = mysqli_query($query);

// Make the table headers
$assoc_data = mysqli_fetch_assoc($result);
echo "<tr>";
foreach ($assoc_data as $column => $data) {
    echo "<th>$column<th>";
}
echo "</tr>";

// Fill in the columns with the data from the DB
do {
    foreach($assoc_data as $column => $data) {
        echo "<td><input name=\"$column\" value=\"$data\"></td>";
    }
} while ($assoc_data = mysqli_fetch_assoc($result));

这样,如果数据库列发生更改或重命名或其他任何情况,您的表将自动调整以适应这些更改。

于 2012-12-27T18:04:20.223 回答
0

假设$rs是一个包含结果集的关联数组的数组,就像您可以从大多数数据库接口获得的一样。[尤其是那些不使用 mysql_* 函数的函数,因为它们很快就会被弃用]

<?php

if( count($rs) == 0 ) { die('no values returned'); }

foreach( $rs[0] as $key => $value ) {
    printf('<th>%s</th>', $key);
}

foreach( $rs as $row ) {
    foreach($row as $value) {
        printf('<td>%s</td>', $value);
    }
}

或者,如果您只是必须继续使用陈旧的旧功能......

<?php

$row = mysql_fetch_array($result) or die('no values returned');

foreach( $row as $key => $value ) {
    printf('<th>%s</th>', $key);
}

do {
    foreach($row as $value) {
        printf('<td>%s</td>', $value);
    }
} while($row = mysql_fetch_array($result))

对于您提供的任何大小的结果集,这两者都应该打印出带有适当列标题的表格。

于 2012-12-27T18:01:06.567 回答