1

複数のチェックボックスの選択を単一のデータベース列に挿入するための簡単な解決策を探しています。ユーザーがボックス1、4、および6-を選択すると、データベースに「1、4、6」が反映されます。コンマは適切ですが、必須ではありません。チェックボックスを1つ選択すると、情報が正しく挿入されます。複数を選択すると、最後の1つだけがDBに挿入されます。他のすべては正常に機能していますが、これらのチェックボックスは非常に重要です。使ってみました

<?php
if(isset($_POST['mode'])) {
    $mode = implode(",", $_POST['mode']);   
} else {
    $mode = "";
}
?>

<?php

同じ質問をしている人のために別の人が提案したように、この方法では、何が選択されていても、列の中に数字ではなく「配列」が残ります。

説明をわかりやすくするために写真を投稿しようとしましたが、許可されません。私はSQLやPHPの専門家ではなく、このデータベースをかなり迅速に稼働させるために必要なだけのことを学ぼうとしています。この問題の解決策があれば、私に教えてください。

送信時のアクションスクリプトに使用しているコードは次のとおりです。

<?php
if(isset($_POST['mode'])) {
$mode = implode(",", $_POST['mode']);   
} else {
$mode = "";
}
?>

<?php

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Get values from form 
$gamename=$_POST['gamename'];
$region=$_POST['region'];
$mode=$_POST['mode'];
$notes=$_POST['notes'];

// Insert data into mysql
$sql="INSERT INTO $tbl_name(gamename, region, mode, notes)VALUES('$gamename', '$region', '$mode', '$notes')";
$result=mysql_query($sql);

// if successfully insert data into database, displays message "Successful". 
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='insert.php'>Back to main page</a>";
}

else {
echo "ERROR";
}
?> 

<?php 
// close connection 
mysql_close();
?>

そして、これが私のチェックボックスのコードです:

<td><input type="checkbox" name="mode[]" id="mode" value="1" />
 mode 1<br />
<input type="checkbox" name="mode[]" id="mode" value="2" />
  mode 2<br />
<input type="checkbox" name="mode[]" id="mode" value="3" />
  mode 3<br />
<input type="checkbox" name="mode[]" id="mode" value="4" />
  mode 4 <br /> 
<input type="checkbox" name="mode[]" id="mode" value="5" />
  mode 5 <br />
<input type="checkbox" name="mode[]" id="mode" value="6" />
  mode 6 <br />
<input type="checkbox" name="mode[]" id="mode" value="7" />
  mode 7<br />
<input type="checkbox" name="mode[]" id="mode" value="8" />
  mode 8
  </td>

補足として、DBとWebサイトが単純なエクスプロイトに対して脆弱でないことを確認するためにどのような手順を実行する必要がありますか。私は、これらのフォームを一般の人々がデータベースに公開して情報を提出するために使用することを計画しています。

4

2 に答える 2

3

正しい$mode変数をオーバーライドするためArray、テーブルデータに表示されます。

コードから次の行を削除します。

$mode=$_POST['mode'];

脆弱性について: 文字列を次のようにエスケープする必要があります。

$gamename = mysql_escape_string($_POST['gamename']);
$region = mysql_escape_string($_POST['region']);
$notes = mysql_escape_string($_POST['notes']);
于 2013-01-21T23:27:52.093 に答える
-1

次のコードを使用して、チェックボックスを、選択したボックスがコンマで区切られた文字列に変換できます。

function checkboxToString($check){
    while (list ($key,$val) = @each ($check)) { 
        $string .= $val.",";
    }       
    return $string;
}

例: ボックス 1、3、および 4 をオンにすると、1、3、4 が返されます。はい、最後に余分なコンマを置きます。単純なコード行を使用して最後のカンマを削除できます (最適ではないかもしれません)。これを最後に追加するだけです:

$string = substr($string,0,strlen($string)-1);

これにより、文字列の最後の文字が削除されます。

于 2013-01-21T23:24:08.250 に答える