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

あなたがやろうとしているのは、貧乏人のORMを提供することです。INFORMATION_SCHEMAを読むことをお勧めします。これは、データベースとテーブルに関するメタ情報を提供できる ANSI 標準です。そこからその場で列名を選択でき、多くの最新の RDMS がそれをサポートしています。

別のオプションは、この機能を提供するDoctrineを調査することです。

于 2012-12-27T17:58:42.913 に答える
1

まず第一に、人々がコメントしたように、mysqli などの新しい mysql ライブラリを使用する必要があります。

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));

このようにして、DB 列が変更されたり、名前が変更されたりした場合、テーブルはそれらの変更に自動的に調整されます。

于 2012-12-27T18:04:20.223 に答える
0

Let's say $rs is an array of associative arrays comprising the result set, like you can get from most database interfaces. [particularly those that don't use mysql_* functions since they're being deprecated soon]

<?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);
    }
}

Or if you simply must keep using creaky old functions...

<?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))

Both of those should print out tables with proper column headers for any size of result set you feed it.

于 2012-12-27T18:01:06.567 に答える