【问题标题】:Show certain code depending on mysql query? (php)根据mysql查询显示某些代码? (php)
【发布时间】:2015-01-02 19:52:16
【问题描述】:

我需要一点启动。

我们刚刚在学校学习 php,并且我们有这个项目,我们正在创建一个用于电影浏览的网站。所以我们希望能够选择类型,并使用 MySQL 数据库显示该类型的所有电影。我们都清楚 SQL 查询等,我的问题是如何让浏览器根据 SQL 查询显示电影?

让我解释一下。假设我们是movies.com

因此,在 movies.com/genre 上,您可以选择正确的流派,而在 movies.com/display 上,您应该可以从所选流派中看到电影。因此,点击“喜剧”应该会将您带到 movies.com/display 并显示喜剧电影。选择“戏剧”应该会将您带到同一个网站 (movies.com/display) 并只显示戏剧电影。

这里的问题是我们不知道从哪里开始,根据您在前一页中选择的内容切换页面以显示某些 sql 查询时出现问题。我不知道如何谷歌它,但只是一个链接或一个建议会有所帮助。我相信这真的不会太难。

提前致谢。

【问题讨论】:

  • 对于指针,在$_PHP['SESSION'] 上进行搜索或使用带有$_GET[] 的uri 参数。有很多关于如何在php中将变量从一个页面传递到另一个页面的教程。
  • 首先创建一个 HTML 菜单,然后单击每个链接打开这些页面并在这些页面中编写单独的 SQL 查询...假设如果您想观看喜剧电影,请将 SQL 查询写为SELECT * FROM movies WHERE genre='comedy' 和其余页面也一样...
  • 为什么这么多人同时标记mysqlsql-server?有人甚至会阅读他们选择的标签的弹出窗口吗?

标签: php mysql sql-server


【解决方案1】:

从html开始选择流派:

<form action="display.php" method="POST">
    <select name="genre">
        <option value="drama">Drama</option>
        <option value="comedy">Comedy</option>
        <option value="thriller">Thriller</option>
        <option value="horror">Horror</option>
    </select> 
    <input type="submit" value="Submit"/>
</form>

这里我们有一个带有下拉菜单的表单来选择流派。表单操作转到display.php

创建display.php,我们可以在其中获取提交的值并将其放入我们的查询中:

// get the submitted value
$genre = $_POST['genre']; 

// set a default genre if the POST genre is empty
if(empty($genre)) {
    $genre = 'comedy';
}

// connect to database
$link = mysqli_connect("localhost", "my_user", "my_password", "db_name");

// check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: (" . mysqli_connect_errno() . ") ";
}

// build the query
$query = "SELECT * FROM movie WHERE genre = '".$genre."'"; // unsafe !!

$query = "SELECT * FROM movie WHERE genre = '".mysqli_real_escape_string($link, $genre)."'"; // safer

// execute query
$result = mysqli_query($link, $query);

// check result
if (!$result) {
    echo 'Query unsuccessfull!';
}

// show values
while($row = mysqli_fetch_assoc($result)) {
    echo $row['title']; 
    echo $row['description'];
    echo "<br/>";
}

// close connection
mysqli_close($link);

【讨论】:

  • 谢谢,但我收到一个错误:“注意:未定义的索引:第 44 行 display.php 中的流派”,即“$genre = $_POST['genre'];”,所以它只是显示默认的喜剧电影。老实说,不确定如何解决。 :(
  • 除了action="display.php"之外,我不需要在类型选择页面中定义“$_POST”吗?
  • 尝试编辑:我在表单中添加了method="POST"。如果未指定方法,将使用 GET,因此如果不使用该方法,您也可以将 php 编辑为 $_GET['genre']。
  • 我明白了,你让我们重回正轨。还有很多事情要做,但现在我明白了。再次感谢。
  • ".mysqli_real_escape_string($link, $genre)."'"; // 更安全" 不过我不明白转义。
【解决方案2】:

我建议有一个流派表。这样,您可以轻松地显示类型列表供用户选择(即,您可以从该表中填充 HTML 表单选择列表)。流派列表将有一个唯一的 id(一个整数)和一个文本描述,因此当生产者列表显示描述但有一个值是 id。

然后有一张电影表(我想你已经有了这个)。每部电影都将由一个唯一的整数 id 字段标识/

最后是电影类型表。这只会将电影的 id 链接到电影的流派 id。这样,如果需要,您可以将电影链接到多种类型。

这样做也意味着您从 HTML 表单返回的值可以只是整数,这很容易确保安全(只需使用 php intval() 函数)。

在使用中,您将提供一个流派列表作为 SELECT 列表。当用户选择一个项目并提交表单时,所选流派的 id 将返回给脚本。然后脚本可以执行一个查询,将表连接在一起,检查流派是否是已返回给脚本的所选流派。

例如。

tbl_genres
id
genre_name

tbl_movies
id
movie_name

tbl_genre_movie
genre_id
movie_id

然后获取返回的流派 id 的详细信息:-

$sql = "SELECT *
FROM tbl_genres 
INNER JOIN tbl_genre_movie
ON tbl_genres.id = tbl_genre_movie.genre_id
INNER JOIN tbl_movies
ON tbl_genre_movie.movie_id = tbl_movies.id
WHERE tbl_genres.id = ".intval($_POST['genre_id']);

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    相关资源
    最近更新 更多