0

ここで完全な初心者の質問があります。複数のチェックボックス エントリをデータベースの 1 つの列に入れるのに問題があります。私は自分のphpでいくつかのことを試しましたが、何も正しく動作しないようです. 私はシリアライズを使用してみましたが、内破/爆発の使用を検討しました。申し訳ありませんが、基本的にスプーンで食べてもらいたいのですが、それは簡単な修正であることがわかっているためです。まだ何も機能していません。任意の支援をいただければ幸いです。ありがとう!!!また、私が持っている3つのチェックボックスはsystem、comm、およびotherであり、phpがまだそれらを処理するように設定されていないにもかかわらず、3つの入力用のブラケットがあるため、今のところ私のDBはこれらの入力の配列を表示しています. これが私のphpです

    <?php
$con = mysql_connect("localhost","Andrew","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);

$sql="INSERT INTO persons (firstname, lastname, modelid, system, department, comm,  other, shift, comments)
VALUES
  ('$_POST[firstname]','$_POST[lastname]','$_POST[modelid]','$_POST[system]','$_POST[departme    nt]','$_POST[comm]','$_POST[other]','$_POST[shift]','$_POST[comments]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);
?> 
4

5 に答える 5

0

チェックボックスをコンマ区切りのリストとして単一のフィールドに保存する

これは、通知を生成しないクリーンな方法でありundefined index/variable(チェックボックスがオフの場合、投稿値として送信されないことに注意してください)、$names配列に追加するだけでチェックボックスを追加できます。

<?php

$names = array('system', 'comm', 'other');

$checkboxes = array();

foreach($names as $name)
{
    $value = 0;

    if(isset($_POST['checkboxes']) && is_array($_POST['checkboxes']) && in_array($name, $_POST['checkboxes']))
    {
        $value = 1;
    }

    $checkboxes[] = $value;
}

$checkboxString = implode(',', $checkboxes);

?>

これで、クエリで使用でき$checkboxStringます。$checkboxStringチェックボックスの値を示すために、0または1のコンマ区切りのリストになります。0,1,1例:system = off、comm = on 、other=on:。

HTMLは次のようになっている必要があります(チェックボックス配列を使用):

<input type="checkbox" name="checkboxes[]" value="system" /> System<br />
<input type="checkbox" name="checkboxes[]" value="comm" /> comm<br />
<input type="checkbox" name="checkboxes[]" value="other" /> other
                                       ^^ square brackets for an array

SQLインジェクション

コードは脆弱であるため、これを調査する必要があります。次の方法でユーザー指定の値を実行しますmysql_real_escape_string()

$firstname = mysql_real_escape_string($_POST['firstname']);

クエリ:

VALUES
  ('$firstname', ..............

MySQLライブラリ

コードは古いmysql_*ライブラリを使用しています。これは段階的に廃止されているため、 PDOMySQLiなど、すべての新しいコード用に別のライブラリを選択する必要があります。

于 2012-10-05T07:49:39.997 に答える
0

これを試して

$value ="";
if(isset($checkbox1)){
$value = $value."1";
$flag =1;
}
if(isset($checkbox2)&&$flag==1){
$value = $value.",1";
$flag =1;
}
else{
$value = $value."0,1";
$flag =1;
}  
 if(isset($checkbox3)&&$flag==1){
$value = $value.",1";
$flag =1;
}
else{
$value = $value."0,0,1";
$flag =1;
}  

アプリケーションに応じて、0 または 1 に任意の値を使用できます。

于 2012-10-05T07:45:48.543 に答える
0

これが、複数のエントリをデータベースの単一のセルに入れるために使用したものです

('$_POST[firstname]','$_POST[lastname]','$_POST[modelid]','". implode(",", $_POST['system']) ."','$_POST[department]','". implode(",", $_POST['comm']) ."','". implode(",", $_POST['other']) ."','$_POST[shift]','$_POST[comments]')";

したがって、これは将来、同じ単純な目標を達成しようとしている人に役立つ可能性があります。私の唯一の問題は、データベースのエントリが切断されていることです。解決策は、配列をシリアル化することだと思います。ご支援いただきありがとうございます。

于 2012-10-09T04:57:37.123 に答える
0

上記のコメントの内容を詳しく説明するには:

$to_insert_in_db = $_POST['system'].','.$_POST['comm'].','.$_POST['other'];

これをデータベースの単一の列に挿入し、取得するときに次のようにします。

$retrieved_values = explode(',', $column_value_from_db);

ただし、システム、comm などの値がもう少し複雑な場合 (文字列など) は、json_encode を使用してデータベースに値を追加し、json_decode を使用してデータベースから値を取得することをお勧めします。

$values = array('system' => $_POST['system'], 'comm' => $_POST['comm'], 'other' => $_POST['other']);
$column_to_insert = json_encode($values);
$values = json_decode($column_value_from_the_database);
于 2012-10-05T07:27:33.890 に答える
0

チェックボックスには固有の問題があります。つまり、チェックされている場合はデータとともに送信される値がありますが、チェックされていない場合は変数がなく、未定義の変数が返されるため、各チェックボックス変数を使用するたびにこのようにします

$check1Val = 0;
if(isset($_POST["check1"]){
  $check1Val = 1;
  //or $check1Val = $_POST["check1"];
}

最後に、各変数を連結して単一の列に送信します

$allCheckValues = $check1Val.",".$check2Val;

チェックボックスやその他についてまだ混乱がある場合はお知らせください

于 2012-10-05T07:34:16.430 に答える