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

Форум MySQL

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

 

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

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

тема: Вывод последней записи
 
 автор: zloi_burgui   (06.02.2007 в 11:37)   письмо автору
 
 

Здраствуйте уважаемые знатоки PHP. У меня такой вопрос: пишу небольшую базу, есть форма для добавления записи в БД, после ввода хочу вывести что запись добавлена и вывожу саму запись запросом Select * from table order by id desc limit 1,1, и выводится не последняя запись, а предыдущая, то есть вводим в БД запись с номером 13, а после добавления выводится не 13 номер, а 12. Запрос на ввод и вывод даных в одном файле, возможно проблема в этом. Далее привожу сам файл:
<?
$host="localhost";
$user="root";
$passw="";
$dbase="proba";
$table="biblio";
mysql_connect($host,$user,$passw) or die ("З'єднання неможливе!");
mysql_select_db($dbase) or die ("БД недоступна");
/*Глобальні параметри*/
$id=$_POST["id"];
$kod=$_POST["kod"];
$keyw=$_POST["keyw"];
$misce=$_POST["misce"];
$biblio=$_POST["biblio"];
$autor=$_POST["autor"];
$naswa=$_POST["naswa"];
$opys=$_POST["opys"];
$sql="insert into $table (id, kod, keyw, misce, biblio, autor, naswa, opys) values ('$id','$kod','$keyw','$misce','$biblio','$autor','$naswa','$opys')";
$result=mysql_query($sql);
$vyvod="select * from $table order by id desc limit 1,1";
$res=mysql_query($vyvod);
echo "Record insert";
echo "<table border='1'>";
echo "<tr>";
echo "<td>ID</td>
<td>Код</td>
<td>Ключові слова</td>
<td>Місце збереження</td>
<td nowrap>Бібліографія</td>
<td nowrap>Автор</td>
<td>Назва</td>
<td>Опис</td>";
echo "</tr>";
while (list($id, $kod, $keyw, $misce, $biblio, $autor, $naswa, $opys)=mysql_fetch_row($res)){
/*малюєм таблицю з перемінними*/
echo "<tr>";
echo "<td>$id</td>
<td>$kod</td>
<td nowrap>$keyw</td>
<td>$misce</td>
<td>$biblio</td>
<td nowrap>$autor</td>
<td>$naswa</td>
<td>$opys</td>";
echo "</tr>";
}
print "</table>";
print '<meta http-equiv="refresh" content="2; url=input.html">';
?>
Помогите если не трудно поправить код, чтоб выводилась последняя, добавленая пользователем запись.
С уважением Роман

   
 
 автор: bronenos   (06.02.2007 в 11:42)   письмо автору
 
   для: zloi_burgui   (06.02.2007 в 11:37)
 

limit 0,1
записи с 0 идут

   
 
 автор: zloi_burgui   (06.02.2007 в 11:49)   письмо автору
 
   для: bronenos   (06.02.2007 в 11:42)
 

Спасибо. Использую Ваш совет.

   
 
 автор: Loki   (06.02.2007 в 11:42)   письмо автору
 
   для: zloi_burgui   (06.02.2007 в 11:37)
 

используйте
Select * from table order by id desc limit 1
или
Select * from table order by id desc limit 0,1

   
 
 автор: zloi_burgui   (06.02.2007 в 11:50)   письмо автору
 
   для: Loki   (06.02.2007 в 11:42)
 

Спасибо. Использую Ваш совет.

   
 
 автор: ZuArt   (06.02.2007 в 11:51)   письмо автору
 
   для: Loki   (06.02.2007 в 11:42)
 

А вообще - так нехорошо делать =))) указание сортировки заставляет базу просматривать все записи и отсортировать их - лишняя трата времени и ресурсов сервака - лучше делать получение данных запросом с условием "select * from $table where id=".$id...

а перед этим $id = $_POST['id'] если идентификатор получаем от формы - что нехорошо и неправильно... т.к. может быть такое, что получим один id от двух форм...

или
$id = mysql_insert_id(); если есть автоинкрементное поле (если у него просто другое имя, отличное от "id", то поправить запрос на получение "select ..." - указать его в условии)...

И кстать, если id все-таки передается из формы (как КОД записи), то сортировкой ты не выведешь последнюю ВВЕДЕННУЮ запись, если ввести код меньше, чем уже есть в базе =)))... так что юзай условие, а не сортировку - надежнее ;).

   
 
 автор: zloi_burgui   (06.02.2007 в 12:06)   письмо автору
 
   для: ZuArt   (06.02.2007 в 11:51)
 

Спасибо за совет.

   
 
 автор: ZuArt   (06.02.2007 в 12:11)   письмо автору
 
   для: zloi_burgui   (06.02.2007 в 12:06)
 

нзчт ;)
что смогу - подскажу

   
 
 автор: Loki   (06.02.2007 в 12:33)   письмо автору
 
   для: ZuArt   (06.02.2007 в 11:51)
 

Если поле проиндексировано, а это как правило именно так, то разницы вы не заметите. Кроме того, условие - это хорошо, вот только откуда вы его планируете взять? из головы? тут как раз и стоит задача найти последнюю строку, а вы, в качестве решения, предлагаете в запросе использовать номер, который этим запросом и предстоит найти.
а mysql_insert_id() это вообще из другой оперы.

   
 
 автор: ZuArt   (06.02.2007 в 12:43)   письмо автору
 
   для: Loki   (06.02.2007 в 12:33)
 

Вы глубоко ошибаетесь =) если смотреть на вышеуказанный код, то видно, что поле id является "сортировщиком", а по виду формы - уникальным кодом (идентификатором записи)...

Если я при вводе не могу различить, что написано на бумажке в строке с id=13 (ну плохой почерк или чернила потекли) я пропущу эту запись... впоследствии, заполнив эдак 5000 записей я наконец вспомню про 13 запись и введу ее... по сортирвке мне выдастся строка 5000, а не 13 - это во-первых...
а во-вторых, сортировка будет просматривать 5000 записей, для того, чтобы вывести строку 5000-ую в соответствии с сортировкой, причем неправильную =)... а поиск остановится на 13-ой записи, если поле в БД указано как уникальное, а если нет, то надо лимит в одну запись поставить, чтобы просмотр БД прекратился на 13 записи... и тут уж скажем прямо - индексировано поле или нет - суть не меняется просмотр 13 записей происходит быстрее, чем просмотр и сортировка 5000 записей.

а вот mysql_insert_id() - как раз и дает значение УНИКАЛЬНОГО поля последней записи, внесенной по insert - отсюда и возьму уникальное id, по которому выстрою условие - на то и голова, чтобы знать как эта функция работает =)))

   
 
 автор: Loki   (06.02.2007 в 12:57)   письмо автору
 
   для: ZuArt   (06.02.2007 в 12:43)
 

Нам неизвестно, является ли поле id автоинкрементным.
Если да, то код $id=$_POST['id'] будут неверен, а если нет, то код $id=mysql_insert_id();

   
 
 автор: Trianon   (06.02.2007 в 12:09)   письмо автору
 
   для: zloi_burgui   (06.02.2007 в 11:37)
 

А что передается в $_POST['id'] ?
Здесь напрашивается автоматическая генерация первичного ключа.

   
 
 автор: zloi_burgui   (06.02.2007 в 14:46)   письмо автору
 
   для: Trianon   (06.02.2007 в 12:09)
 

Да согласен сглупил с ID это аутоинкрементное поле. Уберу его с кода. Спасибо за замечания.

   
 
 автор: zloi_burgui   (08.02.2007 в 18:13)   письмо автору
 
   для: zloi_burgui   (06.02.2007 в 14:46)
 

Все заработало. Всем спасибо кто что-то подсказал.
Будете проезжать через мой город с меня пивооо :-)))
Спасибо Роман

   
Rambler's Top100
вверх

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