0 レビュー
7 回答
PHPのチェックボックスを使用して複数のレコードを削除する
チェックボックスを使用して複数のレコードを削除できるようにする必要があるという問題があります。
これが私が現在持っているコードです。
<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbName = "ticket_history";
$table_name = "ticket_history";
################ Connect to the Database and SELECT DATA ####################################
$conn = mysql_connect($host, $user, $pass) or die ("Unable to connect");
mysql_select_db($dbName);
$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name";
$result = mysql_query($query);
$count=mysql_num_rows($result);
#############################################################################################
?>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<table width=50%>
<form method="post" action="insert_ticket.php">
<table width border='0'>
<tr><td> Date:<input type="text" name="date"/></td>
<td>Ticket #:<input type="text" name="ticket"/></td></tr>
<table>
<tr><td>Description:<TEXTAREA COLS=50 name="description"></TEXTAREA></td></tr>
<tr><td> Result :<TEXTAREA COLS=50 name="result"></TEXTAREA></td></tr>
<tr><td><input type="submit" name="submit" value="Add"/></td></tr>
</table>
</table>
</form>
<form method="post" action="delete_ticket.php">
<input type="submit" name="delete" value="Delete"/>
</form>
</table>
<?php
print "<table width=80% border=1>\n";
$cols = 0;
while ($get_info = mysql_fetch_assoc($result)){
$id = $get_info->id;
if($cols == 0)
{
$cols = 1;
print "<tr>";
print "<th>Select</th>";
foreach($get_info as $col => $value)
{
print "<th>$col</th>";
}
print "<tr>\n";
}
print "<tr>\n";
print "<td><input type='checkbox' name='selected[]' id='checkbox[]' value=$id></td>";
foreach ($get_info as $field)
print "\t<td align='center'><font face=arial size=1/>$field</font></td>\n";
print "</tr>\n";
}
print "</table>\n";
mysql_close();
?>
<!
チェックした行を削除できるようにしたいだけです。これを効果的かつ効率的に行うにはどうすればよいですか?
よろしくお願いします。
わからない
0
レビュー
答え :
わからない
0
レビュー
答え :
解決策:
質問に対する簡単な答えは、次を使用することです:
$sql = sprintf('DELETE FROM ticket_history WHERE Auto IN ()',
implode(',', $checkbox));
しかし、人々が飛び込んであなたに言うように、あなたはSQLインジェクションに対して脆弱です。ユーザー入力を決して信用してはいけません。 IDを使用して削除しています。IDは整数である必要があると想定しています。
このようなものを使用すると、次のことが検証されます:
$ids = array();
foreach($_POST['selected'] as $selected) {
if (ctype_digit($selected)) {
$ids[] = $selected;
}
else {
// If one is invalid, I would assume nothing can be trusted
// Depends how you want to handle the error.
die('Invalid input');
}
}
$sql = sprintf('DELETE FROM ticket_history WHERE Auto IN (%s)',
implode(',', $ids));
その他の問題:
IDを使用しているようですが、最初のクエリでそのフィールドを選択していません。
$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name";
次に参照します:
$id = $get_info->id;
HTML出力が実際に期待どおりであることを確認してください。
削除クエリで、フィールドAutoを参照しています。それはあなたのIDフィールドですか?
そして最後に、ユーザーがそうする権限を持っているかどうかのチェックはありません。これが公開サイトの場合、誰でもそのテーブルから削除できます。
1つのフォーム内で2つの送信ボタンを使用する例:
<?php
if (isset($_POST['create'])) {
echo "Create!";
}
elseif (isset($_POST['delete'])) {
echo "Delete!";
}
?>
<html>
<form method="post">
<input type="submit" name="create" value="Create"/>
<input type="submit" name="delete" value="Delete"/>
</form>
</html>
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。