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 に答える