0

ユーザーがデータを入力するために選択したフォーム フィールドに基づいて、mysql クエリを動的に生成する方法を学習しようとしています。学習プロセスをできるだけ簡単にするために、ユーザーの姓と名のフィールドを持つ単純なフォームを使用しています。コードの基本的な (非動的) バージョンは次のとおりです。

<html>
<head>

<title>Untitled</title>

</head>
<body>

<form method="post" name="test" action="dynamic_search.php">
<input type="text" name="first_name">
<input type="text" name="last_name">
<input type="submit" value="Submit">

</form>

<?php

$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];

include "link.php";

$query = "SELECT * FROM members " .
     "WHERE first_name = '$first_name' " .
     "AND last_name = '$last_name' ";

$result = mysql_query($query) 
or die(mysql_error());

$row = mysql_fetch_array($result);
$member_id = $row['member_id'];
$member_first_name = $row['first_name'];
$member_last_name = $row['last_name'];

echo $member_id;
echo $member_first_name;
echo $member_last_name;

?>
</body>
</html>

私ができる必要があるのは、送信されたデータに基づいてクエリを生成することです。したがって、ユーザーが名前のみを入力すると、クエリは次のようになります。

$query = "SELECT * FROM members " .
     "WHERE first_name = '$first_name' ";

ただし、ユーザーが姓と名の両方を入力すると、クエリは次のようになります。

$query = "SELECT * FROM members " .
     "WHERE first_name = '$first_name' " .
     "AND last_name = '$last_name' ";

どんな助けでも(または誰かが私に良いチュートリアルを教えてくれれば)大歓迎です!

ありがとう!

4

3 に答える 3

1

まず、新しいコードで関数を使用しないmysql_*でください。それらはもはや保守されておらず、公式に廃止されています。赤いボックスが見えますか? 代わりに準備済みステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。(クレジット)

次に、SQL ステートメントに含まれるユーザー入力を常に回避するように注意してください。プリペアド ステートメントは、これを自動的に処理します。

そうは言っても、あなたが求めているPHPロジックは次のようなものです:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$first_name = $mysqli->real_escape_string($_POST['first_name']);
$last_name  = $mysqli->real_escape_string($_POST['last_name']);

$sql = "SELECT * FROM members WHERE 1";
if (! empty($first_name)) {
    $sql .= " AND first_name = '$first_name'";
}
if (! empty($last_name)) {
    $sql .= " AND last_name = '$last_name'";
}
于 2013-06-27T02:07:18.110 に答える
1

PHP を使用して入力をチェックし、必要に応じてクエリに追加できます。

$query = "SELECT * FROM members ";
$query .= "WHERE first_name = '$first_name' ";
if($last_name!="")
    $query .="AND last_name = '$last_name' ";

real_escape_string を使用して文字列をエスケープすることを忘れないでください

$first_name = mysql_real_escape_string($_POST['first_name']);

名を確認したい場合:

$query = "SELECT * FROM members ";
if($first_name!=""){
    $query .= "WHERE first_name = '$first_name' ";
    if($last_name!="")
        $query .="AND last_name = '$last_name' ";
}
else{
    if($last_name!="")
        $query .="WHERE last_name = '$last_name' ";
}
于 2013-06-27T02:01:07.677 に答える
0

したがって、フォーム エントリに基づいて MySQL クエリを生成する場合は、以下の関数ジェネレーターを調べることができます。

Php Sql クエリ ビルダー

https://github.com/nilportugues/php-sql-query-builder

これにより、フォームの結果とそのフィールド名 (または ID) を取得し、それをクエリ ビルダーにコーディングして、要求されたクエリを生成できます。

1 つのアドバイスは、フィールド名がテーブルの列名と一致していることを確認することです。これにより、プロセスがよりシームレスになります。

例えば。あなたの場合(列名がフォーム名と一致し、テーブルの名前が「メンバー」であると仮定します):

<?php
use NilPortugues\Sql\QueryBuilder\Builder\GenericBuilder;

$builder = new MySqlBuilder(); // <-- use MySqlBuilder

$query = $builder->select()
    ->setTable('members')
    ->setColumns(['first_name','last_name','email']); // <-- Form names
     
echo $builder->write($query);  
?>

これは出力されます:

SELECT members.first_name, members.last_name, members.email FROM members

ワラ!

開発者の GitHub ページで生成できる多くの複雑なクエリがありました。

于 2020-10-26T15:36:19.297 に答える