0

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

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

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

在此处输入图像描述

这工作得很好。但是,我难以实现的是当用户输入另一种成分时,当前表的结果在那里并进一步查询。假设我输入“奶酪”,所有包含培根奶酪的食谱都会被查询和显示。

这个过程很容易在简单的 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>
4

1 回答 1

1

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

最简单的方法可能是再次在搜索框中显示您的原始成分,并指示用户添加更多(以空格、逗号等分隔)成分(如果他们愿意)。

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

于 2013-03-06T17:17:58.487 回答