我有一個很難包裝我的頭周圍的foreach
結構。我發現了很多當然的例子,但我似乎無法使它們適應我的需求。PHP foreach結構混亂
請考慮這個工作的例子,我有:
我收集兩個日期在HTML表單:
<form method="post">
<legend>Minutes and Records</legend>
<label for="FirstAGMDate">First AGM Date (only if known)</label>
<input type="text" name="FirstAGMDate" value="2014-01-01" />
<label for="MinutesInspectedFromDate">Minutes Inspected From Date</label>
<input type="text" name="MinutesInspectedFromDate" value="2014-01-02" />
<input type="submit" name="submit" />
</form>
在提交的值被推到MySQL數據庫與PDO準備語句:
if (isset($_POST['submit'])) {
$sql = "UPDATE jobsinglevalues SET Date = :FirstAGMDate WHERE FormId = 0;
UPDATE jobsinglevalues SET Date = :MinutesInspectedFromDate WHERE FormId = 1;";
$sth = $db->prepare($sql);
$sth->execute(array(':FirstAGMDate'=>($_POST['FirstAGMDate']), ':MinutesInspectedFromDate'=>($_POST['MinutesInspectedFromDate'])));
}
這種方法沒有問題,但是當我需要爲一打輸入重複此操作時,這並不是很聰明。我想要做的只是使用一行sql來實現這一點;循環爲每個<input type="text" name="Value" />
。
我怎樣才能把它變成foreach
循環?
在我的腦海它的工作原理是這樣的:
在提交每個輸入更新基於FormId
在數據庫中的值,它遞增1每次循環從0開始。FormId
不是一個主鍵,它只是簡單地反映了表單元素的顯示順序。
更新 - 工作示例
if (isset($_POST['submit'])) {
$FormId = 0;
foreach($_POST['Value'] as $avalue){
$sql = "UPDATE jobsinglevalues SET Date = :Value WHERE FormId = :FormId";
$sth = $db->prepare($sql);
$sth->execute(array(':Value'=>($avalue), ':FormId'=>($FormId)));
++$FormId;
}
}
這似乎邏輯上的工作給我!正確的解決方案是否類似?請讓我知道是否需要澄清任何事情。
三江源,
山姆
首先,你需要獲取值的從柱的陣列,所以不是'<輸入名稱=「值」>''使用<輸入名稱=「值[]」>'。然後,您可以使用'foreach($ _ POST ['Value']作爲$ avalue){...}'在'foreach'中的語句中使用'$ avalue'變量。 – towr
這應該是一個答案.. –
@towr完美!這對我來說很有意義(!),並且可以用作一種享受。請作爲回答發佈,以便我可以upvote並將其標記爲正確的答案! – misterManSam