私はこれを機能させる方法を見つけようと頭を悩ませてきました。ここで、もう少し詳しく説明します。
私がやろうとしているのは、ユーザーがフォームに何かを入力すると、クエリの結果が返され、そのクエリの結果を使用して、それらに対して別のクエリを実行することです。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):' ').'</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>