【发布时间】:2016-06-27 11:15:36
【问题描述】:
我正在尝试根据文本框中的值更新我的数据库。第一个 foreach 循环运行良好($emails 是从另一个类中获取的),但在第二个循环中,我无法在没有未定义索引错误的情况下获取每个表单的名称(“form_UD”)。我也很确定我在第二个 foreach 循环中的语法是错误的。我要做的是检查这些表单中的每一个,如果用户单击其相应的“btn_update”按钮,则调用 $RUD 类的 updateEmail 方法并插入来自该按钮的值,以及来自表单对应的“input_email”值。
foreach ($emails as $email) {
echo "<li>
<form action='' method='POST' id='form_email' name='form_UD'>
<input type='text' value='" . $email['news_email'] . "' name='input_email'/>
<button type='submit' class='btn_update' name='btn_update' value='" . $email['news_id'] . "'>Update</button>
</form>
</li>";
}
foreach (($_POST['form_UD']) as $form) {
if ((isset($form->$_POST['btn_update']))) {
$RUD->updateEmail($form->$_POST['btn_update'], $form->$_POST['input_email']);
}
编辑: 新想法:
<form action='' method='POST' id='form_email'>
<ul>
<?php
foreach ($emails as $email) {
echo "<li>
<input type='text' value='" . $email['news_email'] . "' name='input_email" . $email['news_id'] . "'/>
<button type='submit' class='btn_update' name='btn_update" . $email['news_id'] . "' value='" . $email['news_id'] . "'>Update</button>
</li>";
}
foreach ($emails as $email) {
if (isset($_POST['btn_update' . $email['news_id']])) {
echo $_POST['btn_update' . $email['news_id']];
echo $_POST['input_email' . $email['news_id']];
$RUD->updateEmail(($_POST['btn_update' . $email['news_id']]), ($_POST['input_email' . $email['news_id']]));
}
}
?>
</ul>
</form>
回声语句在点击时获得正确的值。顺便说一句,$RUD 在同一个文件的其他地方被实例化了。这让我相信我处理更新的方法可能存在问题?这里是:
public function updateEmail($id, $email){
$db = Dbclass::getDB();
$query = "UPDATE newsletter
SET news_email = :email,
WHERE id = :id ";
$statement = $db->prepare($query);
$statement->bindParam(':id', $id);
$statement->bindParam(':email', $email, PDO::PARAM_STR, 100);
$statement->execute();
}
Dbclass:getDB() 确实有效。我用其他方法确认了。
【问题讨论】:
-
foreach $key 和 $value 在哪里?
-
@unixmiah Foreach 不需要输出到键值。当仅提供一个 var 时,它将是值。 foreach($var as $key => $val) 或 foreach($var as $val) 都是 PHP 中 foreach 的有效语法。
-
表单中的 form_UD 部分需要像 $array['form_UD'] 一样读取 --
标签: php forms post dynamic undefined