2013-07-28 27 views
0

我有下面的PHP/HTML,使用while循環從global_settings更新行從形式文本框由while循環填充

<?php 
$global_sql2="SELECT name, field, value FROM global_settings"; 
$global_rs2=mysql_query($global_sql2,$conn) or die(mysql_error()); 
while($global_result2=mysql_fetch_assoc($global_rs2)) 
{ 
    echo '<tr> 
       <td><strong>'.$global_result2["name"].'</strong></td> 
       <td><input type="text" name="'.$global_result2["value"].'" size="50" value="'.$global_result2["value"].'" /></td> 
      </tr>'; 
} 
?> 

當表單提交填充表單域,每行在數據庫中需要使用在文本字段中鍵入的值進行更新。

例如,在數據庫中有與行以下:

name = Company Name 
field = company_name 
value = Company ABC 

的張貼的值設置爲XYZ公司

所以SQL應該說:

`UPDATE tablename set value = 'Company XYZ' where field = 'company_name'` 

但它沒有,說:

UPDATE tablename set value = 'Company XYZ' where field = 'company_name' 

    <?php 
$global_sql3="SELECT name, field, value FROM global_settings"; 
$global_rs3=mysql_query($global_sql3,$conn) or die(mysql_error()); 
while($global_result3=mysql_fetch_assoc($global_rs3)) 
{ 
    $sql="UPDATE global_settings set value = '".$_POST[$global_result3["field"]]."' where field = '".$_POST[$global_result3["value"]]."' "; 
    echo '<br><br>'.$sql; 
    $rs=mysql_query($sql,$conn) or die(mysql_error()); 
    echo '<h3>Successfully Updated</h3>'; 
} 
?> 

的表稱爲global_settings有那麼基本上,名和字段的字段千萬不要被

global_settingsvalue場沒有更新的當值用戶只需值字段更改列(name, field, value)

文本字段被改變 - 林不知道是什麼問題

+0

而我們又來了。 @charlie:請保留這個問題,並重新編輯它,如果有新的方面。但請不要刪除並重新發布一次又一次。 –

+0

這裏有什麼問題嗎? – Strawberry

+0

您無法以這種方式指定要更新的列。 – Strawberry

回答

0

就像我昨天說,在這個問題上的另一篇文章:

你必須改變這一點:

<td><input type="text" name="'.$global_result2["value"].'" size="50" value="'.$global_result2["value"].'" /></td> 

分成這個

<td><input type="text" name="'.$global_result2["field"].'" size="50" value="'.$global_result2["value"].'" /></td> 

否則,您無法通過$_POST[$global_result3["field"]]訪問它。

您也可以改變這一行:

$sql="UPDATE global_settings set value = '".$_POST[$global_result3["field"]]."' where field = '".$_POST[$global_result3["value"]]."' "; 

到這一點:

$sql="UPDATE global_settings set value = '".$_POST[$global_result3["field"]]."' where field = '".$global_result3["field"]."' "; 

就像我在以前的貼子說:

切換到mysqli_ *功能。 ext/mysql已棄用。在將它們插入到sql查詢中之前,總是將它們轉義出來!

0

有在你的代碼有點問題

變化

<td><input type="text" name="'.$global_result2["value"].'" size="50"

通過

`<td><input type="text" name="'.$global_result2["field"].'" size="50" ` 
+0

你正在調用 –

+0

,但它是關於字段不值$ global_result2 [「值」] –

+0

我得到這個SQL時,我改變文本字段的名稱,就像那樣:UPDATE global_settings set value ='eee'where field = 'eee' – charlie

-1

你只更新值列,

UPDATE tablename set value = 'Company XYZ' where field = 'company_name' 

要更新等欄目,您必須添加要在要更新的列聲明。

UPDATE tablename set value = 'Company XYZ', name = 'name', field = 'field' where field = 'company_name' 
+0

多數民衆贊成多數民衆贊成在什麼 – charlie

+0

這根本不會幫助你...因爲你說只有值所以爲什麼要更新其他兩個? –

+0

@TobiasKun:我理解你的評論,但即使這是一個奇怪的要求,我也會回答他的要求,在閱讀他的問題時我也在摸一下頭髮。 「所以基本上,姓名和領域永遠不會被用戶改變,只是價值領域」。解密時間。 – KarelG

0
<td><input type="text" name="'.$global_result2["value"].'" ... 
               ^
                | 
                +-- problem is here 

將其更改爲

<td><input type="text" name="'.$global_result2["name"].'" ... 

更新

假設你有一個表像這樣:

+------------------+-------------------+-----------------+ 
|  name   |  field  |  value  | 
+------------------+-------------------+-----------------+ 
| Company Name | company_name |  XYZ  | 
+------------------+-------------------+-----------------+ 

你可以得到你的形式顯示信息升IKE在此

while(...) { 
    echo '<tr><td><strong>' . $row['name'] . '</strong><input name="' . $row['field'] . '" value="' . $row['value'] . '"/></td></tr>'; 
} 

然後,您應該撰寫UPDATE查詢,像這樣:

foreach($_POST as $f => $v) { 
    $query = "UPDATE `table` SET `value` = '$v' WHERE `field` = '$f'"; 
} 
+0

我得到這個SQL:UPDATE global_settings set value =''where field ='' – charlie

+0

@charlie然後你沒有'name'字段的值,這意味着你的數據已經損壞。 –