0

正しいファイルを削除する問題に直面しています。ユーザーがアップロードしたファイルのリストを、アップロード時刻 (最後のアップロードが最初) で並べ替えて表示しています。3〜4個のファイルのリストがある場合、どのファイルをクリックして削除しても、リストの最初のファイル、つまり最後にアップロードされたファイルが削除されます。これは、特定のユーザーがアップロードしたファイルを表示する私のページです。

<?php
$uid=$faculty_data['faculty_id']; //Assigns logged in id to a variable
$query="SELECT * FROM uploads ORDER BY datetime DESC"; //Sorts by date time
$result=mysql_query($query);
while($row=mysql_fetch_assoc($result))
{
if($uid==$row['faculty_id']) //Checks if the logged in id matches with id in DB
{
echo '<form action="delete.php" method="POST">';
echo "<strong>File: </strong>";
$url=$row['link'];  
$new="http://tofsis.com/fileshare/".$url; 
echo "<a href='$new'>$new</a><br/>";
echo "<strong>On: </strong>".$row['datetime'];
echo '<br><input type="submit" name="delete" class="btn btn" value="Delete File"/>';
echo '<hr>';
echo '</form>';
}
}
?>

そして、これは私の削除ページです:

<?php
$uid=$faculty_data['faculty_id'];
$query="SELECT * FROM uploads ORDER BY datetime DESC";
$result=mysql_query($query);
if(isset($_POST['delete']))
{
 while($row=mysql_fetch_assoc($result))
{
if($uid==$row['faculty_id'])
{
 $url=$row['link'];
 $new="http://tofsis.com/fileshare/".$url; 
 $query="DELETE FROM uploads WHERE link = '$url'";
 $result=mysql_query($query);
 unlink($url);
}
}
 header('Location: my_uploads.php');
 exit();
 }
 else {
 echo '<script type="text/javascript">alert("Oops something went wrong!")</script>';
 header('Location: my_uploads.php');
 exit();
 }
?>

問題を解決できるように、どこが間違っているのか教えてください。

私のDBはどのように見えるか

ユーザーがアップロードしたファイルを表示しているマイ アップロード ページのスクリーンショット

4

3 に答える 3

2

いくつかの変更を行う必要があります。

 <?php
        $uid=$faculty_data['faculty_id']; //Assigns logged in id to a variable
        $query="SELECT * FROM uploads ORDER BY datetime DESC"; //Sorts by date time
        $result=mysql_query($query);
        while($row=mysql_fetch_assoc($result))
        {
        if($uid==$row['faculty_id']) //Checks if the logged in id matches with id in DB
        { 
        $file_id = $row['id'];
        echo '<form action="delete.php" method="POST">';
        echo "<strong>File: </strong>";
        $url=$row['link'];  
        $new="http://tofsis.com/fileshare/".$url; 
        echo "<a href='$new'>$new</a><br/>";
        echo "<input type='hidden' value='$url' id='file_path' name='file_path' />";
        echo "<input type='hidden' value='$file_id' id='id_file' name='id_file' />"; // new line
        echo "<strong>On: </strong>".$row['datetime'];
        echo '<br><input type="submit" name="delete" class="btn btn" value="Delete File"/>';
        echo '<hr>';
        echo '</form>';
        }
        }
?>

削除ページで、これ:

 <?php

         $file_id=$_POST['id_file'];
         $file_path = $_POST['file_path'];

         $query="DELETE FROM uploads WHERE id = $file_id";
         $result=mysql_query($query);
         unlink($file_path); //this should works on deleting the file

?>

それはトリックを行う必要があります;)

于 2013-02-27T15:38:19.270 に答える
0

使用可能なファイルごとに個別の POST フォームを作成しますが、このフォームには、参照するファイルに関する情報が含まれていません。値としてのキー$_POSTだけが含まれていると思います。deleteDelete File

削除ページで、存在しない変数からデータを読み取ります。

$uid=$faculty_data['faculty_id']

...そして、データベースからすべての$uidファイルを取得して、それらの ID を と比較します。IDがゼロの場合、すべての行を削除していると思います。

すること:

  1. 完全なエラー レポートを有効にします。これは、先に進む前に修正する必要があるものです。エラー メッセージの助けなしにコーディングすることは不可能です。ここに簡単な説明があります。

  2. 対応する ID を持つ非表示フィールドをフォームに追加します。

  3. $_POST任意の変数からではなく、 からフォーム データを読み取ります。

  4. WHERE次のようなことができるように、節などの基本的な SQL を学びます。

    DELETE FROM uploads
    WHERE faculty_id=333
    
  5. SQL インジェクションについて学びます。準備済みステートメントを提供するライブラリーを使用してください。

于 2013-02-27T15:42:43.753 に答える
0

ファイルIDを保存する別の隠し入力を追加し、削除スクリプトでそれを取得して使用します

于 2013-02-27T15:32:20.850 に答える