Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрип загрузки изображений к записям по ID
 
 автор: tima2010   (22.08.2011 в 16:49)   письмо автору
 
 

привет! создаю записи к каждой записи нужно прикреплять изображение, решил переименовывать изображения под ID записи (в дальнейшем может быть лучше отдельную папку создавать если больше 1 изображения)

волнует то как обрабатывается ID записи, получаю его методом сортировки вывожу последнюю запись, но вдруг за время пока производится сортировка добавиться еще одна :(
верное ли мое решение?

код:


<?php
include ('config.php');

$patchimages $_SERVER['DOCUMENT_ROOT']."/images/";

$firstname $_POST['firstname'];
$lastname $_POST['lastname'];

mysql_query("INSERT INTO $dbtable (firstname, lastname) VALUES('$firstname', '$lastname')") or die(mysql_error());


$query "SELECT * FROM $dbtable ORDER BY id DESC limit 1"//получаю последнюю запись из таблицы
$res mysql_query($query) or die(mysql_error());
$row mysql_num_rows($res);
while (
$row mysql_fetch_array($res)) {

//загрузка изображения
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
move_uploaded_file($_FILES["filename"]["tmp_name"], $patchimages.$row["id"].".jpg"); //переименовываю в id последней записи в таблице
echo "Файл обновлен";
} else {
echo(
"Ошибка загрузки файла");
}

}


mysql_close();

//header ("Location: index.php")            
?>



Спасибо!

  Ответить  
 
 автор: cheops   (22.08.2011 в 17:05)   письмо автору
 
   для: tima2010   (22.08.2011 в 16:49)
 

Лучше воспользоваться специальной функцией mysql_insert_id() - она возвращает первичный ключ, назначенный по механизму AUTO_INCREMENT для только что выполненного оператора INSERT. Причем данные извлекаются из сессии текущего соединения и не имеет значения сколько успелось вставится новых записей между фактом выполнения INSERT и вызовом функции mysql_insert_id() - вам будет возвращено правильное значение.

А в вашем решении да, остается вероятность коллизии (да и лишний запрос выполняется).

  Ответить  
 
 автор: tima2010   (22.08.2011 в 19:48)   письмо автору
 
   для: cheops   (22.08.2011 в 17:05)
 

Большое спасибо! буду теперь знать и пользоваться!
итоговый код


<?php
include ('config.php');

$patchimages $_SERVER['DOCUMENT_ROOT']."/images/";
echo 
$patchimages;

$firstname $_POST['firstname'];
$lastname $_POST['lastname'];

mysql_query("INSERT INTO $dbtable (firstname, lastname) VALUES('$firstname', '$lastname')") or die(mysql_error());


$curentid mysql_insert_id(); // получаем id добавленной записи из текущей сессии

if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
move_uploaded_file($_FILES["filename"]["tmp_name"], $patchimages.$curentid.".jpg");
echo 
"Файл обновлен";
} else {
echo(
"Ошибка загрузки файла");
}

mysql_close();

//header ("Location: index.php")            
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования