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 :: Код формы редактирования и добавления данных в БД

 PHP.SU

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


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

> Описание: (помогите разобрать код из книги =)
LEONeso
Отправлено: 24 Января, 2010 - 15:59:02
Post Id



Посетитель


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


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




А это нормально, что в моем коде уже 40 функций if ?
На моем столе лежит книга "PHP сборник рецептов" 301 страница "10.12. Программное создание запросов" на этой странице обсуждается как построить таблицу редактирования, добавление данных в таблицу mysql.

Помогите разобрать код:
PHP:
скопировать код в буфер обмена
  1. switch ($_REQUEST['cmd']) {
  2. case 'edit':
  3. $row = $dbh->getRow('SELECT' . join(',',$fileds) . "FROM zodiac WHERE id=?", array($_REQUEST['id']));
  4.  
  5. case 'add':
  6. print '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
  7. print '<form type="hidden" name="cmd" value="save">';
  8. print '<table>';
  9.  
  10. if ('edit' == $_REQUEST['cmd']) {
  11. printf('<input type="hidden" name="id" value="%d">'), $_REQUEST['id']);
  12. }
  13.  
  14. foreach ($fileds AS $filed) {
  15. if (''edit) == $_REQUEST['cmd']) {
  16. $value = htmlspecialchars($row->$field);
  17. } else {$value='';}
  18.  
  19. printf('<tr><td>%s: </td><td><input type="text" name="%s" value="%s">, $filed, $field, $value);
  20. printf('</td></tr>);
  21. }
  22. print '<tr><td></td><td><input type="submit" value="Save"></td></tr>';
  23. print '</table></from>'
  24. break;
  25.  
  26. case 'save':
  27. $sql = pc_build_query($dbh, 'id', $fileds, 'zodiac');
  28. } else {
  29. printf "Added Info.";
  30. }
  31. print '<hr />';
  32.  
  33. default:
  34. $sth = $dbh->query('SELECT id, singn FROM zodiac');
  35. print '<ul>';
  36. while ($row = $sth->fetchRow()) {
  37. printf ('<li> <a greft="%s?cmd=edit&id=%s">%s</a>', $_SERVER[PHP_SELF], $row->id, $row->sign);
  38. }
  39. print ('<li><a href="'$_SERVER['PHP_SELF'].'?cmd=add">Add New</a>';
  40. print '</ul>';
  41. break;
  42. }
  43.  
  44.  


Очень сложно понять данный код, часть понятно, но не все.

Судя по тому, что я очень часто использую if в самообучении, работу данной функция я понял =), также использовал цикл do while.
Здесь встречается такие символы типа -> и верхняя одинарная кавычка в начале условия и т.п также по моему заметил сокращение функции if-else.

Хотелось бы понять и писать также как и автор книги: Скляр, Трахтенберг.
--
Спасибо.


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
JustUserR
Отправлено: 24 Января, 2010 - 16:04:25
Post Id



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


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


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




LEONeso пишет:
Здесь встречается такие символы типа -> и верхняя одинарная кавычка в начале условия и т.п также по моему заметил сокращение функции if-else
Оператор стрелка появился из-за использования в данном коде ООП на PHP в частности использования класса mysql заместо набора функций mysql - а насчет одинарной кавычки в условии так это просто строка (А switch не требует скобок вот так и выглядит)


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



Посетитель


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


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





Что за двоеточие в конце кейса и что за условие такое?
В замен REQUEST можно использовать POST, результат один? Чем они различаются


а это к чему =)

PHP:
скопировать код в буфер обмена
  1. <a href="'$_SERVER['PHP_SELF'].'?cmd=add">

и тут одинарные кавычки поставлены, как будто ошибка.
--
И что такое PEAR DB?


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Мелкий Супермодератор
Отправлено: 24 Января, 2010 - 17:54:28
Post Id



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


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


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




LEONeso пишет:
Что за двоеточие в конце кейса и что за условие такое?

Потому что такой синтаксис.
http://php.su/learnphp/cs/?sc

LEONeso пишет:
В замен REQUEST можно использовать POST, результат один? Чем они различаются

В массив $_REQUEST входят $_POST, $_GET и $_COOKIE

LEONeso пишет:
а это к чему =)

Метод класса.

LEONeso пишет:
и тут одинарные кавычки поставлены, как будто ошибка.

Как раз-таки ошибка уровня Notice - это отсутствие кавычек при обращении к ассоциативному массиву.
А в конкретном кусочке - пропущена точка и добавлена лишняя открывающая скобка
PHP:
скопировать код в буфер обмена
  1. print '<li><a href="'.$_SERVER['PHP_SELF'].'?cmd=add">Add New</a>';


-----
PostgreSQL DBA
 
 Top
LEONeso
Отправлено: 24 Января, 2010 - 18:32:14
Post Id



Посетитель


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


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




Пытался проверить код, но не могу понять, как он к БД подключается.
Создал таблицу "star".
Запаролился в БД и ... дальше я не понял строк автора =)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $urlbd = "blocks/bd.php";
  5. if(file_exists($urlbd)) {include("$urlbd");}
  6. else {echo "Файл подключения к базе данных не найден! <br /> Проверьте наличие файла $urlbd";}
  7. //дальше строки автора
  8. $dbh = DB::connect('mysql://test:@localhost/test')
  9. $dbh->setFetchMode(DB_FETCHMODE_OBJECT);
  10.  
  11. $fields = array('sign', 'symbol', 'planet', 'element', 'start_montch', 'start_day', 'end_month', 'end_day');
  12.  
  13. switch ($_REQUEST['cmd']) {
  14. case 'edit':
  15. $row = $dbh->getRow('SELECT' . join(',',$fileds) . "FROM star WHERE id=?", array($_REQUEST['id']));
  16.  
  17. case 'add':
  18. print '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
  19. print '<form type="hidden" name="cmd" value="save">';
  20. print '<table>';
  21.  
  22. if ('edit' == $_REQUEST['cmd']) {
  23. printf('<input type=\"hidden\" name=\"id\" value=\"%d\">', $_REQUEST['id']);
  24. }
  25.  
  26. foreach ($fileds AS $filed) {
  27. if ('edit' == $_REQUEST['cmd']) {
  28. $value = htmlspecialchars($row->$field);
  29. } else {$value='';}
  30.  
  31. printf('<tr><td>%s: </td><td><input type="text" name="%s" value="%s">, $filed, $field, $value');
  32. printf('</td></tr>');
  33. }
  34. print '<tr><td></td><td><input type="submit" value="Save"></td></tr>';
  35. print '</table></from>';
  36. break;
  37.  
  38. case 'save':
  39. $sql = pc_build_query($dbh, 'id', $fileds, 'star');
  40. if (DB::isError($sth = $dbh->query($sql))) {print "Couln't add info: ".$str->getMessage();}
  41.         else {
  42. print "Added Info.";
  43. }
  44. print '<hr />';
  45.  
  46. default:
  47. $sth = $dbh->query('SELECT id, singn FROM star');
  48. print '<ul>';
  49. while ($row = $sth->fetchRow()) {
  50. printf ('<li> <a greft="%s?cmd=edit&id=%s">%s</a>', $_SERVER[PHP_SELF], $row->id, $row->sign);
  51. }
  52. print '<li><a href="'.$_SERVER['PHP_SELF'].'?cmd=add">Add New</a>';
  53. print '</ul>';
  54. break;
  55. }
  56. ?>
  57.  
  58.  

Все ошибки исправлены.
Но осталась одна ...
CODE (text):
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_VARIABLE in Z:\home\iwdmod.ru\www\Untitled0.php on line 8


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
SAD
Отправлено: 24 Января, 2010 - 18:42:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




не хватает точки с запятой
 
 Top
LEONeso
Отправлено: 24 Января, 2010 - 22:53:44
Post Id



Посетитель


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


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




CODE (htmlphp):
скопировать код в буфер обмена
  1. Fatal error: Class 'DB' not found in Z:\home\iwdmod.ru\www\Untitled0.php on line 7

Исправил. и все же.


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
vitaliy_mad
Отправлено: 24 Января, 2010 - 23:01:59
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




LEONeso пишет:
$urlbd = "blocks/bd.php";
if(file_exists($urlbd)) {include("$urlbd");}
else {echo "Файл подключения к базе данных не найден! <br /> Проверьте наличие файла $urlbd";}

скорее всего данный файл не подключаеться или неверное имя класса. ошибка говорит что класса с данным именем (DB) не существует (в текущем окружении)
 
 Top
biperch
Отправлено: 25 Января, 2010 - 00:48:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


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




PHP:
скопировать код в буфер обмена
  1. $urlbd = "blocks/bd.php";
  2. if(file_exists($urlbd)) {include $urlbd;}
 
 Top
LEONeso
Отправлено: 25 Января, 2010 - 00:53:01
Post Id



Посетитель


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


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




vitaliy_mad пишет:
LEONeso пишет:
$urlbd = "blocks/bd.php";
if(file_exists($urlbd)) {include("$urlbd");}
else {echo "Файл подключения к базе данных не найден! <br /> Проверьте наличие файла $urlbd";}

скорее всего данный файл не подключаеться или неверное имя класса. ошибка говорит что класса с данным именем (DB) не существует (в текущем окружении)


Код файла:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $db = mysql_connect("localhost","admin","admin"); /*хост, логин, пароль*/
  3. mysql_select_db("idw",$db); /*название базы данных*/
  4. ?>


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
vitaliy_mad
Отправлено: 25 Января, 2010 - 05:57:30
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




хм.. и откуда вы взяли класс DB. откуда вы взяли что надо писать именно так: DB::connect? что б так писать нужно подключить соответствующий класс.
 
 Top
LEONeso
Отправлено: 25 Января, 2010 - 18:28:03
Post Id



Посетитель


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


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




Если почитать первый пост, то данный код был взят из книги, о которой также все описано в первом посте... да и в последующих.
--
Я собственно и спрашиваю: как сделать, чтоб запустилась работа кода?

(Отредактировано автором: 25 Января, 2010 - 18:30:56)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Мелкий Супермодератор
Отправлено: 25 Января, 2010 - 18:55:13
Post Id



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


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


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




Найти в книге листинг файла blocks/bd.php
Там должен быть класс DB.

Либо ещё какое-либо соглашение, описанное в начале книги.


-----
PostgreSQL DBA
 
 Top
biperch
Отправлено: 25 Января, 2010 - 19:50:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


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




vitaliy_mad пишет:
хм.. и откуда вы взяли класс DB. откуда вы взяли что надо писать именно так: DB::connect? что б так писать нужно подключить соответствующий класс.

я отвечая предполагал что blocks/bd.php содержит класс DB Хорошо
а на самом деле хз, что там где
 
 Top
LEONeso
Отправлено: 27 Января, 2010 - 19:17:41
Post Id



Посетитель


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


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




Мелкий, как бы файл был прописан мною, его содержимое тоже было написано мною, в книге то, что было написано, то я и написал, но уже ниже
PHP:
скопировать код в буфер обмена
  1. //дальше строки автора

Я просто еще не в курсе как с классами такими работать.

Я как как умею? - mysql_query, да mysql_fetch_array, пока в остальном, моя коробочка еще пуста Радость .


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB