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+MYSQL)

 PHP.SU

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


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

> Без описания
Pingvinenok_Lolo
Отправлено: 05 Января, 2012 - 22:51:18
Post Id


Новичок


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


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




Доброго вечера форумчанам!!!
Написала скрипт добавления записи в БД, сделала формочку добавления записи
Но при добавлении инфы в таблице отображаются пустые строки. В чем проблема? Объясните пожалуйста Улыбка
p.s. если что не ругайтесь сильно, только начала постигать таинства сайтостроительсва )
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include "config.php";
  3.  
  4. if (!mysql_connect($host, $user, $pswd))
  5. {
  6.         die (mysql_error());
  7. }
  8.  
  9. $date_dec = date("Y-m-d");
  10. if (!isset($_GET["action"]))
  11. {
  12.         $_GET["action"] = "showlist";
  13. }
  14.  
  15. switch ($_GET["action"])
  16. {
  17.         case "showlist":
  18.         showlist (); break;
  19.         case "add_job":
  20.         add_job (); break;
  21.         case "change_job":
  22.         change_job (); break;
  23.         case "delete_job":
  24.         delete_job (); break;
  25.         default:
  26.         showlist ();
  27. }
  28.  
  29. function showlist ()
  30. {
  31.         $query = "SELECT `id`, `date_dec`, `work`, `country`, `comment`, `pay` FROM `job`";
  32.        
  33.         $result = mysql_query($query) or die (mysql_error());
  34.        
  35.         echo "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">
  36.         <tr>
  37.         <td align=\"center\">Дата</td>
  38.         <td align=\"center\">Работа</td>
  39.         <td align=\"center\">Страна</td>
  40.         <td align=\"center\">Описание</td>
  41.         <td align=\"center\">Зарплата</td>
  42.         </tr>";
  43.        
  44.         while ($row = mysql_fetch_array($result))
  45.         {
  46.                 echo "<tr>";
  47.                 echo "<td>".$row['work']."</td>";
  48.                 echo "<td>".$row['country']."</td>";
  49.                 echo "<td>".$row['comment']."</td>";
  50.                 echo "<td>".$row['pay']."</td>";
  51.                 echo "</tr>";
  52.         }
  53.         echo "</table>";
  54.         echo '<a href="'.$_SERVER['PHP_SELF'].'?action=add_job">Добавить</a>';
  55. }
  56.  
  57. function add_job ()
  58. {
  59.         $work = $_POST ['work'];
  60.         $country = $_POST ['country'];
  61.         $comment = $_POST ['comment'];
  62.         $pay = $_POST ['pay'];
  63.         include "../html_page/form_job.html";
  64.        
  65.         $query_j = "INSERT INTO `job` (`work`, `country`, `comment`, `pay`) VALUE (\"$work\", \"$country\",
  66.         \"$comment\", \"$pay\")";
  67.        
  68.         mysql_query ($query_j) or die (mysql_error());
  69. }
  70. ?>
  71.  


CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <table width=100% height=100% border="0">
  3.         <tr>
  4.                 <td align="center" valign="center">
  5. <form action="../scripts_php/add_job.php" name="job" method="post">
  6. <table>
  7. <tr>           
  8. <!-- <td><input type="text" name="date"></td> -->
  9. <td  width="70">Работа:</td>
  10. <td><input type="text" name="work"></td>
  11. </tr>
  12. <tr>
  13. <td  width="70">Страна:</td>
  14. <td><input type="text" name="country"></td>
  15. </tr>
  16. <tr>
  17. <td width="70">Зарплата:</td>
  18. <td><input type="text" name="pay"></td>
  19. </tr>
  20. <tr>
  21. <td  width="70">Комментарий:</td>
  22. <td><textarea rows="10" cols="45" name="comment"></textarea><td>
  23. </tr>
  24. <tr>
  25. <td><input type="submit" name="add_jnote" value="Добавить"></td>
  26. <td><input type="reset" name="clean" value="Очистить"></td>
  27. </table>
  28. </form>
  29. </td>
  30. </tr>
  31. </table>
  32. </html>
  33.  

(Отредактировано автором: 06 Января, 2012 - 14:11:34)

 
 Top
Саныч Модератор
Отправлено: 05 Января, 2012 - 22:59:07
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




Pingvinenok_Lolo, а на ошибки вы как вобще внимания не обращаете? Строчку error_reporting (E_ALL); я вижу, значит на экране их должна быть куча.

1. $date_dec = date("Y-m-d") ошибка
2. не вижу ниодной проверки на отправку формы

Это я еще молчу про некорректный код и потенциальные дыры в БД


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
lamozavrik
Отправлено: 06 Января, 2012 - 09:30:50
Post Id



Частый гость


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


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




Да с таким кодом вашу бд снесёт любой малолетний хацкер, хоть немного понимающий в SQL =)


-----
Ударим крепким сном по мукам совести!
 
 Top
Pingvinenok_Lolo
Отправлено: 06 Января, 2012 - 11:23:06
Post Id


Новичок


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


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




Саныч пишет:
а на ошибки вы как вобще внимания не обращаете? Строчку error_reporting (E_ALL); я вижу, значит на экране их должна быть куча.

1. $date_dec = date("Y-m-d") ошибка
2. не вижу ниодной проверки на отправку формы

Это я еще молчу про некорректный код и потенциальные дыры в БД

В том то и дело, что никаких ошибок не выводит,

lamozavrik пишет:
Да с таким кодом вашу бд снесёт любой малолетний хацкер, хоть немного понимающий в SQL =)

По поводу кода и БД, уж извините, я не волшебница чтобы после написания двух скриптов стать супер-пупер навороченным программистом
И сюда пришла чтобы объяснили или подсказали почему не работает, но как вижу здесь только любят мораль читають...
 
 Top
Bio man
Отправлено: 06 Января, 2012 - 11:38:57
Post Id


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


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


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




хм. приступим.
если не хотите гемороя с форматами дат, их вычислением итд то лучше ипользуйте метку времени в секундах (timestamp). для этого придется изменить не много структуру БД.
ВСЕ данные, которые приходят от пользователя нужно фильтровать.

как сделаете эти изменения, будем дальше думать. конечно это проблемы не исправит но в конечном итоге получится работающий скрипт. если вы действительно хотите научится кодить то запаситесь терпением.
 
 Top
Саныч Модератор
Отправлено: 06 Января, 2012 - 13:47:21
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




Pingvinenok_Lolo пишет:
И сюда пришла чтобы объяснили или подсказали почему не работает, но как вижу здесь только любят мораль читають...
Морали вам никто не читает, а как раз и объясняют по теме. Но, а что в такой немного резкой форме... Ну с этим ничего не поделаешь, такие уж мы Улыбка

Конкретно по коду я уже писал. У вас ошибка в 11 строке, которая привидет к Parse error. Это самое первое.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Pingvinenok_Lolo
Отправлено: 06 Января, 2012 - 14:15:04
Post Id


Новичок


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


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




Bio man
Данные отфильтровала
Вот с TIMESTAMP не разобралась
TIMESTAMP представляет собой тип столбца, который можно использовать для автома­тической отметки текущей даты и времени при выполнении операций UPDATE или INSERT
А если мне надо только дата? И чем так плоха функция date() ?
PHP:
скопировать код в буфер обмена
  1. function add_job ()                                                                                                        
  2. {
  3.         $work = $_POST ['work'];
  4.         $country = $_POST ['country'];
  5.         $comment = $_POST ['comment'];
  6.         $pay = $_POST ['pay'];
  7.         $wokr = strip_tags($work); // сначала удаляю все html-теги из строки
  8.         $work = htmlspecialchars ($work); // если пользователю так неймется написать спец.символ, функция преобразовывает его в html
  9.         $counter = strip_tags($counter);
  10.         $counter = htmlspecialchars($counter);
  11.         $comment = strip_tags($comment);
  12.         $comment = htmlspecialchars($comment);
  13.         $pay = strip_tags($pay);
  14.         $pay = htmlspecialchars($pay); // а как здесь отфильтровать данные, если предполагается, что здесь должно быть только число?
  15.        
  16.         include "../html_page/form_job.html";
  17.        
  18.         $query_j = "INSERT INTO `job` (`date_dec`, `work`, `country`, `comment`, `pay`) VALUE (\"$date_dec\", \"$work\", \"$country\",
  19.         \"$comment\", \"$pay\")";
  20.        
  21.         mysql_query ($query_j) or die (mysql_error());
  22. }

Вот нашла две функции которые очищают данные от всякой бяки, если есть другие предложения по очистке данных с радостью выслушаю
Саныч
Да, точки с запятой нет, в самом коде есть, когда в собщение копировала чего-то где-то зацепила) , уже исправила

(Отредактировано автором: 09 Января, 2012 - 11:54:51)

 
 Top
Plusminuz
Отправлено: 06 Января, 2012 - 14:22:27
Post Id



Частый гость


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


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




Pingvinenok_Lolo пишет:
а как здесь отфильтровать данные, если предполагается, что здесь должно быть только число?


is_numeric() должно помочь


-----
учусь... Улыбка
 
 Top
Bio man
Отправлено: 06 Января, 2012 - 23:06:13
Post Id


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


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


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




Pingvinenok_Lolo, почему не все данные отфильтрованы? ведь они заносятся в БД и в следствии возникает большая вероятность sql иньекции.
mysql_real_escape_string() поможет. в общем все, что идет в БД, в том числе запросы выборки и обновления (UPDATE), нужно пропускать через эту ф-цию.
Pingvinenok_Lolo пишет:
TIMESTAMP представляет собой тип столбца
тип столбца используйте int и формируйте timestamp используя средства PHP, например, time(), или функцию mysql NOW(). выводить дату/время через date(), например, так
PHP:
скопировать код в буфер обмена
  1. $ts = time();// переменная хранящия метку. в вашем случае будет не time() а ячейка из БД
  2. echo date("Y-m-d H:i:s", (int)$ts);// "Y-m-d H:i:s" - формат даты; (int)$ts - преобразование типа на лету. для того что бы избежать ошибки, ведь из БД метка придет не как число а как строка

(Отредактировано автором: 06 Января, 2012 - 23:07:49)

 
 Top
evgenijj
Отправлено: 07 Января, 2012 - 01:33:03
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Столько хороших и добрых советов -- автор темы должен быть доволен(а). Маленькое замечание по синтаксису SQL
INSERT INTO `...` (.....) VALUE (.....)
INSERT INTO `...` (.....) VALUES (.....)
 
 Top
Pingvinenok_Lolo
Отправлено: 09 Января, 2012 - 12:08:41
Post Id


Новичок


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


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




evgenijj пишет:
Столько хороших и добрых советов -- автор темы должен быть доволен(а). Маленькое замечание по синтаксису SQL

Автор не просто довольна, автор счастлива, что нашла столько хорошоих и добрых людей, которые уму-разуму учат Улыбка Спасибо за замечание, исправила
Bio man
Как не все данные отфильтрованы? 5 переменных, 3 - строковые, отфильтровала (и уже пропустила через mysql_real_escape_string()), дату вводит не пользователь а определяется скриптом и пер-я $pay - принудительно привела к int.
С датой в Вашем примере разобралась, но это вроде как для того случая, когда пользователь вводит дату, а если не пользователь вводит, а скрипт определяет какая дата и заносит БД, тоже использовать timestamp? Или лучше его всегда использовать?
PHP:
скопировать код в буфер обмена
  1. function add_job ()                                                                                                        
  2. {
  3.         $work = $_POST ['work'];
  4.         $country = $_POST ['country'];
  5.         $comment = $_POST ['comment'];
  6.         $pay = $_POST ['pay'];
  7.                
  8.         $wokr = strip_tags($work); // сначала удаляю все html-теги из строки
  9.         $work = htmlspecialchars ($work); // если пользователю так неймется написать спец.символ, функция преобразовывает его в html
  10.         $counter = strip_tags($counter);
  11.         $counter = htmlspecialchars($counter);
  12.         $comment = strip_tags($comment);
  13.         $comment = htmlspecialchars($comment);
  14.         $pay = intval($pay); // т.к. тут нужен только целочисленный тип, принудительно привела пер-ю к типу int
  15.        
  16.         $work = mysql_real_escape_string($work);
  17.         $counter = mysql_real_escape_string($counter);
  18.         $comment = mysql_real_escape_string($comment);
  19.        
  20.         include "../html_page/form_job.html";
  21.        
  22.         $query_j = "INSERT INTO `job` (`date_dec`, `work`, `country`, `comment`, `pay`) VALUES ('$date_dec', '$work', '$country',
  23.         '$comment', '$pay')";
  24.  
  25.         mysql_query ($query_j) or die (mysql_error());
  26. }
 
 Top
armancho7777777 Супермодератор
Отправлено: 09 Января, 2012 - 12:20:32
Post Id



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


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


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




Удалите это mysql_error() из этой строки mysql_query ($query_j) or die (mysql_error());
И ещё:
PHP:
скопировать код в буфер обмена
  1.  
  2. $query_j = "INSERT INTO `job` (`date_dec`, `work`, `country`, `comment`, `pay`)
  3.                       VALUES ('".$date_dec."', '".$work."', '".$country."', '".$comment."', '".$pay."')";
  4.  

(Отредактировано автором: 09 Января, 2012 - 12:22:34)

 
 Top
Okula
Отправлено: 09 Января, 2012 - 12:22:49
Post Id



Участник


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


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




Девушка, зачем вам это программирование, лучше сходите на улицу с парнем погулять Улыбка
 
 Top
Pingvinenok_Lolo
Отправлено: 09 Января, 2012 - 15:07:25
Post Id


Новичок


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


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




armancho7777777 пишет:
Удалите это mysql_error() из этой строки mysql_query ($query_j) or die (mysql_error());

Удалила. Разве это ошибка? Зачем тогда в учебниках такую бяку пишут

Okula пишет:
Девушка, зачем вам это программирование

Как зачем??? А что бы на хлебушек с маслом было! Радость
 
 Top
armancho7777777 Супермодератор
Отправлено: 09 Января, 2012 - 15:11:07
Post Id



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


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


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




Pingvinenok_Lolo пишет:
Удалила. Разве это ошибка?
Нет. Аспекты безопасности. mysql_error() выводит ошибки на экран. А в ошибках может быть информация связанная с БД и её структурой. Злоумышленник может специально сгенерировать ошибку. В ней может оказаться "много полезного" Радость
Вывод ошибок лучше вообще отключить по завершению проекта. А сами ошибки записывать в логи.
(Добавление)
Скачайте, посмотрите:
"Специалист" | "PHP. Уровень 1, 2, 3 и 4" [2010]
http://nnm-club.ru/forum/viewtopic.php?t=290401

(Отредактировано автором: 09 Января, 2012 - 15:14:18)

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB