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 »   

> Без описания
Александерр
Отправлено: 21 Мая, 2015 - 23:49:47
Post Id


Новичок


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


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




Здравствуйте,я новичок в программировании и мне нужна помощь специалистов.
Цель: безопасно записать в бд информацию из поля. Написал такой код:
PHP:
скопировать код в буфер обмена
  1.  if (isset($_POST['go'])&&
  2. isset($_POST['url'])&& $_POST['url'] != null){
  3. $url = $_POST['url'];
  4. $result = mysql_query("UPDATE configs SET bloknot='".$url."' WHERE id=1;") ;
  5.              echo "<center><font color=green>Записали: ".$url."</font></center>";
  6. }


Насколько это будет правильный и безопастный код, дабы на фильтрацию в самом html поле(input) надежды мало. Помогите пожалуйста.
 
 Top
exlant
Отправлено: 22 Мая, 2015 - 00:10:48
Post Id



Посетитель


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


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




то как вы пишете абсолютно не безопасно! Да и API mysql_* уже устарела, и будет удалена в следующей версии php! Используйте mysqli или pdo c их подготавливаемыми запросами!
 
 Top
Мелкий Супермодератор
Отправлено: 22 Мая, 2015 - 00:14:46
Post Id



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


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


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




Неправильный, небезопасный.
Правильный и безопасный: http://php.net/manual/en/pdo.prepare.php


-----
PostgreSQL DBA
 
 Top
DelphinPRO
Отправлено: 22 Мая, 2015 - 00:17:52
Post Id



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


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


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




Любые пользовательские данные должны быть отфильтрованы и экранированы, потому что вы не можете знать что к вам придет:
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("UPDATE configs SET bloknot='".mysql_real_eacape_string($url)."' WHERE id=1;") ;
  2.              echo "<center><font color=green>Записали: ".mysql_real_eacape_string($url)."</font></center>";


но exlant верно сказал - от mysql_* расширения следует отказаться, даже в целях обучения, не говоря уже о реальных проектах.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Александерр
Отправлено: 22 Мая, 2015 - 00:19:08
Post Id


Новичок


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


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




А если перед записью в БД переменную отфильтровать так: с помощью htmlspecialchars, затем mysql_real_escape_string, затем запись в базу
 
 Top
Мелкий Супермодератор
Отправлено: 22 Мая, 2015 - 00:20:06
Post Id



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


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


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




Александерр пишет:
А если перед записью в БД переменную отфильтровать так: с помощью htmlspecialchars, затем mysql_real_escape_string, затем запись в базу

То это будет неправильно, но условно безопасно.


-----
PostgreSQL DBA
 
 Top
Александерр
Отправлено: 22 Мая, 2015 - 00:24:29
Post Id


Новичок


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


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




Мелкий пишет:
Александерр пишет:
А если перед записью в БД переменную отфильтровать так: с помощью htmlspecialchars, затем mysql_real_escape_string, затем запись в базу

То это будет неправильно, но условно безопасно.

А почему не правильно? Где ошибка?
 
 Top
exlant
Отправлено: 22 Мая, 2015 - 00:39:06
Post Id



Посетитель


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


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




Александерр
ошибка в выборе api для работы с mysql
http://php.net/manual/ru/functio...ysql-connect.php
 
 Top
Александерр
Отправлено: 22 Мая, 2015 - 00:44:37
Post Id


Новичок


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


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




Грубо говоря.писать не mysql_query, а mysqli_query и mysqli_connect ?
 
 Top
exlant
Отправлено: 22 Мая, 2015 - 00:49:19
Post Id



Посетитель


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


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




Александерр это далеко не все отличии....
В плане безопасности там есть - подготавливаемые запросы! Про них тоже следует почитать!
в общем читайте! Не думаю что у кого то есть желание пересказывать вам мануал!

(Отредактировано автором: 22 Мая, 2015 - 00:49:38)

 
 Top
Александерр
Отправлено: 22 Мая, 2015 - 00:55:12
Post Id


Новичок


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


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




exlant пишет:
Александерр это далеко не все отличии....
В плане безопасности там есть - подготавливаемые запросы! Про них тоже следует почитать!
в общем читайте! Не думаю что у кого то есть желание пересказывать вам мануал!

Большое спс,понял. В моем запросе вручную нужно думать о безопасности,а в Mysgli уже есть безопасные подготовленные запросы. отличия по коду смотрю не велики.
 
 Top
Александерр
Отправлено: 24 Мая, 2015 - 21:44:19
Post Id


Новичок


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


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




подскажите как выглядит запрос записи в БД через PDO из формы плиз.
Вместо этого:
PHP:
скопировать код в буфер обмена
  1.      if (isset($_POST['go'])&&
  2.     isset($_POST['url'])&& $_POST['url'] != null){
  3.     $url = $_POST['url'];
  4.     $result = mysql_query("UPDATE configs SET bloknot='".$url."' WHERE id=1;") ;
  5.                  echo "<center><font color=green>Записали: ".$url."</font></center>";
  6.     }

пишем на PDO так???:
PHP:
скопировать код в буфер обмена
  1. $url->quote($_POST['url]);
  2. $update = $bd->exec('UPDATE `configs` SET `bloknot`='".$url."' `WHERE` id=1');

(Отредактировано автором: 24 Мая, 2015 - 22:09:09)

 
 Top
exlant
Отправлено: 24 Мая, 2015 - 22:59:02
Post Id



Посетитель


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


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




не так!

$url-> - я так и не понял что это... если quote, то $url - это наверное db connect? А почему тогда урл?
и как вам в код затесалась $bd-> - биде...

не используйте этот метод ->exec, он не поддерживает подготавливаемые запросы!

в общем выглядеть должно примерно вот так:
PHP:
скопировать код в буфер обмена
  1. $parameters = array(':url' => $_POST['url'], ':id' => $id);
  2. $sql = 'UPDATE `configs` SET `bloknot`= :url `WHERE` id= :id';
  3. $sth = $dbh->prepare($sql);
  4. $sth->execute($parameters);

(Добавление)
вот тут можете еще посмотреть

(Отредактировано автором: 24 Мая, 2015 - 23:08:02)

 
 Top
Александерр
Отправлено: 25 Мая, 2015 - 00:28:40
Post Id


Новичок


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


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




exlant пишет:
не так!

$url-> - я так и не понял что это... если quote, то $url - это наверное db connect? А почему тогда урл?
и как вам в код затесалась $bd-> - биде...

не используйте этот метод ->exec, он не поддерживает подготавливаемые запросы!

в общем выглядеть должно примерно вот так:
PHP:
скопировать код в буфер обмена
  1. $parameters = array(':url' => $_POST['url'], ':id' => $id);
  2. $sql = 'UPDATE `configs` SET `bloknot`= :url `WHERE` id= :id';
  3. $sth = $dbh->prepare($sql);
  4. $sth->execute($parameters);

(Добавление)
вот тут можете еще посмотреть

url это значения из формы html после нажатия на кнопку go

1) Это берем из поля url и помещаем в переменную параметр? $parameters = array(':url' => $_POST['url'], ':id' => $id);

2) Подключаем таблицу ?$sql = 'UPDATE `configs` SET `bloknot`= :url `WHERE` id= :id';
3) Само подключение? $sth = $dbh->prepare($sql);
4) А это что? $sth->execute($parameters);

(Отредактировано автором: 25 Мая, 2015 - 00:32:50)

 
 Top
exlant
Отправлено: 25 Мая, 2015 - 00:51:36
Post Id



Посетитель


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


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




тоесть $url->quote(), это ваш самописный класс с методом? А не вот это - http://php.net/manual/ru/pdo.quote.php ?

1. нет, в таком виде, как я написал(массив для подготовленных запросов с параметрами, можно обозвать как пожелаете...) $parameters = array(':url' => $_POST['url'], ':id' => $id);

2. Это запрос к базе данных, что бы не писать вот так: $sth = $dbh->prepare('UPDATE `configs` SET `bloknot`= :url `WHERE` id= :id');

3. Вот это само подключение $dbh-> http://php.net/manual/ru/pdo.construct.php
а $sth означает "Statement Handle"...
И вся эта строчка, подготавливает запрос - $sql к ДБ - $dbh , и помещает объект с подготовленным запросом в $sth

4. execute() - выполняет подготовленный запрос, в нашем случаи с параметрами, которые находятся в массиве - $parameters.

(Отредактировано автором: 25 Мая, 2015 - 02:47:35)

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB