使用HTML表单和PHP查询以前的SQL查询的结果

时间:2013-03-06 17:08:32

标签: php sql oracle dynamic-sql

我一直绞尽脑汁想弄清楚如何让它发挥作用。现在,我会在这里解释一下。

我要做的是,当用户在表单中输入内容时,它会返回查询结果,然后使用 查询的结果,执行另一个< / em>查询它们。我正在使用PHP和oracle数据库。

例如:目前我有一个充满食谱及其成分的数据库;我有一个用户可以输入成分的表格。在这个例子中,它是培根。

enter image description here

这很好用。但是,我难以实现的是当用户输入另一个成分时,当前表的结果在那里进一步查询。假设我输入'cheese',然后查询并显示包含培根 AND 奶酪的所有食谱。

这个过程很容易在简单的SQL中实现,但是就像我看到我在转移它以使用表单时遇到了困难。

现在,我知道解决方案可能与临时表,动态sql或两者的组合有关。

提前感谢您对此事的任何帮助。

我的代码如下:

<?php
if(isset($_POST['submit'])) 
{ 
    $name = $_POST['name'];
}

function do_fetch($myeid, $s)
{
  print '<table border="1">';
  while ($row = oci_fetch_array($s, OCI_RETURN_NULLS+OCI_ASSOC)) {
    print '<tr>';
    foreach ($row as $item) {
      print '<td>'.($item?htmlentities($item):'&nbsp;').'</td>';
    }
    print '</tr>';
  }
  print '</table>';
  print '<br>';
}

// Create connection to Oracle
$c = oci_connect("system", "luigi98", "localhost/XE");

// Use bind variable
$query = "SELECT DISTINCT r.recipeTitle AS recipe
FROM RECIPES.recipe r
WHERE recipeID IN(
    SELECT r.recipeID
    FROM recipes.recipeIng il
    INNER JOIN RECIPES.ingredient i ON il.ingredientID = i.ingredientID 
    WHERE il.recipeID = r.recipeID
      AND i.ING = :eidbv)";
$s = oci_parse($c, $query);

$myeid = $name;
oci_bind_by_name($s, ":EIDBV", $myeid);
oci_execute($s);
do_fetch($myeid, $s);


// Close the Oracle connection
oci_close($c);

?>
<p>Enter ingredient</p>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <input type="text" name="name"><br>
   <input type="submit" name="submit" value="Search"><br>
</form>

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。

最简单的方法可能是再次在搜索框中显示原始成分,并指示用户根据需要添加更多(按空格,逗号等分隔)成分。

然后,您可以在这些字符上展开搜索字词,并为每种成分添加条件。