2016-02-09 1 views
0

Я пришел, насколько это в моем коде:Как разрешить пользователю удалять файлы из пути к базе данных и файла?

<?php 
include 'template/overall/header.php';?> 
<div class="large-12 medium-12 columns"> 
<table width="60%" border="1" align="center"> 
<tr> 
<th colspan="4"><label style="text-align: center"><b>Dina filer</b></label> <label style="text-align: center"><a href="ladda_fil.php"> Ladda upp en ny fil</a></label></th> 
</tr> 
<tr> 
<td>Fil Namn</td> 
<td>Fil Typ</td> 
<td>Fil Storlek(KB)</td> 
<td>Öppna</td> 
<td>Radera</td> 
</tr> 
<?php 
$sql="SELECT * FROM file LEFT JOIN users on userName"; 
$result_set=mysql_query($sql); 
if($result_set === FALSE) { 
die(mysql_error()); // TODO: better error handling 
} 
while($row=mysql_fetch_array($result_set)) 
{ 
    ?> 
    <form action="" method="POST"> 
     <tr> 
     <td><?php echo $row['file'] ?></td> 
     <td><?php echo $row['type'] ?></td> 
     <td><?php echo $row['size'] ?></td> 
     <td><a href="filer/mina_filer/<?php echo $row['file'] ?>" target="_blank">Öppna fil</a></td> 
     <td style="text-align: center; padding-top: 10px"><input name="delete" type="checkbox"></td> 
     </tr> 
    <?php 
} 
?> 
</table> 
<input type="submit" class="button" value="Radera filer" style="float: right; margin-right: 20%; padding: 0.7%; color: black; font-style: italic; font-size: 80%"> 
</form> 
</div> 
<?php 
if (isset($_POST['delete'])) { 
    $sql = "DELETE * FROM file WHERE"; 
    mysql_query($sql); 
} 
include 'template/overall/footer.php'; 
?> 

Куда я иду отсюда? Это начало удаления из базы данных, но оно не работает. Я новичок в php и пытаюсь понять это. Любая помощь приветствуется!

+1

Существует много нового, хороший ответ займет много времени. Начните с [Руководство - Работа с формами] (http://php.net/manual/en/tutorial.forms.php) – RiggsFolly

+0

Обязательно прочитайте о [** SQL injection **] (https: // www.owasp.org/index.php/SQL_Injection), среди прочих проблем. Если вы хотите, чтобы пользователи удаляли записи, не говоря уже о файлах, вам нужно сделать * lot * проверки ввода и проверки. –

+0

Также, пожалуйста, [не используйте mysql_ * '] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php?rq=1); функции 'mysql_ * 'устарели, [устарели] (http://us3.php.net/manual/en/intro.mysql.php) и небезопасны. Используйте ['MySQLi'] (http://us3.php.net/manual/en/book.mysqli.php) или [' PDO'] (http://us3.php.net/manual/en/intro. pdo.php). –

ответ

0

Использование unlink() функция вы можете удалять файлы из папки.

образец кода

$res=mysql_query("SELECT file FROM tbl_uploads WHERE id=".$_GET['remove_id']); 
    $row=mysql_fetch_array($res); 
    mysql_query("DELETE FROM tbl_uploads WHERE id=".$_GET['remove_id']); 
    unlink("folder/path/".$row['file']); 
  • Сначала записи выберите запрос для извлечения файла из базы данных.
  • Этот код может быть работа с если (Исеть ($ _ GET []) состояния.
  • После извлечения файла поместить извлеченный файл в функцию Unlink(), как выше.

UPDATE ::

Для удаления каталога, вы можете использовать rmdir().

И это полезно

realpath - Returns canonicalized absolute pathname.

is_writable - Tells whether the filename is writable.

Для инъекции SQL, мы можем использовать mysql_real_escape_string.

mysql_real_escape_string - Экранирует специальные символы в строке для использования в SQL statement.But это расширение было устаревшим в PHP 5.5.0, и он был удален в PHP 7.0.0. Вместо этого следует использовать расширение MySQLi или PDO_MySQL.

+0

Этот код широко открыт для [** SQL injection **] (https://www.owasp.org/index.php/SQL_Injection). –

+0

Это простой пример кода для удаления файла с помощью unlink(). –

+0

Это * плохой * код для этой цели. OP не знает, как написать SQL («Это начало удаления из базы данных ...»), но вы предоставили небезопасный SQL-код, который плохо взломает сайт OP. Ваше «решение» открывает новое отверстие безопасности и рекомендует использовать устаревшую библиотеку. –

0

Как @RiggsFolly сказал, что еще многое предстоит узнать. Этот ответ будет охватывать некоторые концепции того, что вы ищете. Для начала здесь есть некоторые дыры в безопасности. Сначала остановите использование mysql_* и вместо этого используйте mysqli_*, также вы должны использовать подготовленный оператор, чтобы избежать инъекции SQL. И также проверьте, принадлежит ли файл пользователю, пользователь может ввести любой file_id в свой POST или GET запрос и может удалить файл, который не является его.

Давайте посмотрим, как это сделать.

list_file.php где вы перечисляете файлы:

//list files 
while($row=mysql_fetch_array($result_set)) 
{ 
    ?> 
     <tr> 
     <td><?php echo $row['file'] ?></td> 
     <td><?php echo $row['type'] ?></td> 
     <td><?php echo $row['size'] ?></td> 
     <td><a href="filer/mina_filer/<?php echo $row['file'] ?>" target="_blank">Öppna fil</a></td> 
     <td style="text-align: center; padding-top: 10px"><a href="delete.php?file_delete=" . $row['file_id']>Delete</a></td> 
     </tr> 
    <?php 
} 
?> 

delete_file.php будет выглядеть примерно так:

<?php 

$file_id=$_GET['file_id']; 
$user_id=$_SESSION['user_id'];    //user ID stored in session at time of login 
$conn = new mysqli($servername, $username, $password, $dbname); 
if (isset($_GET['file_delete'])) { 
    $sql = "DELETE * FROM file WHERE ? && ? LIMIT 1"; // question indicate placeholders for later use, Also make sure to limit it to 1 
    $stmt = $conn->prepare($sql);    // prepare query 
    $stmt->bind_param("ii", $file_id, $user_id); // Bind values to the placeholders 
    if($stmt->execute()){      // execute the query OR delete the entry if it exists 
     $sql="SELECT * FROM file WHERE file_id = '". $file_id ."' LIMIT 1";  // select file name using file_id 
     $result=mysqli_query($sql); 
     if($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){ 
     unlink("folder/path/" . $row['file']);// Delete the file from server 
     } 
     }else{echo "Something went wrong!";} 
} 

?> 

Вы берете можете посмотреть на подготовленные заявления here

Кроме того, этот <a href="filer/mina_filer/<?php echo $row['file'] ?>" target="_blank"> является плохая идея. Вы можете связать его с скриптом download.php, отправить его или отправить параметры и использовать сценарий, чтобы получить файл, а не раскрывать каталог файлов. Взгляните на this и посмотрите, как выглядит сценарий загрузки

+0

Привет. это сайт только для моих друзей, которых я доверяю, поэтому я не очень беспокоюсь о SQL-инъекциях, но, конечно, я должен это узнать. Пользователь может просматривать только файлы, которые они загрузили самостоятельно на этой странице, так как они могут удалить кого-то еще? Как удалить значения этой строки: '$ stmt-> bind_param (« ii », $ result_set ['file_id'], $ user_id);' – BriefHeart

+0

'i' сообщает mysql, что это целое число, s' для строки, 'b' для blob и' d' для double. Остальные параметры - это помеченные вопросительные знаки. Все параметры должны быть перечислены в порядке. Злоумышленник может просто набрать файл 'file_id', который не принадлежит ему, и запустить скрипт, чтобы скрипт удалил чужой файл. – user3284463

+0

обновленный код, чтобы быть немного более понятным – user3284463

 Смежные вопросы

  • Нет связанных вопросов^_^