[英]Post array from HTML form, and use results to update multiple rows in a mysql table
所以我有这个基本的HTML表单。 我的目标是将提交给此表单的值传递到mysql表中。
<form action="?action=settings" method="post">
<ul>
<li>
<label for="settingValue[1]">Setting 1:</label>
<input type="text" name="settingValue[1]" id="setting1" required />
</li>
<li>
<label for="settingValue[2]">Setting 2:</label><br>
<input checked type="radio" name="settingValue[2]" value="1" />On<br>
<input type="radio" name="settingValue[2]" value="0" />Off
</li>
<li>
<input type="submit" name="saveChanges" value="Save Changes" />
</li>
</ul>
</form>
我的mysql表只有3列(id,settingName,settingValue),因此我想通过将值存储到“ settingValue”列中来使用此表单(在本例中为第1和2行)更新表中的多个记录。
经过一番研究,我发现似乎最好的方法是发布一个数组(这是我上面试图做的),然后使用一个foreach循环遍历该数组并更新表。
我想我的主要问题是弄清楚如何使用数组。 因为我需要更新记录,所以不能创建新记录。 我还需要保留ID,以便可以更新相应的记录。
经过数小时的谷歌搜索,我最好的猜测是这样做:
if ( isset( $_POST['saveChanges'])) {
foreach($_POST['settingValue'] as $key => $settingValue ) {
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$conn->exec("UPDATE settings SET settingValue=$settingValue WHERE id=$key");
$conn = null;
}
但这没有结果。
将$settingValue
和$key
放在引号中:
$conn->exec("UPDATE settings SET settingValue='$settingValue' WHERE id='$key'");
提示:保留$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
在foreach
循环之外。 无需在每个循环上重复连接
我将总结所有建议的解决方案。
可以使用数组keys
作为recordID
来保留有关多个记录的参数的信息。
循环更好地组织下一种方式( 重用现有的连接,但不要在每次迭代时重新打开 ):
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); // opened connection
if ( isset( $_POST['saveChanges'])) // if smth. POSTed
foreach($_POST['settingValue'] as $key => $settingValue ) // LOOPing thorugh each item
$conn->exec("UPDATE settings SET settingValue='".$settingValue."' WHERE id='".$key."'"); // executing query using the previously opened connection
并尝试将值SET
值括在引号( '
)或( "
) UPDATE settings SET settingValue='$settingValue' WHERE id='$key'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.