1

javascript を使用して取得した名前を検索する特定のクエリを実行しようとしています。私はこのHTMLを持っています:

<a onmouseover="showDef(textContent)" href="aLinkHere.com">myWord</a>

関数showDefは myWord を取得し、その後クエリを実行しようとしています。

<script type="text/javascript>
function showDef(txt) {
    var myWord = txt;
//Some code here to execute the query?
}
</script>

私がしたいクエリは次のとおりです。

mysql_query("SELECT * FROM defs WHERE name='myWord'");

ここで、「myWord」を javascript 変数に格納されている単語に置き換える必要があります。これに何か方法はありますか?私はすでに次のことを試しましたが、うまくいきませんでした..

document.write('<?php $data = mysql_query("SELECT * FROM defs WHERE name=\''+ myWord + '\'"); ');

私は比較的 Ja​​vaScript と php に慣れていないので、どんな助けでも大歓迎です!

4

2 に答える 2

2

Javascript はクライアント側の言語であり、クエリを実行するには php (サーバー側) の言語が必要です。

その変数を使用して ajax リクエストを作成し、その変数をクエリで使用します。リモートphpファイルからその応答を返し、javascriptで応答をキャッチします。そしてレスポンスを楽しむ。

名前のみ (正確) を検索している場合は、=else を使用するLIKEREGEXP、パフォーマンスを向上させるために使用します。

これは、 jQueryライブラリを使用する例です。

    var dataString = 'searchVar='+ myWord;
    $.ajax({ 
      type: "POST",
      url: "ajax.php",
      data: dataString,
      cache: false,
      success: function(data){
           alert(data)
      }
});

PHPコードでは、変数を取得し$_POST['searchVar']てクエリを実行します

$qry = "SELECT * FROM defs WHERE name LIKE '%".'$myWord."%'"; そしてwhileループでjstはあなたの応答をエコーし​​ます。

于 2013-03-16T13:00:17.727 に答える
1

あなたは確かに比較的新しいです、これは基本的な文字列 101 です。

1) document.write は使用しないでください。使用するためのものではありません。10 年前の API であり、あなたが思っていることを行いません。(document.getElementById などを使用して) コンテンツを設定する要素を見つけ、.innerHTML = ... を使用してそのコンテンツを設定します。

2) PHP 側のクエリで値を取得するには、そこに値を入力します。これは、PHP の基本機能の 1 つです。

$myword = sanitize_the_hell_out_of_this($_POST['myword'];
mysql_query("SELECT * FROM defs WHERE name='$myword'");

サニタイズには好きな方法を選択できます。PHP に焼き付けられた方法がいくつかありますが、投稿された値をデータベースに直接渡さないでください。誰かが html を編集して、単語を "'; drop table words; 'lo" に変更すると、テーブルが削除されます。楽しい時間 =)

実際に機能させるには、ページがクライアントのコンピューターで実行されること、および PHP がサーバー テクノロジであることを覚えておいてください。したがって、javascript は文字通りサーバーに要求することによって、サーバーにデータを要求する必要があります。AJAX の get または post 操作が必要であり、返されたデータを処理します。PHP コードを挿入して、それをユーザーのコンピューターで実行することはできません。

于 2013-03-16T13:04:31.260 に答える