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

Форум PHP

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

 

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

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

тема: Формирование значения автоматически
 
 автор: nameivan   (18.05.2008 в 12:29)   письмо автору
 
 

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

   
 
 автор: cheops   (18.05.2008 в 12:52)   письмо автору
 
   для: nameivan   (18.05.2008 в 12:29)
 

Поле в таблице базы данных или имеется в виду поле в HTML-форме?

PS Много ли народу будет пользоваться сервисом (таблица одна на всех или у каждого своя)?

   
 
 автор: nameivan   (18.05.2008 в 13:04)   письмо автору
 
   для: cheops   (18.05.2008 в 12:52)
 

есть база данных, и есть форма с полями значения которых заносятся в базу.
Пользователь заполняет форму на странице 1 и переходит при нажатии на кнопку на страницу 2, на странице 2 в нужных местах расставляются значения которые ввел пользователь на странице 1. Есть одно поле на форме на странице 2 (№ договора) значение которого должно формироваться автоматом. Вот об этом речь

   
 
 автор: morkovkin   (18.05.2008 в 13:17)   письмо автору
 
   для: nameivan   (18.05.2008 в 13:04)
 

Не обязательно нужно связывать первую и вторую страницы.
Можно в это поле с номером договора вставлять последнее значение из бд(ячейка с номером договора), только увеличивать его на один.

   
 
 автор: sim5   (18.05.2008 в 13:20)   письмо автору
 
   для: nameivan   (18.05.2008 в 13:04)
 

А при получении данных с первой страницы они записываются сразу в базу или нет?

   
 
 автор: nameIvan   (18.05.2008 в 13:30)   письмо автору
 
   для: sim5   (18.05.2008 в 13:20)
 

нет, записываются в базу при нажатии на кнопку на сторой странице.
Подскажите как выдрать из базы последнюю запись

   
 
 автор: sim5   (18.05.2008 в 13:58)   письмо автору
 
   для: nameIvan   (18.05.2008 в 13:30)
 

У поля с автоинкрементом, сразу после вставки значения - mysql_insert_id(). Если его где-то хранить, то можно использовать.

   
 
 автор: nameIvan   (18.05.2008 в 14:24)   письмо автору
 
   для: sim5   (18.05.2008 в 13:58)
 

можете пример привести, а то не понятно пока

   
 
 автор: sim5   (18.05.2008 в 14:45)   письмо автору
 
   для: nameIvan   (18.05.2008 в 14:24)
 

Ну а что тут непонятного:

<?
//выполянем некую запись в базу
mysql_query("INSERT INTO.... ");
//сразу после этого запроса делаем запрос
$pid mysql_insert_id(); //$pid будет содержать номер последней записи

Если хранить $pid, то всегда можно узнать номер следующей (будующей) записи: $pid+1.

   
 
 автор: nameIvan   (18.05.2008 в 15:09)   письмо автору
 
   для: sim5   (18.05.2008 в 14:45)
 

спасибо, но немного не то. мне неолбходимо сначала выдернуть из базу последний ИД и по нему номер последнего договора, потом увеличить номер договора на 1 и только затем вписать все в базу.

я пробую прописать запрос
$Peremen=mysql_query("select `№_Dogovora` from `Table` order by `id`")+1;
но что-то не срабатывает

   
 
 автор: sim5   (18.05.2008 в 15:35)   письмо автору
 
   для: nameIvan   (18.05.2008 в 15:09)
 

А вы учитываете то, что какие либо записи были удалены? Оформляете договор (производите запись в базу) запоминайте номер последней записи, а потом используйте его. Тогда это не будет зависить от удаления последующих записей, при любой последующей записи он будет последним (я говорю о поле с автоинкрементом!). Перед оформлением нового договора, извлекайте его (конфиг файл, либо таблица кофигурации и т.п.), добавляйте 1 и вставляйте в форму (только для информации!). Что вас не устраивает? Либо не привязывайте номер договора к id записи, а формируйте его другим способом, например, по времени.

PS. Вообще же, зачем вам эта морока? После удачного оформления, вам лучше сделать перенаправление на другую страницу (защита от F5). Вот на этой странице можно и сообщить оформителю:
Уважаемый Иван Ианыч! Спасибо за.... Ваш номер договора №1234349323. и т.д., и т.п..
Зачем ему именно при оформлении знать этот номер?

   
 
 автор: nameIvan   (18.05.2008 в 15:40)   письмо автору
 
   для: sim5   (18.05.2008 в 15:35)
 

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

хотя это навернго уже не важно, только что дошло до меня. а если клиент откажется и не подпишет договор, то тогда в базе в колонке номер договора будет 0, и при следующем оформлении опять номера договоров начнутся с 1,2,3 .....

   
 
 автор: sim5   (18.05.2008 в 15:42)   письмо автору
 
   для: nameIvan   (18.05.2008 в 15:40)
 

Конечно нет. Если вы выберите обратную сортировку при запросе, то вы получите максимальный номер существующей в таблице записи.

   
 
 автор: nameIvan   (18.05.2008 в 15:48)   письмо автору
 
   для: sim5   (18.05.2008 в 15:42)
 

а что если перебирать базу и выбирать самый большой номер договора?
сохранять номер последней записи не выход - с базой могут работать сразу несколько пользователей

   
 
 автор: sim5   (18.05.2008 в 16:02)   письмо автору
 
   для: nameIvan   (18.05.2008 в 15:48)
 

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

   
 
 автор: nameIvan   (18.05.2008 в 16:16)   письмо автору
 
   для: sim5   (18.05.2008 в 16:02)
 

спасибо, наверно так и придется переделать всё и установить на поле номер договора актоинкремент

спасибо за помощь!

   
 
 автор: sim5   (18.05.2008 в 12:59)   письмо автору
 
   для: nameivan   (18.05.2008 в 12:29)
 

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

   
Rambler's Top100
вверх

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