0

PHP コードで fckeditor クラスを使用しています。

わかりました、検索ボックスに p を検索または入力すると、特定のテーブルに含まれるすべてのレコードが出力されます (「p」は fckeditor の問題です)。

1 つのチャプター コンボと 1 つのテキスト ボックスがあります。キーワードを検索する前は機能していましたが、現在は機能していません。昨日この質問を投稿し、回答を得ましたが、問題は、キーワードを検索すると、その質問に関連するレコードを表示できないことです。そのチャプターフィールドに入力した後、チャプター関連の質問のみが表示されます。

さらに説明すると、テキスト フィールドに「p」とドロップダウンに 1 を入力すると、すべての質問が第 1 章に出力されますが、キーワードを入力しても機能しませんでした。

私のコードは次のとおりです。

<?php
if (isset($_POST['submit'])) {
    if (empty($_POST['fname'])) {
        die ("<script type='text/javascript' > alert('PLEASE ENTER KEYWORD...!!!');</script>");
    } else {
?>..................................
<?php
        include("conn.php");
        $name  = $_POST['fname'];
        $name2 = $_POST['chapter'];
        /*This query searches all records with duplicate entry....*/
        //$sql="SELECT  * FROM $user WHERE question like '%".$name."%' and 
        //Chapter   like'%".$name2."%' ";

        /*This query searches all records without duplicate entry....*/
        $sql = "SELECT * FROM $user WHERE question like '%" . $name . "%' and 
        Chapter like '$name2'";

        $result = mysql_query($sql) or die(mysql_error());
        while ($row = mysql_fetch_array($result)) {
?>

もう一度 1 つの問題があります。最初のクエリを記述して重複エントリについてコメントした場合、第 1 章を入力すると、1,11,21 章のレコードが出力され、すべてのタスクで機能します。つまり、このクエリはすべてのレコードに対してキーワードごとのレコードまたは「p」を検索できますが、1,11,21,12 は問題です.2 番目のクエリでは、前に述べたように章ごとのレコードのみを出力します.この質問。

4

1 に答える 1

0

私はあなたの質問を理解するのに本当に苦労しているので、以前にここで聞いておくべきだったいくつかの一般的なアドバイスから始めましょう:

  • mysqli または PDO を使用してみてください
  • あなたのコードは、SQL インジェクション攻撃に対して広く開かれています。準備済みステートメントを使用するか、少なくともすべてのユーザー入力で mysqli_real_escape_string を使用する必要があります。
  • 投稿された変数を $name または $name2 に再割り当てする必要はありません。
  • mysql テーブル名は大文字と小文字が区別されることを忘れないでください。将来のコード作成に役立つため、ケースの使用法を一貫したものにすることが賢明な場合があります。

英語に翻訳されたSQLクエリは次のように述べています。

変数 $user で指定されたテーブルから、列chapterが変数 $name2 とquestion完全に等しく、列のテキストのどこかに大文字と小文字を区別しない連続文字列として $name1 のテキストが含まれているすべての列を検索します。

それがあなたが望むものなら、それはあなたが得るものです。

あなたの問題は、チャプタークエリのどちらかの側に % がないことでしょうか?

検討:

$sql="SELECT * FROM $user WHERE question LIKE '%$name%' AND Chapter LIKE '%$name2%'";

また

 $sql="SELECT * FROM $user WHERE question LIKE '%$name%' AND Chapter = '$name2'";

これで目的の結果が得られた場合は、次に進み、SQL インジェクションの脆弱性を取り除くことができます。

いくつかのサンプル データ (おそらくフィドルと望ましい出力の例) を提供していただければ、ここのコミュニティが喜んでお手伝いしてくれると確信しています。それらはどの言語でもうまく機能します。

于 2013-09-04T07:11:57.360 に答える