我有一个表我可以选择并回显列(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>
答案 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))
对于您提供的任何大小的结果集,这两个表都应打印出具有适当列标题的表格。