За последние 24 часа нас посетили 20863 программиста и 1630 роботов. Сейчас ищут 1472 программиста ...

id не успевает появиться

Тема в разделе "Прочие вопросы по PHP", создана пользователем Slieptsov, 18 сен 2011.

  1. Slieptsov

    Slieptsov Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    48
    Симпатии:
    0
    Здравствуйте! Прошу совета у знатоков. Я загружаю изображение и записываю его имя в таблицу базы данных mysql, чтобы его вывести на страничке. При записи имени файла в поле name бд также создается id при помощи auto_increment в поле id_image. В чем проблема: при загрузке изображения я хочу его переименовывать в имя, которому равняется id, но этого добиться не могу, так как id еще не создан, id создается тогда, когда имя изображения (то которое я выбираю на компьютере) уже записано в базу, поэтому id в имя файла и не пишется. Подскажите, пожалуйста, как быть.
    Вот код:
    Код (Text):
    1.  
    2. if (Tools::isSubmit('submitAdvConf'))
    3.         {
    4.         foreach ($_FILES as $tmp)
    5.         {
    6.             if (isset($tmp) AND isset($tmp['tmp_name']) AND !empty($tmp['tmp_name']))
    7.             {
    8.                 $name = Configuration::get('BLOCKADV_IMG');
    9.                 Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'blockslides` (`name`)
    10.                 VALUES(\''.pSQL($name).'\')');
    11.                 $sql = 'SELECT * FROM `'._DB_PREFIX_.'blockslides`';
    12.                 if ($results = Db::getInstance()->ExecuteS($sql))
    13.                 foreach ($results as $row)
    14.                 Configuration::set('PS_IMAGE_GENERATION_METHOD', 1);
    15.                 if ($error = checkImage($tmp, '600000'))
    16.                     $errors .= $error;
    17.                 elseif (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($tmp['tmp_name'], $tmpName))
    18.                     return false;
    19.                 elseif (!imageResize($tmpName, dirname(__FILE__).'/slide'.$row['id_image'].'.jpg'))
    20.                     $errors[] = Tools::displayError('An error occurred during the image upload.');
    21.                 @unlink($tmpName);
    22.                 Configuration::updateValue('BLOCKADV_IMG', 'slide'.$row['id_image'].'.jpg');
    23.  
    24.             }
     
  2. alexfer

    alexfer Активный пользователь

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
  3. Slieptsov

    Slieptsov Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    48
    Симпатии:
    0
    Так а зачем этот rename, у меня ведь с id проблема?
     
  4. alexfer

    alexfer Активный пользователь

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
    + еще надо хранить хеш в таблице и в hidden. Когда появится новая запись, сверяем хеш и переименовываем файл на идентификатор.
     
  5. Slieptsov

    Slieptsov Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    48
    Симпатии:
    0
    Что за хеш?
     
  6. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    забейте
    делайте инсёрт перед аплоадом
    везде где есть ошибка загрузки картинки поставьте delete из базы
     
  7. Slieptsov

    Slieptsov Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    48
    Симпатии:
    0
    Дело в том, что ошибки-то и нет как-бы - просто получается несостыковка в ftp файлы такие: image1.jpg, image2.jpg, image3.jpg, а в таблице бд: image1.jpg, image1.jpg, image2.jpg то есть в таблице как бы отставание идет, потому что id в начале не успевает создаваться...
     
  8. stopkran

    stopkran Активный пользователь

    С нами с:
    10 июл 2011
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Иркутск
    А почему не удаётся переименовать картинку (файл) после генерации ИД?
     
  9. Feiron

    Feiron Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    22
    Симпатии:
    0
    Пишите в базу затем через mysql_insert_id() получаете id, и копируете? Разве это не решает описанную проблему?
    Код (Text):
    1. mysql_insert_id(); //https://php.ru/manual/function.mysql-insert-id.html
     
  10. Slieptsov

    Slieptsov Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    48
    Симпатии:
    0
    Спасибо, я уже разобрался.