Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с увеличением id заказа

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
lawer85
Отправлено: 10 Сентября, 2013 - 16:43:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




Есть такая форма для заказа

CODE (html):
скопировать код в буфер обмена
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.  
  5.         <title>Заголовок</title>
  6. </head>
  7. <body>
  8.         <form name="form" action="dobavlenie_zakaza.php" method="post">
  9.                 <table>
  10.                         <tr>
  11.                                 <td><b>Сделать заказ</b></td>
  12.                         </tr>
  13.                         <tr>
  14.                                 <td>Имя покупателя:</td>
  15.                                 <td>
  16.                                         <input type="text" name="name_of_buyer" />
  17.                                 </td>
  18.                         </tr>  
  19.                         <tr>
  20.                                 <td>e-mail:</td>
  21.                                 <td>
  22.                                         <input type="text" name="e-mail" />
  23.                                 </td>
  24.                         </tr>  
  25.                         <tr>
  26.                                 <td>Комментарий:</td>
  27.                                 <td>
  28.                                         <input type="text" name="comment" />
  29.                                 </td>
  30.                         </tr>
  31.                         <tr>
  32.                                 <td>
  33.                                         <input type="submit" value="Заказать" name="Отправить" />
  34.                                 </td>
  35.                         </tr>                          
  36.                 </table>
  37.         </form>
  38. </body>
  39. </html>



Вот обработчик

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.  
  4. if(isset($_POST["Отправить"])) {
  5. require ("function.php");
  6.         $mysqli = new mysqli("localhost", "root", "", "bd");
  7.         $mysqli->query("SET NAMES 'utf8'");
  8.         $mysqli->query("INSERT INTO `bd`.`заказ` (`id`, `id_zakaz`, `name`, `e-mail`, `comment`, `date`) VALUES (NULL, '".Up()."', '".$_POST["name_of_buyer"]."', '".$_POST["e-mail"]."', '".$_POST["comment"]."', '".time()."')");
  9.         $mysqli->close();
  10.         }
  11.         echo "<a href='".$_SERVER[HTTP_REFERER]."'>Назад</a>"
  12. ?>


подставляемая функция

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function Up() {
  3. static  $i;
  4. $i++;
  5. return $i;
  6. }
  7. ?>


Я хотел чтобы id заказа (столбец в БД id_zakaza) увеличивался с помощью этой функции, но этого не происходит. Я мог бы поставить автоинкремент в БД, но такое значение уже выбрано для столбца id
 
 Top
teddy
Отправлено: 10 Сентября, 2013 - 17:05:33
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




lawer85 пишет:
Проблема с увеличением id заказа

Так используйте id добавленного заказа. Если id на котором висит автоинкремент например 5, значит это 5ый заказ и новое поле здесь даже и не нужно.

Если очень хочется добавить новое поле тогда придется делать UPDATE наряду с insert, mysqli предлагает multi_query для таких запросов

Больше пока предложить нечего. ИМХО первый вариант самый простой, понятный и оптимальный.
 
 Top
esterio
Отправлено: 10 Сентября, 2013 - 17:12:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)





lawer85 пишет:
INSERT INTO `bd`.`заказ`

Только за ето растрел
 
 Top
lawer85
Отправлено: 10 Сентября, 2013 - 17:38:49
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




teddy пишет:
lawer85 пишет:
Проблема с увеличением id заказа

Так используйте id добавленного заказа. Если id на котором висит автоинкремент например 5, значит это 5ый заказ и новое поле здесь даже и не нужно.

Если очень хочется добавить новое поле тогда придется делать UPDATE наряду с insert, mysqli предлагает multi_query для таких запросов

Больше пока предложить нечего. ИМХО первый вариант самый простой, понятный и оптимальный.


А можно пример такого запроса?
 
 Top
teddy
Отправлено: 10 Сентября, 2013 - 18:09:24
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Я тут потестил, похоже multi_query здесь не подойдет. Во всяком случае у меня не вышло. Извращался аж до подзапросов Растерялся Сори за ложную информацию. А вообще лучше не извращайтесь и используйте просто id самого заказа, это именно то, что вам нужно... Если нет, то попробуйте сказать чем будет оличаться поле id на котором висит автоинкремент и поле id_zakaza? Ответ очевиден - ни чем.

lawer85 пишет:
А можно пример такого запроса?

$mysqli->multi_query("Первый запрос; Второй запрос");
(Добавление)
P.S: Нет смысла чесать левое ухо правой рукой

(Отредактировано автором: 10 Сентября, 2013 - 18:27:21)

 
 Top
lawer85
Отправлено: 10 Сентября, 2013 - 18:38:02
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




Да в принципе конечно Вы правы, но я просто выполняю учебное задание да и вдруг вообще надо будет выполнить такую задачу еще где-нибудь хотелось бы знать как. Неужели это не возможно?
 
 Top
teddy
Отправлено: 10 Сентября, 2013 - 18:47:28
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




lawer85 пишет:
вдруг вообще надо будет выполнить такую задачу еще где-нибудь хотелось бы знать как

Так выполняйте так же как и в этом случае - в чем проблема?

Если именно нужно поле id_zakaza: вы можете сначала добавить товар, затем сделать ещё один запрос к БД и получить последний ID в списке товаров, после сделать ещё один запрос к БД и апдейтнуть поле id_zakaza и присвоить ему значение последнего айди там где id равен тому что пришло из результата второго запроса.

Запутано? )) Ну вот, видите... + ко всему смысла нет. Таким образом вы только увеличите себе работу и наплодите лишние обращения к БД и ради чего? Ради того что у нас уже есть под рукой? Улыбка

(Отредактировано автором: 10 Сентября, 2013 - 18:55:32)

 
 Top
lawer85
Отправлено: 10 Сентября, 2013 - 18:57:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




teddy спасибо за пояснения.

А можете еще пояснить почему мой способ с функцией не работает ведь я в нее включил статическую переменную и при каждом вызове функции, а она вызывается при запросе к БД , переменная должна увеличиваться.
 
 Top
caballero
Отправлено: 10 Сентября, 2013 - 19:03:32
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
почему мой способ с функцией не работает ведь я в нее включил статическую переменную и при каждом вызове функции, а она вызывается при запросе к БД , переменная должна увеличиваться.

потому что ты не понимаешь как работает PHP

после каждой страницы контекст разрушаетсявместе с со всеми переменными. и каждый раз создается заново

(Отредактировано автором: 10 Сентября, 2013 - 19:04:00)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
teddy
Отправлено: 10 Сентября, 2013 - 19:10:39
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




А зачем это должно работать? Эта функция всегда будет возвращать в качестве результата единицу независимо от количества обращений к данному файлу.

Результат будет меняться только при повторном вызове данной функции а не при каждом обращении к файлу.

PHP:
скопировать код в буфер обмена
  1. function Up() {
  2. static  $i = 0;
  3. $i++;
  4. return $i;
  5. }
  6. echo Up();//1
  7.  


PHP:
скопировать код в буфер обмена
  1.  
  2. function Up() {
  3. static  $i = 0;
  4. $i++;
  5. return $i;
  6. }
  7. echo Up().", ";
  8. echo Up(); //Результат 1, 2
  9.  
 
 Top
lawer85
Отправлено: 10 Сентября, 2013 - 19:23:36
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




caballero пишет:
Цитата:
почему мой способ с функцией не работает ведь я в нее включил статическую переменную и при каждом вызове функции, а она вызывается при запросе к БД , переменная должна увеличиваться.

потому что ты не понимаешь как работает PHP

после каждой страницы контекст разрушаетсявместе с со всеми переменными. и каждый раз создается заново


Я это предполагал, но не был уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB