3

我有一个我的电影收藏的 MySQL 数据库,我正在一个小网站上搜索和编辑数据库。整个项目更多的是学习,然后只是尝试以最简单的方式完成它。所以我是从头开始写的,只是纯文本文件,而且我主要使用 PHP。

所以我想要一个可以编辑电影信息的页面。添加新信息相当简单,但删除信息呢?我有几个类型的复选框。当表单出现时,会检查当前与电影相关的任何类型。我希望能够取消选中一个框,然后该类型将从该电影中删除。我能想到的唯一方法是在表单打开时创建一个初始值数组,并在提交表单时获取 POST 数组。然后删除第一个但不是第二个数组中的所有流派。这似乎有点乱,我觉得应该有一种更优雅的方式来做到这一点。这似乎是一个非常标准的事情,所以也许人们有一个很好的方法来做到这一点?

4

3 回答 3

1

您可以使用输入复选框单击事件来调用 ajax 操作。

使用 jquery ( http://api.jquery.com/jQuery.ajax/ ):

$(document).ready(function() {
  $("#form input[type=checkbox]").click(function() {
        $.ajax({
            url : '/sample/'+$(this).attr('any_id')+'/'+$(this).attr('other_id'),
            error: function(){alert('error')},
            success : function(data){alert('success')}
        });
  });
});

而不是解析 url 以获得您需要的内容,并在成功功能上使用 $('element').html() 等 jquery 函数更新您的表单和/或页面信息。

如果您更愿意为同一功能传递序列化数据选项,则另一种选择:

$(document).ready(function() {
  $("#form.checkboxes input[type=checkbox]").click(function() {
        $.ajax({
            url : '/sample-form-action',
            type: "POST",
            data: $("#form.checkboxes").serialize(),
            error: function(){alert('error')},
            success : function(data){alert('success')}
            },
  });
});

您可以在复选框周围创建表单标签,在这种情况下,您可以仅通过 ajax 发布您真正需要的信息:

<form name="checkboxes" class="checkboxes">
 <input type="checkbox" />
</form>
于 2013-06-03T20:02:28.157 回答
1

我能想到的最好的方法是在流派和电影之间建立多对多的关系(这意味着一部电影可以有多种流派,一种流派可以出现在许多电影中)。

这涉及添加另外两个表,一个用于定义流派,另一个用于将它们与电影相关联:

genres
---------
id | name

这是稍微棘手的部分:

genres-movies
-------------------
movie_id | genre_id

wheremovie_id是表中的实际 ID movies,并且genre_id是表中的实际 ID genres

例如,ID 为 1 的流派是Science Fiction,ID 为 42 的电影是Hitchhiker's Guide to the Galaxy(看看我在那里做了什么?),这意味着如果我在 有条目42 | 1genres-movies则意味着银河系漫游指南是科幻小说。请注意,两者movie_id都不genre_id是唯一的,两者都可以出现多次,因此可能出现以下情况:

movie_id | genre_id
---------+---------
1        | 2
1        | 3
2        | 2
3        | 1

要查找电影的所有类型:

SELECT `genre_id` FROM `genres-movies` WHERE `movie_id` = <ID>;

毕竟背景,你的问题。使用这种方法,您需要多个查询,从电影中删除所有类型,然后每个都添加您选择的类型。您必须这样做,因为未选中的复选框不会发送到服务器(伪代码)

DELETE FROM `genres-movies` WHERE `movie_id` = <ID>; --Remove all genres

foreach ($genres_from_checkboxes as $genre) {
    INSERT INTO `genres-movies` (`movie_id`, `genre_id`) VALUES (:movie_id, :genre_id)
}

笔记!始终使用来自用户的数据清理(或更好地准备!!! )查询!

呸!那很长,希望你学到一两件事:)

于 2013-06-03T20:35:26.513 回答
1

您可以使用 php if 语句检查数据库列中的值并显示已选中

<input name="column" type="radio" value="1" <?php if($table['column'] = 1) echo "checked" ?>>
<input name="column" type="radio" value="0" <?php if($table['column'] = 0) echo "checked" ?>>

或者,如果您使用的是复选框

<input name="column" type="checkbox" value="1" <?php if($table['column'] = 1){ echo "checked" }elseif($table['column'] = ){ echo "" } ?>>

我希望这对你有用

于 2019-04-25T11:16:01.970 回答