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
Форумы портала PHP.SU :: Версия для печати :: Не сохраняются знаки ' и \ в базе mysql
Форумы портала PHP.SU » » Вопросы новичков » Не сохраняются знаки ' и \ в базе mysql

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

1. serg502 - 27 Сентября, 2016 - 14:27:25 - перейти к сообщению
Здраствуйте. Есть такой код для изменение записей в базе данных.

Но в базе не сохраняются знаки ' и \ (может и еще какие, но кажется только эти). Если в тексте случаются такие знаки, то данные не обновляются вообще. А они нужны, так как используются в html и php коде.

В чем может быть причина?

PHP:
скопировать код в буфер обмена
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Админка - редактирование</title>
  6. </head>
  7.  
  8. <body>
  9. <a href="add.php">Добавить игру в базу</a><br /><a href="index_admin.php">Редактирование игр</a><br />
  10. <?PHP
  11. ini_set('display_errors',1);
  12. include ('../connect.php');
  13. $id=$_GET['id'];
  14. $result = mysqli_query($connection,"SELECT * FROM games WHERE id = '$id'" );
  15. $row = mysqli_fetch_assoc($result);
  16.  
  17.  
  18. if(isset ($_POST['edit'])){
  19. $name = $_POST['name'];
  20. $text = $_POST['text'];
  21. $swf = $_POST['swf'];
  22. $image = $_POST['image'];
  23. $keywords = $_POST['keywords'];
  24. $description = $_POST['description'];
  25.  
  26.                         mysqli_query($connection,"UPDATE games SET name='$name', text='$text', swf='$swf', image='$image', keywords='$keywords', description='$description' WHERE id = '$id'");
  27.                                
  28.                  echo "Обновление успешно";
  29.                  };
  30.        
  31.  mysqli_close($connection);
  32.  ?>
  33.  
  34.                 <form method="POST" action="edit.php?id=<?PHP echo $id; ?>">
  35.                
  36.                 Название <input type="text" name="name" size=100 value="<?PHP echo $row['name']; ?>"/><br />           
  37.                 Текст        <textarea cols="100" rows="10" name="text"><?PHP echo $row ['text']?></textarea><br/><br/>
  38.                 Код swf      <textarea cols="100" rows="10" name="swf"><?PHP echo $row ['swf']?></textarea><br/><br/>
  39.                 Код картинки <textarea cols="100" rows="2" name="image"><?PHP echo $row ['image']?></textarea><br/><br/>
  40.                 Keywords     <textarea cols="100" rows="2" name="keywords"><?PHP echo $row ['keywords']?></textarea><br/><br/>
  41.                 Description  <textarea cols="100" rows="2" name="description"><?PHP echo $row ['description']?></textarea><br/><br/>
  42.                
  43.                        
  44.                                                         <input type="submit" name="edit" value="Сохранить"/>
  45.         </form>
  46.  
  47.                
  48. </body>
  49.  
  50. </html>
2. OrmaJever - 27 Сентября, 2016 - 14:33:40 - перейти к сообщению
serg502 пишет:
В чем может быть причина?

в том что у вас дыра на сайте.
Прочитайте и посмотрите примеры http://php.net/manual/ru/mysqli.prepare.php
3. serg502 - 27 Сентября, 2016 - 14:42:31 - перейти к сообщению
А можно попроще объяснить?

По ссылке почитал, но, скажу прямо, не разобрался.
4. andrewkard - 27 Сентября, 2016 - 15:11:36 - перейти к сообщению
serg502 пишет:
Но в базе не сохраняются знаки ' и \

Спецсимволы нужно экранировать: http://www[dot]mysql[dot]ru/docs/man/String_syntax[dot]html
serg502 пишет:
А можно попроще объяснить?

https://habrahabr[dot]ru/post/148151/
Prepare:
PHP:
скопировать код в буфер обмена
  1.  
  2. $val1 = 'Stuttgart';
  3. $val2 = 'DEU';
  4. $val3 = 'Baden-Wuerttemberg';
  5.  
  6. /* подготавливаем запрос на вставку строк */
  7. $query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
  8. $stmt = mysqli_prepare($link, $query);
  9.  
  10. mysqli_stmt_bind_param($stmt, "sss", $val1, $val2, $val3);
  11.  
  12. /* выполняем запрос */
  13.  
  14. /* закрываем запрос */
  15.  

http://php.net/manual/ru/mysqli-stmt.execute.php
5. serg502 - 27 Сентября, 2016 - 16:17:30 - перейти к сообщению
Я так понял у меня две проблемы:
1. Спецсимволы
2. Уязвимость

Верно?
(Добавление)
А можно в данном случае использовать функцию htmlentities?
6. Мелкий - 27 Сентября, 2016 - 16:56:27 - перейти к сообщению
Только уязвимость.
7. serg502 - 27 Сентября, 2016 - 17:04:46 - перейти к сообщению
Мелкий пишет:
Только уязвимость.


А с символами как?
8. Мелкий - 27 Сентября, 2016 - 21:32:48 - перейти к сообщению
А что символы? Символы как символы. Ничем не отличаются от, например, символа "а"
9. serg502 - 28 Сентября, 2016 - 13:34:25 - перейти к сообщению
Понимаю Вашу иронию.

Можно даже и пошутить по этому поводу. Но форум как бы серьезный.
10. Мелкий - 28 Сентября, 2016 - 13:45:00 - перейти к сообщению
А я серьёзно. Проблема у вас одна - уязвимость.
А символы как символы. Нет опасных символов, есть ошибка в их обработке и/или отображении. Т.е. уязвимость.
Вот сегодня сочинение понаписал по схожему вопросу: http://ru[dot]stackoverflow[dot]com/a/571274/203622

 

Powered by ExBB FM 1.0 RC1