2010-11-07 7 views
0

Извинения заранее, если этот вопрос имеет неверный формат или немного толстый, но здесь идет ...удалить запись из базы данных после UNLINK

У меня есть форма PHP Wh ввода данных отзывов

Одна часть его сделки ж закачанные файлы.

Существует три флажка для трех возможных файлов, которые могут быть загружены в строку таблицы. В db есть 3 поля, связанные с этими возможными загрузками файлов. При нажатии на флажки формы соответствующие загруженные файлы будут отсоединены. Он работает нормально.

Вот моя головоломка. Как удалить/обновить правильную запись в db, соответствующую несвязанным файлам?

Проблема состоит в том, что 3 флажка названы одинаковыми в html: 'delpic []'. Значения, возвращаемые путем отметки флажков, другими словами, выгружаются в массив. Это ключ к управлению сокращением лаконично (я думаю).

Если только один файл для определенной строки должен быть отсоединен, как приложение может «узнать» соответствующее поле в mysql db для обновления?

Argghhh.

Том

+1

пожалуйста, воздержитесь от сокращающих регулярных английских слов без надобности. не все говорят на том же языке, что и вы. – stillstanding

+1

Приложение ничего не знает. Он просто выполняет алгоритм **, который вы ** написал.Что мешает вам заполнять имя файла в значение флажка? –

+0

Извинения также за сокращения. – Tom

ответ

0

Как это будет «знать», что ты скажешь это в сценарии с помощью соответствующего запроса. Скажите, что у вас есть поле «file_names» в таблице базы данных «таблица», в котором хранятся уникальные имена файлов, и все ваши файлы в ассоциированном каталоге имеют уникальные имена. Затем, когда вы делаете что-то для файла 'foo', вы будете запрашивать свою таблицу и смотреть на строку с «foo» в if и делать somethig в строке hat, используя соответствующий sql. например, для удаления этой строки.

$db = mysql_connect('YOUR_DB_ADDRESS','YOUR_DB_USER','YOUR_DB_PASS') or die("Database error"); 
mysql_select_db('YOUR_DB', $db); 

$SQL = 'DELETE FROM table WHERE file_names = "foo"'; 
mysql_query($SQL); 
+0

Да, но ваш SQL-запрос удаляет всю строку. Я хотел бы выполнить операцию обновления. Мой пример содержит таблицу с тремя полями для записи URL-адресов загруженных файлов. Чтобы изменить один загруженный файл, это означает его удаление, замену загрузки и обновление URL-адреса, который записывает местоположение файла. Использование флажков в форме для выбора, который уже загруженный файл на замену кажется тупиковым. Нет очевидного способа получить от операции, которая не работает, до теперь осиротевшего URL. – Tom

0

В вашей форме вы используете массивы. Я предполагаю, что эти массивы содержат имя файлов, которые вы хотите удалить, например, ниже?

<?php 
array => (
    [0] => 'file1.gif', 
    [1] => 'file2.gif', 
    [2] => 'file3.jpg' 
    // ... 
) 
?> 

Я лично рекомендую использовать первичные ключи из базы данных здесь вместо имен файлов (ваша таблица DB делает иметь первичный ключ, не так ли?), А затем извлечь строки из база данных. Таким образом, вы знаете, что строки существуют, и вы сможете получить имена файлов из таблицы.

Что касается фактического удаления, если ваша база данных поддерживает транзакцию, то я был бы более склонен делать это наоборот и удалить строки до файлов со следующим псевдокодом:

  1. Start сделка
  2. Удалить строку из базы данных
  3. Попытки удалить файл
  4. если (строка удалена) и (файл удален)
  5. Совершить транзакцию
  6. еще
  7. Откат транзакция и сообщение об ошибке
+0

Спасибо. Начиная с другого конца - сначала обновлять URL-адрес файла в таблице - более разумно. Я оказался там, где был, и подумал, есть ли выход. Нет: я застрял, поэтому время передумать по линиям. – Tom

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