2012-03-03 52 views
0

我有一個表單使用php提交多個值。代碼如下:使用foreach循環將數據以數組的形式保存到mysql數據庫

echo "<form action='?ud=".$ud."' method='post'>Name: <input type='text' name='fname' />"; 
$resultw = mysql_query("SELECT * FROM options where userid='$ud' ORDER BY priority ASC"); 

while($row = mysql_fetch_array($resultw)) 
    { 
    echo " 
<input type='hidden' name='widgetid[]' value='".$row['widgetid']."' /> 
    <span id='".$row['widgetid']."' style='color:white;font-size:13px;'>".$row['items'] . "</span><br></div><div style='' class='portlet_content'> 
    Enabled <input title='Enabled/Disabled' type='checkbox' value='enable[]' name='enable[]' ".$checked." id='checkbox".$row['id']."' /> 
    Height <input title='set height' name='height[]' value='".$row['height']."' type='text' name='textfield' id='textfield".$row['id']."' /> 
"; 
    } 

    echo '<input type="submit" /></form>';?> 

正如你可以看到它的一個循環,它從數據庫中獲取值並回顯一個表單。我儘可能簡化它有更多的輸入框,但我刪除了它們並刪除了樣式以使其更易於閱讀。當我點擊提交時,我希望能夠通過循環將所有這些值更新到數據庫。 我嘗試過foreach並掙扎。任何建議

回答

2

首先,您的代碼有一個安全性錯誤,因爲您直接將變量放入SQL查詢中。這允許SQL注入。相反,在插入查詢之前,您應該將變量$ ud通過mysql_real_escape_string放入,或者更好地使用MySQLi/PDO和準備好的語句。

您是否檢查過窗體是否正確回顯到頁面上?查看源代碼(或使用Firefox和Firebug),仔細檢查它是否已正確插入。

然後,您將需要有一個代碼塊,它在接收到POST請求時啓動。該代碼將爲每個變量獲取一個數組,例如

$widget_ids = $_POST['widgetid']; #this will be an array 
$enable = $_POST['enable']; 
$height = $_POST['height']; 

您可以爲每個您發佈的變量做到這一點,然後就循環輪部件IDS做的每一個例如更新查詢

$i = -1; 
foreach($widget_ids as $widget_id) { 
     $row_enable = $enable[++$i]; 
     $row_height = $height[$i]; 
     //DO THIS FOR THE REST AND THEN YOUR UPDATE QUERY 
} 

只是爲了迂腐,您的HTML也有點混亂和不正確。對於表單,我會爲每個標籤使用標籤元素,並且不要使用br的換行。你也有一個沒有開頭的div,然後是一個沒有結局的div。

+0

感謝您的幫助,這不是我實際的代碼,我刪除了一堆東西,使它更簡單對不起,我離開閉幕div標籤沒有開幕one.the價值被張貼我echo'd他們的作品。它是$高度[$ i]還是$高度[++ $ i]? – cppit 2012-03-03 13:25:28

+1

只是$高度[$我]。您只需要每行增加$ i一次 - 所以我只是在第一次讀取時預先增加。 – christophmccann 2012-03-03 13:31:39