选择并回显所有表(无论它是什么)

时间:2012-12-27 17:43:44

标签: php mysql

我有一个表我可以选择并回显列(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>

3 个答案:

答案 0 :(得分:2)

你要做的是为穷人提供ORM。我建议你阅读INFORMATION_SCHEMA。它是ANSI标准,可以为您提供有关数据库和表的元信息。您可以从那里动态选择列名称,许多现代RDMS都支持它。

另一种选择是调查Doctrine,因为它会为您提供此功能。

答案 1 :(得分:1)

首先,就像人们评论过的那样,你应该使用一个新的mysql库,比如mysqli。

您可以使用mysql_fetch_assoc($ result)来获取关联(column =&gt; 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));

这样,如果数据库列发生更改或重命名等,您的表格将自动适应这些更改。

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

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