Редактирование файлов перед записью в БД

Lestat621

Новичок
Есть две таблицы.
т1. id text
т2. id_img id img

Делаю форму для записи текста в БД с возможность добавления файлов.
Как можно загрузить файлы и редактировать до отправки формы.
Как я понимаю, предварительно записать img в БД. но тогда я не смогу указать ключ для id так как форма первой таблицы еще не создана.
Загрузка изображений.
PHP:
 if(isset($_POST['upload'])){ // кнопка upload находиться внутри формы
      foreach($_FILES['photoalbum']['name'] as $k=>$f){ // Цикл для сбора массива
         $new_name = rand(100, 100000000); // Переменная для ренейма загружаемых файлов
         $photoalbum = array();
         $photoalbum = $_FILES['photoalbum']['name'][$k];
         $photoalbum_type = $_FILES['photoalbum']['type'][$k];
         $photoalbum_size = $_FILES['photoalbum']['size'][$k];
         
         // Проверка типа данных
         if ((($photoalbum_type == 'image/gif') || ($photoalbum_type == 'image/jpeg') || ($photoalbum_type == 'image/pjpeg')
         || ($photoalbum_type == 'image/png'))|| ($photoalbum_type == 'image/tif') || ($photoalbum_type == '')){
            // Проверка размера загружаемого файла
            if($photoalbum_size <= 1048576){         
               if (is_uploaded_file($_FILES['photoalbum']['tmp_name'][$k])){
                  $photoalbum_type = str_replace('image/', '.', $photoalbum_type);
                  $photoalbum = $new_name . $photoalbum_type;
                  if (move_uploaded_file($_FILES['photoalbum']['tmp_name'][$k], "../images/". $photoalbum)){
                     
                     /* Самое интересное, как в данном запросе я могу сделать запись до того как нажал кнопку отправить и id из первой таблицы еще не существует. */
                     
                     require_once('connect.php');
                     $query = "INSERT INTO images(id, photo) VALUES('??', '$photoalbum')";
                     $result = mysql_query($query);
                     
                     echo 'Файл: '. $photoalbum . ' загружен.<br />';
                     echo '<img src="../images/' . $photoalbum . '" width="150" height="150" /><br />';
                     $photoalbum = '';   
                     mysql_close($DBASE);
                  }
               }
            }else{echo '"' . $photoalbum . '"  - <span style="color:red;" >привышает допущеный размер.</span><br /> ';}
         }else{echo '"' . $photoalbum . '"  - <span style="color:red;" >не соответствует стандартам.</span><br /> ';}
      }
   }
 

Breeze

goshogun
Команда форума
Партнер клуба
Как вариант навскидку:

Аплоадишь файлы куда-то, в сессии запоминаешь пути к файлам типа того:

$_SESSION['my_form_attach'][] = '/path/to/uploaded/file1.ext';
$_SESSION['my_form_attach'][] = '/path/to/uploaded/file2.ext';

при отправке формы сохраняешь форму, получаешь id, перемещаешь файлы на постоянное место жительства, если
этот путь временный, и сохраняешь реальные пути в базе c id формы.

далее вариации на тему чистки мусора и прочее(куда сохранять, как сохранять, порядок сохранения)
 

Breeze

goshogun
Команда форума
Партнер клуба
ну и самое главное -- это подход к организации кода, у тебя он сильно хромает
 

WMix

герр M:)ller
Партнер клуба
есть и другие варианты,
1. создать для начала пустую запись в таблице текстов, пометить статусом временная...
2. если на 1 текст 1 картинка перекинуть наоборот ключи те. текс ссылается на картинку а не картинка на текст.
если нет, создать промежуточную табличку... в которой после свяжешь
3. разрешить NULL для записи в табличку картинок, а после заменить на правильное ID

уверен есть еще множество вариантов
 

SiZE

Новичок
Создаете случайный идентификатор (id). И подставляете его значение в форму. Когда пользователь указывает файлы, они отправляются с этим id в какую-то временную папку. Затем запоминаем в базе или сессии к какому id относятся эти файлы, при сохранении формы проверяем ее id и тот что у нас уже есть.

Уникальный id избавит от случая когда пользователь открыл два окна с формой.
 

Lestat621

Новичок
Спс, за ответы, буду смотреть что получиться.

ну и самое главное -- это подход к организации кода, у тебя он сильно хромает
Не хотелось бы начинать работу PHP с корявым коды, так как к этому быстро привыкаешь. Подскажите что не так в коде?
 

Breeze

goshogun
Команда форума
Партнер клуба
Lestat621

у тебя все в кучу: аплоад, база(причем с коннектом на каждый файл посередине), html

"// Проверка типа данных" громоздкая, она может быть гораздо проще: массив с типами и проверка на вхождение в него
 

Breeze

goshogun
Команда форума
Партнер клуба
в твоем коде можно выделить четыре составляющие:

1. аплоад
2. обработка ошибок
3. сохранение результата в базу
4. вывод сообщения о результате(успех или ошибки)

их можно выделить в функции
 

Фанат

oncle terrible
Команда форума
Lestat621
Имей в виду, что читать имеет смысл только ответы Breeze
Он единственный написал по делу.
Остальные так - ерунду от нечего делать.

Писать нормальный код за 5 минут по "подсказкам" на форуме, увы, не научишься.
В любом случае, тебе надо сначала исправить самые большие проблемы
1. Отсутствие проверки файлов на ошибки. ПЕРВЫМ действием при обработке файла должна быть проверка $_FILES['photoalbum']['error'][$k] (такая нумерация, кстати, дико неудобная. куда лучше именовать поля, как file1, file2... - и дальше просто перебирать массив $_FILES в цикле)
2. SQL инъекции и работа с БД напрямую через функции API, а не специальную библиотеку. Почитай вот здесь http://habrahabr.ru/post/148701/ и используй хотя бы функцию, которая там приведена.

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

Lestat621

Новичок
Благодарю за советы.
По поводу ограничения в загрузке, хотелось бы сделать хороший блог)
 

Фанат

oncle terrible
Команда форума
хороший блог невозможно сделать сразу.
делай постепенно. сначала основной функционал, потом наводи красоту
вообще, отдельная загрузка файлов до сайтой статьи имеет смысл толкьо если ты загружаешь их аяксом. Ты аяксом загружаешь файлы?
 

Lestat621

Новичок
Я по аяксу только книгу прочитал, в теории вообще ни чего не делал. То же подумал что нужен аякс, но решил заморочиться только на PHP.
 

Фанат

oncle terrible
Команда форума
Тогда у тебя просто не может возникнуть ситуации, когда файлы загружаются раньше текста.

каким образом у тебя вставляются картинки в текст?
 

Lestat621

Новичок
PHP:
if(($row = mysql_fetch_array($result))){
   echo $row['text'];
   echo '<br />' .  $row['img']  . '<br />';
}
Ну, образно так.
 

Фанат

oncle terrible
Команда форума
Ты просто имя картинки вставляешь что ли? А можно не "образно", а как на самом деле?

Для блога, кстати, лучше сделать отдельную страницу фотоальбома, куда пользователь заливает картинки, и отдельную - с блогом, где он может вставлять в текст ссылки на картинки из фотоальбома.
 

Lestat621

Новичок
Ну да, просто вставляю картинки. Только не в текст, а после текста.
Я как то даже не задумывался, классная идея. )
 

Фанат

oncle terrible
Команда форума
Если ты вставляешь после текста, то откуда взялся твой первоначальный вопрос?
Зачем добавлять картинки в БД до отправки формы?
 

Lestat621

Новичок
Что бы можно было просмотреть изображения перед тем как добавить статью, а не после. Но идея с фотоальбомом убрала все лишние вопросы)
 
Сверху