0

W3C Web サイトから ajax の例を実装するのに苦労しています。この例では、データベースから結果を取得し、ドロップダウン メニューから選択されたオプションに基づいてテーブルに表示します。

http://www.w3schools.com/php/php_ajax_database.asp

要件を満たすようにこの例を構成しようとしました。これは、選択されたオプションに基づいてデータベース内のフィールドを更新することです。私はちょうど私が正しい軌道に乗っていることを確認したかっただけです。オプションが選択されると、php スクリプトをトリガーして変更を行う ajax 呼び出しが行われます。次のようになります。

<?php
$q = mysql_real_escape_string($_POST['q']);
print_r($_GET["q"]);


$con = mysql_connect('localhost', '', '');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("Orders", $con);

$sql= "UPDATE Orders SET status='.$_POST[q]['.$i.'].' WHERE   ID='.$_POST[order_no]    ['.$i.'].'";

ただし、このデータはデータベースには入力されません。「承認済み」「保留中」または「不承認」の $q の値を取得できますが、個々の行を更新するための特定の注文番号は取得できません。私の選択ボックスは次のようになります。

echo '<select name="order_status[]" id="id" onchange="showUser(this.value)">';
    echo '<option value = "Pending"  name="order_status['.$i.']" class =       "pending"' . ($row['status'] == 'Pending' ? ' selected=selected' : '') . '>Pending</option>';
    echo '<option value = "Approved" name="order_status['.$i.']" class = "approved"' . ($row['status'] == 'Approved' ? ' selected=selected' : '') . '>Approved</option>';
    echo '<option value = "Disapproved" name="order_status['.$i.']" class ="disapproved"' . ($row['status'] == 'Disapproved' ? ' selected=selected' : '') . '>Disapproved</option>';

これは、どのチェックボックスが選択されているかに基づいて電子メールを送信するフォームにラップされます。この機能は機能し、個々の行にメールを送信できます。

 <form method ="post" action="sendemail.php">
    echo '<td><input type="checkbox" name="order_selected['.$i.']"/></td>';

//in send mail.php:
    if(isset($_POST['order_selected']))
    {
    $keys = array_keys($_POST['order_selected']);

    foreach($keys as $key)
//send email 

同じ php スクリプトに更​​新コードを実装する必要がありますか? または同じアプローチを使用して配列をループしますか?

どうもありがとう

4

1 に答える 1

2

あなたの説明から、あなたの問題が何であるか正確にはわかりませんが、コードを見ると、SQL ステートメントにいくつかの構文エラーがあります。

$sql= "UPDATE Orders SET status='.$_POST[q]['.$i.'].' WHERE   ID='.$_POST[order_no]    ['.$i.'].'";

する必要があります

 $sql= 'UPDATE Orders SET status="' . $_POST['q'][$i] . '" WHERE   ID="' . $_POST['order_no'][$i] . '"';

また、コードから $i 変数がどこから来ているのか明確ではなく、SQL ステートメントで使用する前に $_POST['order_no'] で検証を行っていないため、SQL インジェクションに対して脆弱になります。

また、この ajax の例は非常に古い方法です。私は常にjQueryライブラリを含め、そこにあるjQuery.ajax()関数http://api.jquery.com/jQuery.ajax/を使用します。これは、すべてのクロスブラウザ機能を実行します。また、DOM 要素からデータを選択し、それらを $_POST または $_GET に解析することも非常に簡単になります。次に、コールバック関数を使用して、php スクリプトからの結果を続行できます。

$('select.foo').change(function() {
     var post = {
         status: $('select.foo option:selected').val();    // get the value from a dropdown 
     }

    $.ajax({
       type: "POST",
       url: "some.php",
       data: post,
       success: function(returnData){
           if(returnData == 1){
               alert('updated');
           }
      }
    });
});
于 2012-09-20T08:51:01.293 に答える