【发布时间】:2019-09-03 17:46:51
【问题描述】:
我需要能够将多选下拉列表中的选定项目保存到 MySQL 数据库中并显示所有选定项目。当我点击提交时,只保存最后一项。
代码最初用于从下拉菜单中选择单个项目。我已经修改它以选择多个项目(以便其他人编辑)。我尝试了各种解决方案,包括 if is_array、for 循环和 foreach 循环,但没有任何运气。谁能指出我正确的方向。
HTML 代码
<select name="topic_id[]" multiple="multiple" id="select">
<?php
$topic_set = find_all_topics();
while($topic = mysqli_fetch_assoc($topic_set)) {
foreach($topic_set as $topic) {
echo "<option value=\"" . $topic['id'] . "\"";
if($page['topic_id'] == $topic['id']) {
echo " selected";
}
echo ">" . $topic['menu_name'] . "</option>";
}
}
mysqli_free_result();
?>
</select>
PHP
function insert_page($page) {
global $db;
$errors = validate_page($page);
if(!empty($errors)) {
return $errors;
}
shift_page_positions(0, $page['position'], $page['topic_id']);
$post_t_ids = array();
foreach($_POST['topic_id'] as $post_t_id) {
$post_t_ids[] = (int) $post_t_id;
}
$post_t_id_joined = join('), (', $post_t_ids);
$sql = "INSERT INTO pages ";
$sql .= "(topic_id, content) ";
$sql .= "VALUES (";
$sql .= "'" . db_escape($db, $post_t_id_joined) . "',";
$sql .= "'" . db_escape($db, $page['content']) . "'";
$sql .= ")";
$result = mysqli_query($db, $sql);
if($result) {
return true;
} else {
echo mysqli_error($db);
db_disconnect($db);
exit;
}
}
if(is_post_request()) {
$page = [];
$page['topic_id'] = $_POST['topic_id'] ?? '';
$page['content'] = $_POST['content'] ?? '';
$result = insert_page($page);
if(!isset($_POST['topic_id'])) {
$_POST['topic_id'] = [];
}
if($result === true) {
$new_id = mysqli_insert_id($db);
} else {
$errors = $result;
}
}
结果应该是从下拉列表中选择多个项目,单击提交后,所有选定的项目应保存到数据库并显示到不同的页面。不会弹出错误消息,但只会保存和显示最后选择的项目。
【问题讨论】:
-
如何将数据发送到服务器?发布代码。
-
这是表单的代码
-
请把它作为代码块放在你的问题中
标签: php mysql drop-down-menu