0

これを行う最善の方法、または可能かどうかはわかりません。基本的に、次のようなチェックボックスがあります。

php

foreach($clients as $client){
    echo'
    <input type="checkbox"  name="client_data[]" value="'.$class_id.'">
    '.$client['first_name'].' ('.$client['nickname'].') '.$client['last_name'].'
            <br />';
   } // foreach($client

HTMLはこんな感じ

<form method="post" action="">
<input type="checkbox" value="?" name="client_data[]">
Dwayne (The Rock) Johnson<br>

<input type="checkbox" value="?" name="client_data[]">
Steve (Puddin) Robinson<br>

<input type="submit" value="Add" name="exist_to_class">
</form>

フォームが送信されたら、挿入したい

$first_name, $nickname, $lastname

次のようなクエリを使用してデータベースに入力します。

mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`) 
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");

これは可能ですか、それとも私がこれを設定しようとしている方法に近づいていますか? 私はこれまであまり運がありませんでした。

私のdbテーブルは次のようになります:

クライアント テーブル

異なるclass_idでクライアントに複数回入ることができる必要があります。

これを達成するための最良の方法は何ですか?

関数を呼び出してデータを db に挿入するコードは次のとおりです。

if (isset($_POST['exist_to_class'])){
if (empty($_POST['client_data']) === true){
    $errors [] = 'You much select a client to be added to the class.';
} else {
    if (isset($_POST['client_data']) && !empty($_POST['client_data']));
     list($first_name, $nickname, $last_name) = explode('|', $_POST['client_data']);
     exist_client_to_class($class_id);
     header('Location: view_class.php?class_id='.$class_id.' ');

}

} //isset

そして、ここに私の質問があります:

function exist_client_to_class($class_id, $user_id){
$class_id = (int)$class_id;
$user_id = (int)$user_id;


mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`) 
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");
}

私は何を間違っていますか?

4

2 に答える 2

1

1 つのチェックボックスで複数の変数を渡すことはできません。Marc B は正しいです。これがデータベースに支援されたアプリケーションである場合、正しい方法は、選択した人の ID をチェックボックスに送信させ、その ID を使用して、その人について必要な情報を検索することです。 .

データベースを使用していない場合、これを行う手っ取り早い方法は、人物に関する情報を配列に入れ、それを実行しserialize()て文字列に変換し、それを値属性として使用することです。もう一方の端では、それを実行してunseialize()、必要な値を持つ配列を取得できます。

これを行う場合は、SQL クエリをエスケープするか、(非常に強く推奨される) 準備済みクエリを使用する必要があることに注意してください。

于 2012-11-08T20:19:29.140 に答える
0

わかりました、アサドが提案したように値の文字列をパスし、サーバー上で分割するよりも、このようにすることができます

foreach($clients as $client){
    echo'
    <input type="checkbox"  name="client_data" value="'.$class_id.'|'.$client['first_name'].'|'.$client['nickname'].'|'.$client['last_name'].'">
    '.$client['first_name'].' ('.$client['nickname'].') '.$client['last_name'].'
    <br />';
} // foreach($client

サーバー上には次のようなものがあります

list($class_id, $first_name, $nickname, $last_name) = explode('|', $_POST['client_data'])
mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`) 
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");

テンプレートの $class_id 変数とモデルの $user_id がどこにあるのかわからないので、それを理解する必要があります。また、ここでの欠点は、一部の変数に区切り記号が配置される場合です。データが間違って分割されます。それを避けるために、メインのチェックボックスに何らかの形で関連付けられた非表示の入力を使用することができます (javascript、ロジック、またはあなたのケースで最もうまくいくものは何でも)

UPD:そうそう、データを配列としてシリアル化/非シリアル化することができますhttp://us3.php.net/serialize as octern 提案

于 2012-11-08T20:36:47.353 に答える