特定のディレクトリにある特定のイメージをユーザーが削除できるようにしようとしています。最初にディレクトリを指定してから、削除するイメージを指定する必要があります。1つのページからの複数の投稿
ギャラリーの選択結果に、選択したギャラリー内の画像の名前だけがドロップダウンに表示されるという難しい部分があると思ったことを達成できました。
私の問題は、ファイルを削除してテーブルから行を削除するif文をトリガーするために、2番目のフォームの送信ボタンが表示されないようです。私は、あなたがgal
チェックの内側にあなたのtoDelete
小切手を持っているおかげでトン!
<form action ='' name="form1" method='POST' enctype="multipart/form-data">
<p>Select Gallery: <select name="gal" style="color:black;">
<option value="" style="color:black;"><?php echo $gal; ?></option>
<option value="graphicdesign/logos" style="color:black;">GD logos</option>
<option value="graphicdesign/webdesign" style="color:black;">GD website design</option>
<option value="graphicdesign/advertisements" style="color:black;">GD Advertisements</option>
<option value="fineart/nature" style="color:black;">FA Nature</option>
<option value="fineart/people" style="color:black;">FA People</option>
<option value="fineart/landscapes" style="color:black;">FA Landscapes</option>
<option value="photography/misc" style="color:black;">PG Misc</option>
<option value="photography/nature" style="color:black;">PG Nature</option>
<option value="photography/people" style="color:black;">PG People</option>
</select></p>
<input type="submit" value="Set Galery" style="color:black;"></p>
<?php
$connect = mysql_select_db("cynthie") or die("couln't find db on 2 :(");
$metaData = mysql_query("SELECT `name`, `path_full`, `path_thumb`, `galId` FROM `images`") or die("couln't find table :(");
$gal = $_POST['gal'];
if (isset($_POST['gal']))
{
echo '<form action ="" method="POST" enctype="multipart/form-data"><p>Select Image: <select name="toDelete" style="color:black;"><p><option style="color:black;">select img</option></p>';
while ($displayData = mysql_fetch_assoc($metaData))
{
$names = $displayData['name'];
$path_full = $displayData['path_full'];
$path_thumb = $displayData['path_thumb'];
$galDb = $displayData['galId'];
if ($galDb != $gal)
{}
else
{
echo '<p><option style="color:black;">'.$names.'</option></p>';
}
}
echo '</select><p><input type="submit" value="Delete" style="color:black;"></p></form>';
$connect = mysql_select_db("cynthie") or die("couln't find db on 4 :(");
$delete = mysql_query("SELECT `id` FROM images WHERE name='$toDelete'") or die("couln't find table on line 81 :(");
$toDelete = $_POST['toDelete'];
if (isset($_POST['toDelete']))
{
unlink($path_full);
unlink($path_thumb);
mysql_query("DELETE FROM images WHERE `id`=$delete");
unset($delete);
echo '<p>removed!</p>';
}
else
{}
}
?>
これはSQLインジェクション攻撃に対してオープンです! '$ delete = $ _POST ['toDelete']'の 'id' = $ delete ''の画像から削除します。 –
管理パネルのような保護された領域に表示される場合は、どうすればいいですか?解決策は、別のページに関数を書いて渡し、ここで呼び出すことですか?または、削除を処理して戻ってくる別のページに飛び出すことができますか? – Jeremythuff
それでも、ページがどこにもリンクされていないという唯一の保護があるため、心配する必要があります。人々がそのページが存在しないことを知らないということは、それが見つからないということを意味するものではありません。それはあいまいさによるセキュリティです。解決策は、クエリのパラメータを適切にエスケープすることです(またはプリペアドステートメントを使用する)。もしそれが何を意味するのか分からなければ、おそらくSQLについてもう少し詳しく読む必要があります(例えばhttp://www.unixwiz.net/techtips/sql-injection.html参照) –