2

私が取り組んでいるプロジェクトの管理パネルを作成しています。テーブルに一連のエントリがリストされ、各行にはチェックボックスがあります。このチェックボックスは、Web サイトに表示されるエントリを有効にするために使用されます。

MySQL データベースからのデータでチェックボックスのidandを設定しています。name例えば..

<input type="checkbox" class="active" name="active<?php echo $id; ?>" id="active<?php echo $id; ?>" <?php if ($active == 1): ?>checked="checked"<?php endif; ?> value="<?php echo $id; ?>">

ID 5 のエントリの場合、次のようになります。

<input type="checkbox" class="active" name="active5" id="active5" checked="checked" value="5">

これを設定して、ボックスをオンまたはオフにしたときに、データベース内の「アクティブな」値が更新されるようにする必要があります。クリックされたときに各チェックボックスの値を取得し、その値を MySQL データベースに送信するにはどうすればよいですか。nameチェックボックスを事前に知っていれば簡単に実行できますが、name部分的にデータベースから生成されるため、アクティブな値を取得するエントリを決定するコードの書き方がわかりません。

これが私のjQueryです..

$("input.active").click(function() {
// store the values from the form checkbox box, then send via ajax below
var check_active = $(this).is(':checked') ? 1 : 0;
var check_id = $(this).attr('value');

console.log(check_active);
console.log(check_id);

    $.ajax({
        type: "POST",
        url: "http://nowfoods.marketspacecom.com/nextstep/ajax.php",
        data: {id: check_id, active: check_active},
        success: function(){
            $('form#submit').hide(function(){$('div.success').fadeIn();});

        }
    });
return true;
});

これがPHPです..

<?php

include("dbinfo.inc.php");
mysql_connect($server,$username,$password);
@mysql_select_db($database) or die( "Unable to select database"); 

// CLIENT INFORMATION
$active = mysql_real_escape_string($_POST['active']);
$id = mysql_real_escape_string($_POST['id']);

$addEntry = "UPDATE entries SET active = '$active' WHERE id = '$id'";
mysql_query($addEntry) or die(mysql_error());


mysql_close();

?>

私が構築しているもののスクリーンショット

4

2 に答える 2

1

入力にクラスを追加し、代わりに値を id に設定できます。

<input class="active" type="checkbox" name="active5" id="active5" value="5" checked="checked">

次に、jQuery を変更します。

$("input.active").click(function() {
// store the values from the form checkbox box, then send via ajax below
var check_active = $(this).is(':checked') ? 1 : 0;
var check_id = $(this).attr('value');

    $.ajax({
        type: "POST",
        url: "http://nowfoods.marketspacecom.com/nextstep/ajax.php",
        data: {id: check_id, active: check_active}
        success: function(){
            $('form#submit').hide(function(){$('div.success').fadeIn();});

        }
    });
return true;
});

PHPに関しては:

<?php

include("dbinfo.inc.php");
mysql_connect($server,$username,$password);
@mysql_select_db($database) or die( "Unable to select database"); 

// CLIENT INFORMATION
$active        = mysql_real_escape_string($_POST['active']);
$id = mysql_real_escape_string($_POST['id']);

// WHERE id=16 is just for testing purposes. Need to dynamically find which checkbox was checked and use that info to tell the query which ID to update. 
$addEntry  = "UPDATE entries SET active = '$active' WHERE id = '$id'";
mysql_query($addEntry) or die(mysql_error());

mysql_close();
?>

これはあなたが探しているものでなければなりません。思いつきで書いているので、細かい構文の問題があるかもしれませんが、大まかな考え方は理解していただければ幸いです。:-)

于 2012-06-01T17:53:34.983 に答える
1

これは間違っています:

var active = $('#active').attr('value');

クリックされた要素を確認する必要があり、それがチェックされているかどうかを確認する必要があります (ID を渡すために使用しない限り、値はそれほど重要ではありません)。

var active = $(this).is(':checked');    // the checkbox is checked (boolean)

次のような整数値に設定できます。

var active = $(this).is(':checked') ? 1 : 0;

これは次の略です:

if ($(this).is(':checked')) {
  var active = 1;
} else {
  var active = 0;
}

そしてphpでは、ユーザー入力を正しく処理する必要があります:

$active = (int) $_POST['active'];

編集:編集したコードにあるべきではないスペースがあるようですが、設定すると機能しますか?

...
data: {"active=": check_active, "id": check_id},
...

また、両方の値が整数である/整数である必要があるため、文字列関数を使用してデータベース用にそれらをエスケープする実際の用途はありません。整数をテストするか、少なくとも整数にキャストする必要があります。

// CLIENT INFORMATION
$active = (int) $_POST['active'];
$id = (int) $_POST['id'];
于 2012-06-01T17:49:27.183 に答える