0

ユーザーが希望する引用のカテゴリを (チェックボックスを介して) 設定する Web ページを作成しようとしています。送信後、ajax を使用して PHP ファイルにアクセスします。PHP ファイルは SQL データベースにアクセスし、カテゴリからの引用を返します。

私の目標は、ユーザーが 1 つ以上のカテゴリを選択できるようにし、選択したカテゴリに分類されるデータベースからランダムな行を返すようにすることです。データベースからランダムな行が返されるようになりましたが、設定に基づいてクエリを変更するために SQL クエリに値を渡す方法がわかりません。

ここにAJAXがあります:

$.ajax({                                      
   url: 'php/function.php', data: "", dataType: 'json', 
   success: function(data)
   {
       var quote = data[0];
       $('#content').html(quote); 
   } 

PHPは次のとおりです。

$result = mysql_query('SELECT * FROM motivators WHERE Category LIKE "%success%" ORDER BY RAND() LIMIT 1');   
$array = mysql_fetch_row($result); 
echo json_encode($array);

%success% を置き換える値や値を渡すにはどうすればよいですか?

4

4 に答える 4

1

次のように変数を渡すことができます。

$.ajax({
    type: 'POST',
    url: 'php/function.php',
    data: { 
        'foo': 'bar', 
    },
    success: function(data){
       var quote = data[0];
       $('#content').html(quote); 
    }
});

$_POST['foo']次に、PHP スクリプトで、に入力する必要があるものにアクセスできますbar

于 2013-05-17T20:46:42.530 に答える
0

のように url パラメータとして値を送信できますhttp://mysite.com/search.php?q=some parameter
次に例を示します。

//AJAX functionality for search
function search(str){
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }else{// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            resp = xmlhttp.responseText;
            document.getElementById("resultBox").innerHTML=resp;
        }
    }
    //Set URL parameters here
    xmlhttp.open("GET","search.php?q="+str,true);
    xmlhttp.send();
}

サーバー側:

//Search query
$search_q = $_GET["q"];
//Searching
$result = mysqli_query($con, "SELECT * FROM persons WHERE FirstName LIKE '%$search_q%'");
while($row = mysqli_fetch_array($result))
{
    echo '  <p>' . $row[FirstName] . '</p>';
    echo '  <p>' . $row[LastName] . '</p>';
}

これは非常に単純ですが、あなたが望むものです。(セキュリティについては言及されていません。注意してください!)
頑張ってください!

于 2013-05-17T21:06:35.423 に答える
0

それdata:が .ajax() 呼び出しの一部です。

data: 'formfield=somevalue'

次にPHPで:

$formfield = $_GET['somevalue'];

この値を SQL クエリで直接使用しないでください。SQL インジェクション攻撃を受けやすくなります。非推奨の mysql_*() 関数ライブラリの使用をやめ、最新の mysqli または PDO ライブラリに切り替えることを強くお勧めします。それらを使用すると、適切なプレースホルダーを使用した単純な準備済みステートメントがはるかに簡単になります。

于 2013-05-17T20:46:52.650 に答える
0

ajax 呼び出しからデータを取得するには、次のように呼び出しの data パラメーターに渡します。

var param_value;
var param2_value;

$.ajax({                                      
   url: 'php/function.php', data: {param: param_value, param2: param2_value}, dataType: 'json', type: "POST",
   success: function(data)
   {
       var quote = data[0];
       $('#content').html(quote); 
   } 

上記のタイプ: POST に注意してください。これは、渡されたデータ値が $_POST 配列のキー: $_POST['param']、$_POST['param2'] に格納されることを意味します。

次に、クエリを二重引用符 ('' ではなく "") で囲み、目的の php 変数を挿入します。

$result = mysql_query("SELECT * FROM motivators WHERE Category LIKE '%$success%' ORDER BY RAND() LIMIT 1");

SQL インジェクションの脆弱性を回避するために、クエリに挿入するものはすべてエスケープしてください。

于 2013-05-17T20:48:13.720 に答える