【发布时间】:2020-11-19 11:33:01
【问题描述】:
我正在尝试按语言保存多个文本字段,如果存在任何语言的空文本字段,则在保存时忽略它,但对于某些错误,我的代码无法正常工作,当我点击提交时,只保存第一个文本字段
数据库
+----------+------------+---------------+
| email_id | email_lang | email_content |
+----------+------------+---------------+
| | | |
+----------+------------+---------------+
HTML
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" value="<?php echo $_GET['id']; ?>" name="email_id" hidden>
<?php foreach ($languages as $lang): ?>
<input type="text" value="<?php echo $lang ?>" name="email_lang">
<textarea type="text" value="1" name="email_content"></textarea>
<?php endforeach ?>
<button type="submit" name="save">Save</button>
</form>
PHP
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$sentence = $connect->prepare("INSERT INTO emailtemplates (email_id,email_lang,email_content) VALUES (:email_id, :email_lang, :email_content)");
$email_id = $_POST['email_id'];
$email_lang = $_POST['email_lang'];
$email_content = $_POST['email_content'];
$sentence->execute(array(
':email_id' => $email_id,
':email_lang' => $email_lang,
':email_content' => $email_content
));
}
$languages = ['en', 'fr', 'ru'];
require '../views/new.email.view.php';
?>
预期结果
+----------+------------+-----------------+
| email_id | email_lang | email_content |
+----------+------------+-----------------+
| 1 | en | english content |
| 1 | fr | french content |
+----------+------------+-----------------+
【问题讨论】:
-
代码“不能正常工作”到底是怎么回事?有什么问题?
-
当我将它保存到数据库时它不保存
-
您有任何错误吗?您是否将 PDO 设置为在发生 SQL 问题时抛出错误?你在 PHP 中正确设置了错误日志吗?如果没有,请设置这些内容,然后重新运行您的代码并检查错误日志文件。 “不保存”不是对您的问题的有用描述 - 可能有多种原因。请启用错误日志记录,然后再进行一些适当的调试工作。我们无法运行您的代码来调试它,只有您可以这样做。例如,在执行查询之前,您应该检查所有 POST 值是否按预期填充。
-
P.S.关于 HTML 表单的更一般的观点 - 对于隐藏值,而不是使用文本字段并将其标记为
hidden,您可以使用实际的<input type="hidden"字段...这是推荐的方式。 -
不幸的是,答案被延迟了,所以您可以这样做:将您的输入命名为
<textarea type="text" value="1" name="email_content[lang]">,其中 lang 是实际语言,然后只需foreach ($_POST['email_content'] as $lang => $content)在此循环中插入一个 do。