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 » PHP » Программирование на PHP » проблема с добавлением статьи в базу

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

1. AndreyT - 12 Июня, 2010 - 00:22:29 - перейти к сообщению
сделал форму для добавления статьи на сайт
CODE (html):
скопировать код в буфер обмена
  1. <form method="post" action="proc_addarticle.php">
  2.                 <label>Заголовок новости:</label>
  3.                 <input type="text" name="title_new" class="inp_inf" />
  4.                
  5.                 <label>Категория новости:</label>
  6.                 <select name="category" size="4">
  7.                         <?php
  8.                            $host = "localhost";
  9.                            $user = "php_site";
  10.                            $pass = "php_site";
  11.                            $db_name = "php_site";
  12.  
  13.                            $db = mysqli_connect($host, $user, $pass, $db_name);
  14.                         $query_cats = mysqli_query($db, "SELECT `name` FROM `categories`");
  15.                                                
  16.                 while($cat = mysqli_fetch_assoc($query_cats)){
  17.                         echo "<option value=\"". $cat["name"] ."\">". $cat["name"] ."</option>\n";
  18.                 }
  19.                 ?>
  20.                 </select>
  21.                
  22.                 <label>Текст новости:</label>
  23.                 <textarea rows="12" cols="80" class="inp_inf" name="text_new"></textarea>
  24.                
  25.                 <label>Ключевые слова (через запятую):</label>
  26.                 <input type="text" name="keywords_new" class="inp_inf" />
  27.                
  28.                 <input type="submit" value="Добавить новость" class="ok_but" />
  29. </form>


и PHP обработчик

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         if(isset($_SESSION["user"])){
  4.                 $title = $_POST["title_new"];
  5.                 $category = $_POST["category"];
  6.                 $text_new = $_POST["text_new"];
  7.                 $desc_new = substr($text_new, 0, 254);
  8.                 $keywords_new = $_POST["keywords_new"];
  9.                 $error = false;
  10.                 $errortext = "<p>При написании статьи произошли следующие ошибки:</p><ul>";
  11.                                
  12.                 if(empty($title)){
  13.                         $error = true;
  14.                         $errortext .= "<li>Заголовок новости не заполнен.</li>";
  15.                 }
  16.                 if(empty($category)){
  17.                         $error = true;
  18.                         $errortext .= "<li>Категория новости не выбрана.</li>";
  19.                 }
  20.                 if(empty($text_new)){
  21.                         $error = true;
  22.                         $errortext .= "<li>Текст новости не заполнен.</li>";
  23.                 }
  24.                 if(empty($keywords_new)){
  25.                         $error = true;
  26.                         $errortext .= "<li>Ключевые слова не заполнены.</li>";
  27.                 }
  28.                 $errortext .= "</ul>";
  29.                                
  30.                 if($error){
  31.                         echo $errortext;
  32.                 }
  33.                 else{
  34.                         $host = "localhost";
  35.                         $user = "php_site";
  36.                         $pass = "php_site";
  37.                         $db_name = "php_site";
  38.  
  39.                         @$db = mysqli_connect($host, $user, $pass, $db_name);
  40.  
  41.                         if(mysqli_connect_errno()){
  42.                                 echo "Ошибка: не удалось установить соединение с базой данных. Повторите попытку позже.";
  43.                                 exit;
  44.                         }
  45.                         else{
  46.                                 $query_add_article = mysqli_query($db, "INSERT INTO `articles` (`title`, `category`, `text`, `meta_desc`, `meta_keys`) VALUES ('". $title ."', '". $category ."', '". $text_new ."', '". $desc_new ."', '". $keywords_new ."')");
  47.  
  48.                                 if($query_add_article){
  49.                                         echo "Статья добавлена в базу данных успешно!";
  50.                                 }
  51.                                 else{
  52.                                         echo "Возникла ошибка при добавлении статьи в базу данных";
  53.                                 }
  54.                         }
  55.                 }
  56.         }
  57.                         else{
  58.                                 echo "Ошибка!";
  59.                         }
  60. ?>
  61.  


и не хочет вставлять в таблицу данные в чем может быть ошибка?
2. isle - 12 Июня, 2010 - 06:37:14 - перейти к сообщению
"@$db = " - выулючили ошибки подключения... зачем на тесте?
Подключение к БД есть, где отключение?

Какую хоть ошибку выдает и в каком месте? Ошибки подключили на отображение? Бывает, что запятую упустишь или обратную кавычку и капец... Однако


/* close connection */
mysqli_close($link);
3. Champion - 12 Июня, 2010 - 09:28:23 - перейти к сообщению
http://forum.php.su/topic.php?fo...=62&topic=78

http://phpfaq[dot]ru/debug - отладка.
4. JustUserR - 13 Июня, 2010 - 12:50:21 - перейти к сообщению
AndreyT пишет:
И не хочет вставлять в таблицу данные в чем может быть ошибка?
Если ваш SQL-запрос в шаблонном виде и не содержит ошибки то он может стать неверным после интерполяции в нем текстовых переменных - это может происходить если вы не экранируете интерполируемые переменные с помощью функций addslashes или mysql_real_escape_string - также попробуйте вывести ваш SQL-запрос на экран в HTML-encoded-виде и посмотреть на предмет ошибок Также в принципе запрос может не работать по причине несовпадения кодировок - например из-за несоответствия кодировки исходного текста PHP-скрипа и его локали
5. isle - 13 Июня, 2010 - 12:58:57 - перейти к сообщению
У меня была похожая проблемка - не обновлялись ячейки в БД; я ее нашел, когда включил показ ошибок, может, пригодится Улыбка

Я указал в БД в ячейке вставить цифры (там можно текст вставить и т.д.), а после вычислений скриптом у меня почему-то цифры превращались в текст, т.е.:

вместо $a = 5;

я получал $a = '5';

Поэтому пришлось ставить кавычки перед вводом в БД и тогда записывалось, либо приводить к цифре текст.

Дело давно было, сейчас точно не вспомню как и что делал, но, думаю, смысл понятен... Вдруг кому еще пригодится Улыбка
6. JustUserR - 13 Июня, 2010 - 13:32:36 - перейти к сообщению
isle пишет:
Поэтому пришлось ставить кавычки перед вводом в БД и тогда записывалось, либо приводить к цифре текст.
В таком случае можно проверять тип вставляемых в SQL-запрос данные - если переменная должна быть числом то принудительно приводить ее к числовому виду и вставлять в запрос - а если строкой то производить экранирование Главное чтобы тип вставляемых данных совпадал с типом соответствующих SQL-полей - и хотя автоматическое преобразование имеется но часть данных может обрезаться или испортиться при преобразовании

 

Powered by ExBB FM 1.0 RC1