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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Speaker
Отправлено: 02 Ноября, 2015 - 13:40:47
Post Id



Новичок


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


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




Пытаюсь написать нечто вроде гостевой (новичок, так что строго не судите). Вот собственно имеющийся код:
PHP:
скопировать код в буфер обмена
  1. <?
  2. //Заголовок страницы
  3. $str = 'Гостевая';
  4. //Подключаем необходимое
  5. require_once '/root.php';
  6. //Вывод заголовка
  7. echo ''.$dhead . $str . $dend .'';
  8. //Страница
  9. if (isset($_POST['msg'])) {
  10.         #
  11.    $msg = txt($_POST['msg']);
  12.     # Проверка ввода сообщения
  13.    if (empty($msg))
  14.  $err = 'Пустое сообщение!<br />';
  15. }
  16.  
  17. echo '
  18. <form method="post" action="/gb.php">
  19. <div class="menu">
  20. Сообщение: <br/>
  21. <input type="text" name="msg" value="'. outer($_POST['msg']) .'" /><input type="submit" name="msg_submit" value="Написать" />
  22. </div>
  23. </form> ';
  24.  if (!isset($err)) {
  25. $mysqli->query("INSERT INTO `msg` SET `msg` = '". enter($msg) ."'");
  26. }
  27. else {
  28. echo ''.$dhead . $err . $dend .'';     
  29. }
  30. $stmt = $mysqli->query('SELECT * FROM `msg`');
  31.     while($row = $stmt->fetch_assoc()){
  32.         echo ''.$dmenu.''.$row['msg'].''.$dend.'';
  33.     }
  34. echo ''.$dmenu.' <img src = "/style/images/img.png" alt = "*"><a href = "/"> Главная </a>'.$dend .'';
  35. //Низ
  36. foot ();
  37. ?>

Проблема 1 в том, что при обновлении страницы (без каких-либо манипуляций с полем) в базу заносится ID сообщения (никак не затрагивая поля msg), просто так. Объясните, пожалуйста, кому несложно, почему так происходит и как это поправить? И вторая проблема: при написании сообщения, страница обновляется, текст заносится в бд, но поле (форма) не очищается (остается введенный текст), как это поправить (реализовать очистку формы для написания другого сообщения)?

(Отредактировано автором: 02 Ноября, 2015 - 13:42:31)

 
 Top
cryptoprof
Отправлено: 02 Ноября, 2015 - 15:28:39
Post Id



Новичок


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


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




Возможно вторая проблема и есть источник вашей ошибки?
когда вы передаете через $_POST сообщение,оно у вас попадет в input:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <input type="text" name="msg" value="'. outer($_POST['msg']) .'" /><input type="submit" name="msg_submit" value="Написать" />

Еще не совсем мне понятна строчка:

Что за txt? Почему сразу в переменную $msg не передать значение $_POST['msg']?
 
 Top
clockwerk
Отправлено: 02 Ноября, 2015 - 16:15:42
Post Id



Новичок


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


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




ИМХО хочу немного от себя добавить, то на чем сам обжигался. Не стоит использовать короткие теги php
лучше полные

Не стоит выводить html код в echo. Можно поставить закрывающий тег php вывсти html и опять открыть php.
Т.е. вместо
PHP:
скопировать код в буфер обмена
  1.  
  2. }
  3. <?PHP
  4. echo '
  5. <form method="post" action="/gb.php">
  6. <div class="menu">
  7. Сообщение: <br/>
  8. <input type="text" name="msg" value="'. outer($_POST['msg']) .'" /><input type="submit" name="msg_submit" value="Написать" />
  9. </div>
  10. </form> ';
  11.  if (!isset($err)) {
  12.  

Сделать вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. }
  4.  
  5. ?>
  6. <form method="post" action="/gb.php">
  7. <div class="menu">
  8. Сообщение: <br/>
  9. <input type="text" name="msg" value="<?= $_POST['msg'] ?> " /><input type="submit" name="msg_submit" value="Написать" />
  10. </div>
  11. </form>
  12. <?PHP
  13.  if (!isset($err)) {
  14.  
  15.  

А по поводу ошибок тут уже подсказали попробуйте сначала без этих непонятных функций txt outer и enter добавить в бд. И еще у вас не совсем правильное построение кода, я бы сначала проверил наличие msg и если есть занес в бд. т.е. как то так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //Заголовок страницы и т.д.
  4. if(isset($_POST['msg']) && !empty($_POST['msg'])){
  5.     //Добавляем в бд.
  6. }
  7. else{ ?>
  8. выводим форму
  9. <?PHP  }
  10. // Ну здесь выводите записи ну и все остальные операции
  11.  


По поводу второй проблемы уберите из формы . outer($_POST['msg']) . и будет вам счастье.
PHP:
скопировать код в буфер обмена
  1.  
  2. <form method="post" action="/gb.php">
  3.   <div class="menu">
  4.     Сообщение: <br/>
  5.     <input type="text" name="msg" />
  6.     <input type="submit" name="msg_submit" value="Написать" />
  7.   </div>
  8. </form>
  9.  

(Отредактировано автором: 02 Ноября, 2015 - 16:17:34)

 
 Top
Speaker
Отправлено: 02 Ноября, 2015 - 17:22:53
Post Id



Новичок


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


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




clockwerk, Спасибо, учту. Не совсем понимаю причины подобных "ожогов" (почему не стоит выводить через эхо), вторую проблему решил, спасибо, а вот первая не решается (даже если убрать все функции(в которых просто некоторые фильтры))
(Добавление)
cryptoprof, Спасибо, вторая проблема решена=))

(Отредактировано автором: 02 Ноября, 2015 - 17:28:13)

 
 Top
Faraon-san
Отправлено: 02 Ноября, 2015 - 17:29:49
Post Id



Посетитель


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


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




line 21 - из атрибута value нужно убрать

line 24 - идет проверка на отсутствие переменной, тут не правильно поставлена логика, нужно проверять на существование переменной $msg и не пустое оно, только тогда заносить в базу, а тут каждый раз при обновлении будет заносить в базу.
 
 Top
Speaker
Отправлено: 02 Ноября, 2015 - 17:46:05
Post Id



Новичок


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


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




[quote=Faraon-san][/quote] Разобрался, спасибо, исправил.
 
 Top
clockwerk
Отправлено: 03 Ноября, 2015 - 10:16:11
Post Id



Новичок


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


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




Speaker пишет:
почему не стоит выводить через эхо


Ну хотя бы по тому что данный код, когда его становиться много, абсолютно не читаем, да и вообще это не комильфо. Ну это лично мое мнение, а как делать вам решайте вы.
 
 Top
Hidalgo
Отправлено: 04 Ноября, 2015 - 00:03:11
Post Id



Частый гость


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


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




В 7 строке вообще аларм с одинарными кавычками! Для чего их ставить, если текста в них нет?
Кто вас этому научил? Плюньте ему в глаза Однако
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB