|
|
|
| привет! создаю записи к каждой записи нужно прикреплять изображение, решил переименовывать изображения под 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")
?>
|
Спасибо! | |
|
|
|
|
|
|
|
для: tima2010
(22.08.2011 в 16:49)
| | Лучше воспользоваться специальной функцией mysql_insert_id() - она возвращает первичный ключ, назначенный по механизму AUTO_INCREMENT для только что выполненного оператора INSERT. Причем данные извлекаются из сессии текущего соединения и не имеет значения сколько успелось вставится новых записей между фактом выполнения INSERT и вызовом функции mysql_insert_id() - вам будет возвращено правильное значение.
А в вашем решении да, остается вероятность коллизии (да и лишний запрос выполняется). | |
|
|
|
|
|
|
|
для: 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")
?>
|
| |
|
|
|