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

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

1. Speaker - 02 Ноября, 2015 - 13:40:47 - перейти к сообщению
Пытаюсь написать нечто вроде гостевой (новичок, так что строго не судите). Вот собственно имеющийся код:
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), просто так. Объясните, пожалуйста, кому несложно, почему так происходит и как это поправить? И вторая проблема: при написании сообщения, страница обновляется, текст заносится в бд, но поле (форма) не очищается (остается введенный текст), как это поправить (реализовать очистку формы для написания другого сообщения)?
2. cryptoprof - 02 Ноября, 2015 - 15:28:39 - перейти к сообщению
Возможно вторая проблема и есть источник вашей ошибки?
когда вы передаете через $_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']?
3. clockwerk - 02 Ноября, 2015 - 16:15:42 - перейти к сообщению
ИМХО хочу немного от себя добавить, то на чем сам обжигался. Не стоит использовать короткие теги 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.  
4. Speaker - 02 Ноября, 2015 - 17:22:53 - перейти к сообщению
clockwerk, Спасибо, учту. Не совсем понимаю причины подобных "ожогов" (почему не стоит выводить через эхо), вторую проблему решил, спасибо, а вот первая не решается (даже если убрать все функции(в которых просто некоторые фильтры))
(Добавление)
cryptoprof, Спасибо, вторая проблема решена=))
5. Faraon-san - 02 Ноября, 2015 - 17:29:49 - перейти к сообщению
line 21 - из атрибута value нужно убрать

line 24 - идет проверка на отсутствие переменной, тут не правильно поставлена логика, нужно проверять на существование переменной $msg и не пустое оно, только тогда заносить в базу, а тут каждый раз при обновлении будет заносить в базу.
6. Speaker - 02 Ноября, 2015 - 17:46:05 - перейти к сообщению
[quote=Faraon-san][/quote] Разобрался, спасибо, исправил.
7. clockwerk - 03 Ноября, 2015 - 10:16:11 - перейти к сообщению
Speaker пишет:
почему не стоит выводить через эхо


Ну хотя бы по тому что данный код, когда его становиться много, абсолютно не читаем, да и вообще это не комильфо. Ну это лично мое мнение, а как делать вам решайте вы.
8. Hidalgo - 04 Ноября, 2015 - 00:03:11 - перейти к сообщению
В 7 строке вообще аларм с одинарными кавычками! Для чего их ставить, если текста в них нет?
Кто вас этому научил? Плюньте ему в глаза Однако

 

Powered by ExBB FM 1.0 RC1