0

我无情地搜索了这个,我找不到我的困惑的答案 - 我认为问题是我不确定要搜索什么!无论如何,我的问题是这个......

场景: 想象一下,为了争论,有一个食谱数据库,你想让用户能够根据各种标准生成食谱建议列表。

以网页的形式,我希望这是左侧的一系列下拉框。用户将从下拉框中选择他们的过滤器选项,并在按下提交按钮后,将显示符合标准的食谱列表。

因此,他们可以,例如选择“膳食类型”、“卡路里”、“烹饪时间”,然后(在点击提交后)取回符合要求的食谱建议列表。

(理想情况下,它们会出现而不需要重新加载页面,并且会包含在滑块中进行浏览,但如果我对底层部分进行排序,我可能会破解那部分......)

要求: 我只需要知道 - 在最高级别 - 我将使用哪些技术来实现这一点(以及它们如何协同工作的过程)。

我猜我需要一个带有带有标准标记的食谱的 MySQL dB,然后使用表单和 php 从数据库中提取。它是否正确?!

似乎是一个常见的要求,但我找不到关于如何实现这一点的好读物。

4

3 回答 3

1

看看 PHP guide to prepare statements。您将基本上针对数据所在的表编写一个 select 语句,其中 select 语句的 where 子句是用户在表单中选择的参数。

PHP 准备好的语句

您要坚持使用准备好的语句的原因是,它们通常更安全地防止通过表单使用 SQL 注入对您的站点进行攻击。

对于端到端解决方案,您的前端将提交到一个 PHP 页面,然后该页面将处理用户指定的标准,将这些标准转换为准备好的语句,该语句将从您的表中查找数据。表本身将需要具有与条件相对应的列。这更多地涉及到数据库设计,这是一个更大的主题,在这里要讨论,但是有很多指南可以解决这个问题。

你真的想把解决方案分解成子组件,然后找到各种指南来解决这些部分。祝你好运,希望这会有帮助。:)

于 2012-09-27T00:59:38.673 回答
0

过程:

1) 用户进行选择并点击提交按钮。这将向您将收集这些信息的 PHP 页面(可以是同一个 PHP 页面)发起 HTTP POST。

2)用PHP打开一个MySql数据库连接。您需要了解 SQL 才能从 MySql DB 中提取数据。取决于您的数据库架构的布局方式。

3)一旦您拉出此信息,将它们显示为用户可以单击的复选框。

这是最低限度的。

如果你想更花哨,你可以使用 JQuery ajax post (http://api.jquery.com/jQuery.post/) 这样页面就不会刷新。

祝你好运,我已经饿了。哈哈。

于 2012-09-27T00:56:41.390 回答
0

When the user selects options in your form and submits it, this will run a PHP script on the server. The server retrieves the option parameters, and uses them to construct a SQL query. For instance, the script might contain something like:

$criteria = array();
if (isset($_POST['calories'])) {
    $criteria[] = 'calories < '.$_POST['calories']);
}
if (isset($_POST['time'])) {
    $criteria[] = 'cooking_time < '.$_POST['time']);
}
...
$query = 'SELECT * FROM recipes WHERE '.implode(' AND ', $criteria);

You use a library like mysqli or PDO to perform the query and get the results. Then you loop through the results, and format them into an HTML table which will be returned to the user as the resulting web page.

Or the PHP script could return the results as JSON data. Your web page could use AJAX to get this data from the server, then use JavaScript to format it into a table.

于 2012-09-27T01:21:34.393 回答