2012-12-27 30 views
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> 
+3

[**請注意,不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – PeeHaa

+0

首先,請參閱http://php.net/manual/en/function.mysql-field-name.php。 mysql_ *已被棄用。其次,回答你的問題:你可以簡單地遍歷字段名:'for($ i = 0,$ field_name = mysql_field_name($ result,$ i);($ field_name = mysql_field_name($ result,$ i))!= = false; ++ $ i){用field_name ...做些什麼}' – davak

回答

2

你試圖做的是提供一個窮人的ORM。我建議你閱讀INFORMATION_SCHEMA。這是一個ANSI標準,可以爲您提供有關您的數據庫和表格的元信息。您可以從那裏選擇列名,許多現代RDMS都支持它。

另一種選擇是調查Doctrine,因爲它會爲您提供此功能。

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

兩者的那些應該打印出適當列標題的表格,以便爲您提供任何大小的結果集。

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

這樣,如果DB列更改或重命名或其他任何,您的表將自動適應這些更改。

相關問題