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 :: Заказ книг в библиотеке (выдача и возврат) [2]

 PHP.SU

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


 Страниц (4): « 1 [2] 3 4 »   

> Без описания
KuPbI4
Отправлено: 11 Декабря, 2010 - 22:28:19
Post Id


Частый гость


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


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




JustUserR пишет:
Пожалуйста! В качестве допустимого варианта осуществляющего решения задач проведения операций с информационными полями на стороне сервера БД целесообразно использования определяемых пользовательсих SQL-процедур - они предоставляют возможность осуществления прозвольных операций с хранимыми данными без обеспечения необходимости их передачи на сервер приложений Более подробная информация по данному вопросу предоставлена здесь http://www[dot]firststeps[dot]ru/sql/oracle/r.php?92 и здесь http://www.intuit.ru/department/database/sql/12/


разобрался.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE procedure `proc` (
  3. out id_books integer(11),
  4. out id_users integer(11),
  5. out fname varchar(50),
  6. out lname varchar(50),
  7. out otch varchar(50),
  8. out namebook varchar(50),
  9. out status_book integer(11),
  10. out date_book varchar(50)
  11. )
  12. SELECT id_books, id_users, fname, lname, otch, namebook, status_book, date_book
  13. FROM `status`
  14. LEFT JOIN users ON id_users = id_user
  15. LEFT JOIN books ON id_books = id_book
  16.  

(Отредактировано автором: 12 Декабря, 2010 - 04:19:45)

 
 Top
KuPbI4
Отправлено: 12 Декабря, 2010 - 04:21:38
Post Id


Частый гость


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


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




потом мне приходится вызвать процедуру через php-скрипт

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $i=0;
  4. $query="call proc()";
  5. $result=mysql_query($query);
  6. if(mysql_error()) {
  7.     echo mysql_error();
  8. } else {
  9.     while($row=mysql_fetch_row($result))
  10.         {
  11.             $i++;
  12.         }
  13. }
  14. ?>
  15.  

Выводит
Цитата:

Incorrect number of arguments for PROCEDURE bibl_system.proc; expected 8, got 0

пишет что некорректное число аргументов для процедуры бд.proc - ожидает 8 а получен 0
что здесь не так?! где исправить?

А если удалить процедуру
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. DROP procedure `proc`
  3.  

и пересоздать
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE procedure `proc` ()
  3. SELECT id_books, id_users, fname, lname, otch, namebook, status_book, date_book
  4. FROM `status`
  5. LEFT JOIN users ON id_users = id_user
  6. LEFT JOIN books ON id_books = id_book
  7.  

то выводит
Цитата:

Thread stack overrun: 6436 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack.

пишет что поток стеков переполнен

где могут быть ошибки?!

(Отредактировано автором: 12 Декабря, 2010 - 04:54:41)

 
 Top
KuPbI4
Отправлено: 12 Декабря, 2010 - 19:22:17
Post Id


Частый гость


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


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




Сделал другим способом.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE VIEW `view_s` AS SELECT `status`.`id_books`, `status`.`id_users`, `users`.`fname`, `users`.`lname`, `users`.`otch`, `books`.`namebook`, `status`.`status_book`, `status`.`date_book`
  3. FROM `status`
  4. LEFT JOIN `users` ON `id_users` = `id_user`
  5. LEFT JOIN `books` ON `id_books` = `id_book`
  6.  

затем вызываю вьюшку

показывает то что нужно
а как вызвать пхп скрипте?! но там ниче не выводит
PHP:
скопировать код в буфер обмена
  1.  
  2. $i=0;
  3.         $query="select * from view_s";
  4.         $result=mysql_query($query);
  5.         if(mysql_error()) {
  6.                 echo mysql_error();
  7.         }
  8.         else {
  9.     while($row=mysql_fetch_row($result))
  10.         {
  11.             $i++;
  12.         }
  13.         }
  14.  

подскажите, что сделать нужно?!
 
 Top
JustUserR
Отправлено: 12 Декабря, 2010 - 19:39:02
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




KuPbI4 пишет:
Пишет что некорректное число аргументов для процедуры бд.proc - ожидает 8 а получен 0
что здесь не так?! где исправить
Приведенная вами сигнатура SQL-процедуры включает необходимость явной передачи 8 аргументов для осуществления ее вызова - в то время как в процессе подачи SQL-запроса производится указание операции ее запуска без передачи соответствующего числа параметров В случае необходимо производиться промежуточное сеансовое хранение информаицонных полей на сервере БД и их использования в инстации процедуры - необходимо применение элементов вида @myvar


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
KuPbI4
Отправлено: 12 Декабря, 2010 - 19:51:18
Post Id


Частый гость


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


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




JustUserR пишет:
Приведенная вами сигнатура SQL-процедуры включает необходимость явной передачи 8 аргументов для осуществления ее вызова - в то время как в процессе подачи SQL-запроса производится указание операции ее запуска без передачи соответствующего числа параметров В случае необходимо производиться промежуточное сеансовое хранение информаицонных полей на сервере БД и их использования в инстации процедуры - необходимо применение элементов вида @myvar

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE procedure `my_proc` (
  3. out @id_books int,
  4. out @id_users int,
  5. out @fname varchar,
  6. out @lname varchar,
  7. out @otch varchar,
  8. out @namebook varchar,
  9. out @status_book int,
  10. out @date_book varchar
  11. )
  12. SELECT id_books, id_users, fname, lname, otch, namebook, status_book, date_book
  13. FROM `status`
  14. LEFT JOIN users ON id_users = id_user
  15. LEFT JOIN books ON id_books = id_book
  16.  

пишет
Цитата:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@id_books int, out @id_users int, out @fname varchar, out @lname varchar, ou' at line 2

что здесь не так? пробовал этот способ.
 
 Top
JustUserR
Отправлено: 12 Декабря, 2010 - 20:15:33
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




KuPbI4 Для осуществления возможности использования статических переменных хранение которых производится в текущем сеансе взаимодейтсвия с сервером БД - необходимо использованеи DECLARE-оператора в форме DECLARE @var_name TYPE


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
KuPbI4
Отправлено: 12 Декабря, 2010 - 21:35:00
Post Id


Частый гость


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


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




JustUserR пишет:
KuPbI4 Для осуществления возможности использования статических переменных хранение которых производится в текущем сеансе взаимодейтсвия с сервером БД - необходимо использованеи DECLARE-оператора в форме DECLARE @var_name TYPE

Что тут не так?
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE procedure `my_proc` (
  2.  
  3. )
  4. DECLARE @id_books int
  5. SELECT id_books, id_users, fname, lname, otch, namebook, status_book, date_book
  6. FROM `status`
  7. LEFT JOIN users ON id_users = id_user
  8. LEFT JOIN books ON id_books = id_book

ошибка
Цитата:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE @id_books int SELECT id_books, id_users, fname, lname, otch, namebook, ' at line 3

Недовольство, огорчение устал искать ошибки и читать мануалы. 2 дня парюсь... лучше бы готовый пример показали бы - создания процедуры, вызова процедуры и запись заказа в БД через id_books, id_users
 
 Top
KuPbI4
Отправлено: 13 Декабря, 2010 - 21:30:18
Post Id


Частый гость


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


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




Кто мне объяснит нормально?! Нахмурился Нахмурился
 
 Top
JustUserR
Отправлено: 14 Декабря, 2010 - 11:32:17
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




KuPbI4 Форма создания пользовательских SQL-процедур включает в себя необходимость использования линейной последовательности запрашивемых операторов для которых необходимо осуществление установки разделяющего символа - в целях диференциации уровня представленя элементом создаваемой процедуры и текущего SQL-запроса необходимо выполнение временной операции изменения текущего разделительного символа
Более подробная информация предоставлена в оригинальной документации http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]ed-routines[dot]html соответствующей СУБД


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
KuPbI4
Отправлено: 14 Декабря, 2010 - 14:18:08
Post Id


Частый гость


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


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




JustUserR пишет:
Форма создания пользовательских SQL-процедур включает в себя необходимость использования линейной последовательности запрашивемых операторов для которых необходимо осуществление установки разделяющего символа - в целях диференциации уровня представленя элементом создаваемой процедуры и текущего SQL-запроса необходимо выполнение временной операции изменения текущего разделительного символа
Более подробная информация предоставлена в оригинальной документации http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]ed-routines[dot]html соответствующей СУБД

ну это мануал.
я читал конечно.
а могли бы объяснить попроще?!
(Добавление)
Записывается id_book в БД.
Правда, другим способом - $_GET, а вот с id_user не записывает. Огорчение
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if (isset($_SESSION['user_id']))
  4. {
  5.         // показываем защищенные от гостей данные.
  6.  
  7. $q = mysql_query("SELECT * FROM books");
  8. if(mysql_num_rows($q) > 0) {
  9.   $count = 3; //выводить по 3 записи
  10.   $posts = mysql_num_rows($q);
  11.   $total = ceil($posts / $count);
  12.   if(isset($_GET['page'])) $page = intval($_GET['page']); else $page = 1;
  13.   if($page > $total) $page = $total;
  14.   $from = $page * $count - $count;
  15.   $query = mysql_query("SELECT * FROM books ORDER BY id_book LIMIT $from,$count");
  16.   $page = ($page <= 0) ? 1 : $page;
  17.   $seperator = '&nbsp;';
  18.   $page_string = ($page == 1) ? '<strong>1</strong>' : '<a href="catalog.php">1</a>';
  19.   $page_string .= $seperator;
  20.   for ($i = 2; $i < $total; $i++) {
  21.     $page_string .= ($i == $page) ? '<strong>' . $i . '</strong>' : '<a href="catalog.php?page=' . $i . '">' . $i . '</a>';
  22.       if ($i < $total) {
  23.         $page_string .= $seperator;
  24.       }
  25.   }
  26.   $page_string .= ($page == $total) ? '<strong>' . $total . '</strong>' : '<a href="catalog.php?page=' . $total . '">' . $total . '</a>';
  27.   while($b = mysql_fetch_array($query)) {
  28.     echo "
  29.   <table align='center' class='katal'>
  30.   <tr>
  31.   <td colspan='2' class='katal_title'>
  32.   <a href='catalog_view.php?id_book=$b[id_book]&ref=$page'>
  33.   <p class='katalog'>Название книги: $b[namebook]</p>
  34.   </a>
  35.   </td>
  36.   </tr>
  37.   <tr>
  38.   <td width='345px'>
  39.   <p>Список авторов: $b[authors]</p>
  40.   <p>Год издания: $b[year]</p>
  41.   <p>Место издания: $b[mesto]</p>
  42.   <p>Название издательства: $b[nameizd]</p>
  43.   <br>
  44.   <center>
  45.   <form action='catalog.php?id_book=$b[id_book]' method=post>
  46.   <input type='submit' name='submit' value='Выбрать эту книгу'/>
  47.   </select>
  48.   </form>
  49.   </center>
  50.   </td>
  51.   </tr>
  52.   </table>
  53.   ";
  54.   }
  55.   if($total != 1) {
  56.     echo "<br>Страницы: " . $page_string;
  57.   }
  58.   echo "<br><br>Всего в каталоге: ".$posts." <b>книг</b><br>";
  59. }
  60. else { echo "Книг <b>нет в библиотеке</b><br>"; }
  61.  
  62. $id_user = strip_tags(stripslashes(substr($_GET['id_user'],0,11)));
  63. $id_book = strip_tags(stripslashes(substr($_GET['id_book'],0,11)));
  64.  
  65. if (isset($_POST['submit'])){
  66.      
  67.    $status_book = strip_tags(stripslashes(substr($_POST['status_book'],0,11)));
  68.        
  69.         $query =  "INSERT INTO status (status_book, id_book, id_user) VALUES (1, '$id_book', '$id_user');";
  70.         if (mysql_query($query)) {
  71.                                         echo "Запись добавлена!<br>";
  72.                                         }
  73.                                         else {
  74.                                         echo "Запись не добавлена!<br>";
  75.                                         }
  76.                 }
  77.  
  78.         }
  79. else
  80. {
  81.         echo 'Доступ закрыт, даём ссылку на авторизацию. — <a href="login.php">Авторизоваться</a>';
  82. }
  83. ?>
  84.  

где исправить?
правда что тут скрипт авторизации выглядит так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. // если пользователь не авторизован
  5.  
  6. if (!isset($_SESSION['id_user']))
  7. {
  8.         // то проверяем его куки
  9.         // вдруг там есть логин и пароль к нашему скрипту
  10.  
  11.         if (isset($_COOKIE['login']) && isset($_COOKIE['password']))
  12.         {
  13.                 // если же такие имеются
  14.                 // то пробуем авторизовать пользователя по этим логину и паролю
  15.                 $login = mysql_escape_string($_COOKIE['login']);
  16.                 $password = mysql_escape_string($_COOKIE['password']);
  17.  
  18.                 // и по аналогии с авторизацией через форму:
  19.  
  20.                 // делаем запрос к БД
  21.                 // и ищем юзера с таким логином и паролем
  22.  
  23.                 $query = "SELECT `id_user`
  24.                                         FROM `users`
  25.                                         WHERE `login`='{$login}' AND `password`='{$password}'
  26.                                         LIMIT 1";
  27.                 $sql = mysql_query($query) or die(mysql_error());
  28.  
  29.                 // если такой пользователь нашелся
  30.                 if (mysql_num_rows($sql) == 1)
  31.                 {
  32.                         // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
  33.  
  34.                         $row = mysql_fetch_assoc($sql);
  35.                         $_SESSION['user_id'] = $row['id_user'];
  36.  
  37.                         // не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
  38.                 }
  39.         }
  40. }
  41.  
  42. if (isset($_SESSION['user_id']))
  43. {
  44.         $query = "SELECT `login`
  45.                                 FROM `users`
  46.                                 WHERE `id_user`='{$_SESSION['user_id']}'
  47.                                 LIMIT 1";
  48.         $sql = mysql_query($query) or die(mysql_error());
  49.        
  50.         // если нету такой записи с пользователем
  51.         // ну вдруг удалили его пока он лазил по сайту.. =)
  52.         // то надо ему убить ID, установленный в сессии, чтобы он был гостем
  53.         if (mysql_num_rows($sql) != 1)
  54.         {
  55.                 header('Location: login.php?logout');
  56.                 exit;
  57.         }
  58.        
  59.         $row = mysql_fetch_assoc($sql);
  60.        
  61.         $welcome = $row['login'];
  62. }
  63. else
  64. {
  65.         $welcome = 'гость';
  66. }
  67.  
  68. print 'Здравствуйте, ' . $welcome . '<br>';
  69.  
  70.  
  71. if (!isset($_SESSION['user_id']))
  72. {
  73.         print '<a href="login.php">Авторизация</a><br />';
  74.         print '<a href="register.php">Регистрация</a><br />';
  75. }
  76. else
  77. {
  78.         print '<a href="login.php?logout">Выход</a><br />';
  79. }
  80. ?>
  81.  
 
 Top
KuPbI4
Отправлено: 14 Декабря, 2010 - 16:43:56
Post Id


Частый гость


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


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




Удалось записать id_user в БД, но правда выводит только значение - 1 и все.
А логины с id_user разные значения. прохожу через авторизацию. и жму выбрать эту книгу и только значение 1 а логины под id_user разные значения, к примеру 2,4,6,7 и т.д.
PHP:
скопировать код в буфер обмена
  1.  
  2. $id_user = strip_tags(stripslashes(substr($_GET['id_user'],0,11)));                            
  3. $id_book = strip_tags(stripslashes(substr($_GET['id_book'],0,11)));
  4.  
  5. if (isset($_POST['submit'])){
  6.      
  7.    $status_book = strip_tags(stripslashes(substr($_POST['status_book'],0,11)));
  8.        
  9.         $query =  "INSERT INTO status (status_book, id_book, id_user) VALUES (1, '$id_book', '$id_user'='{$_SESSION['id_user']}');";
  10.         if (mysql_query($query)) {
  11.                                         echo "Запись добавлена!<br>";
  12.                                         }
  13.                                         else {
  14.                                         echo "Запись не добавлена!<br>";
  15.                                         }
  16.         }
  17.  

Что здесь не так? Вроде все правильно. но выводит в таблицу status - id_user - 1 и все
Скрипт авторизации - описал выше!

(Отредактировано автором: 14 Декабря, 2010 - 16:55:55)

 
 Top
Uchkuma
Отправлено: 14 Декабря, 2010 - 17:04:29
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Найдите ошибку в 9-й строке.
(Добавление)
KuPbI4 пишет:
Разве id может быть произвольной строкой, а не только целым числом? И вообще странный порядок обработки строки. Если у вас поле ограничено 11 символами, то строку надо обрезать в последнюю очередь после обработки, а не в первую.
 
 Top
KuPbI4
Отправлено: 14 Декабря, 2010 - 21:00:14
Post Id


Частый гость


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


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




Uchkuma пишет:
Найдите ошибку в 9-й строке.

в чем заключается ошибка?
Uchkuma пишет:
KuPbI4 пишет:
PHP:
скопировать код в буфер обмена
$id_user = strip_tags(stripslashes(substr($_GET['id_user'],0,11)));
Разве id может быть произвольной строкой, а не только целым числом? И вообще странный порядок обработки строки. Если у вас поле ограничено 11 символами, то строку надо обрезать в последнюю очередь после обработки, а не в первую.

Вас не понял..

(Отредактировано автором: 14 Декабря, 2010 - 21:01:58)

 
 Top
OrmaJever Модератор
Отправлено: 14 Декабря, 2010 - 21:09:11
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




KuPbI4 пишет:
в чем заключается ошибка?

может потому что точки с запятой в конце запроса не надо и '$id_user'='{$_SESSION['id_user']}' тоже написано не правельно.
KuPbI4 пишет:
Вас не понял..

Если строка будет <html>1354456546 то вначале обрежит до 11 символов <html>13544 потом удалит html тег и останется только 13544


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Uchkuma
Отправлено: 14 Декабря, 2010 - 21:14:52
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




INSERT INTO status
(status_book, id_book, id_user) <- тут ключи
VALUES (1, '$id_book', '$id_user'='{$_SESSION['id_user']}') <- тут значения
Посмотрите на третье значение.
 
 Top
Страниц (4): « 1 [2] 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB