Usuwanie plików z serwera oraz kasowanie rekordu w sql

0

Na wstępie chciałbym się przywitać , jestem nowym użytkownikiem forum. Co za tym idzie również zaczynam przygodę z php. Jestem na etapie pisania cms dla strony www. Jedne z opcji to dodawanie i usuwanie zdjęć. Zdjęcia dodaje poprzez wrzucanie pliku na serwer ftp oraz dodawanie wpisu w sql (link do pliku np. "upload/test.jpg"). Etap na którym stanąłem to usuwanie plików z ftp , aczkolwiek nie mogę dojść do tego żeby usunięty został zarówno plik jak i rekord w bazie danych. Posiadam dwa pliki php , imgdelete.php i usuwanie.php. Z góry dziękuję za pomoc i pozdrawiam.

imgdelete.php

 <?php

include_once ('../includes/connection.php');

header('Content-Type: text/html; charset=utf-8');


$dirname = "files";
$link = 'upload/'.$file;

    $dir = opendir('upload/');

    $query = $pdo->prepare('DELETE FROM images WHERE link = ?');
        $query->bindValue(1, $link);
        $query->execute();
        
    echo '<form action="usuwanie.php" method="get">';
    echo '<form action="imgdelete.php" method="post" autocomplete="off">';
    echo '<select name="file2">';
    while(false != ($file = readdir($dir)))
    {
        if(($file != ".") and ($file != ".."))
        {
            echo "<option value=".$file.">$file</option>";
        }
    }
    echo '</select>';
    echo '<input type="submit" value="Delete" class="submit" />';
    echo '</form>';
    
    
  ?>


<a style="margin-left: 40%;" href="../index.php">&larr; Powrót</a>

usuwanie.php

 <?php

include_once ('../includes/connection.php');

header('Content-Type: text/html; charset=utf-8');

$dirpath = "upload/";

    $file_to_delete = $_GET['file2'];
    if ( unlink ($dirpath.'/'.$file_to_delete) ) {
        
        echo $file_to_delete . " deleted.";
    } else {
        echo "Error.";
    }
  
?>

<a style="margin-left: 40%;" href="../admin/imgdelete.php">&larr; Powrót</a>
0
echo '<form action="usuwanie.php" method="get">';
    echo '<form action="imgdelete.php" method="post" autocomplete="off">'; 

to nie przejdzie. masz deklaracje dwoch formularzy.

poza tym nie zabezpieczasz sie przed tym ze jak ktos podmieni dane w zmiennej file2 z dformularza to kasuje ci wszystko jak leci.

idea jest taka.

  • wyswietlasz liste plikow tak jak robisz to teraz.
  • zamiast nazwy przesylaj id pliku z bazy danych,
  • po wyslaniu id, polacz sie z baza i sprawdz czy taki plik jest w bazie
  • jesli jest i klient moze go usunac to usun z bazy i jesli szczesliwie usunales z bazy to potem usun z folderu

ps. ( notabene pliki w bazie powinny byc bazowane na "hashowanej" nazwie i ta nazwe powinienes przesylac do bazy, unikniesz ryzyka gdy ktos poleci petla po id i usunie masowo pliki)

1

**novy911 **Co do zabezpieczeń to poczytaj o SQL injection:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1