1

Тема: Проблема записи информации в базу данных

Друзья, вот такая вот ерунда выходит. Сделал сайт по книге, т.е все скрипты там брал, с базой данных работает, т.е всю информацию отображает корректно. И товары и категории, в корзину добавляет, пересчитывает все и т.д.
Теперь главное.
Захожу в меню администрирования.
Допустим, хочу добавить новую категорию, но увы, пишет что "Категория 'Товар' не может быть добавлена в базу данных.."
Подскажите, в чем может быть проблема? Может в phpMyAdmin где-то есть возможность установить разрешение на запись?
Спасибо.

2

Re: Проблема записи информации в базу данных

Pik-Nik
Скрипт подключается учетной записью (то, что вы в конфигурационный файл записываете), каждая запись имеет определенный набор привилегий (удаление данных, создание таблиц и т.д.). Зайдите в phpMyAdmin, перейдите на страницу Привилегий, выберите пользователя, которым подключается скрипт и настройте привилегии, как требуется в документации, либо на собственное усмотрение. Не выбирайте привилегии из раздела "Администрирование" - этого делать нельзя, они должны быть только у пользователя root.

3 (изменено: Pik-Nik, 2009-03-21 14:57:41)

Re: Проблема записи информации в базу данных

При создании базы данных выполнялся следующий SQL-запрос:
create database book_sc;
use book_sc;
.....
.....
.....
create table admin
( username char(16) not null primary key,
  password char(40) not null
);
grant select, insert, update, delete
on book_sc.*
to book_sc@localhost identified by '000';

Таблицы сделаны.

Теперь следующим запросом я прописываю пароль и логин админа:
INSERT INTO admin VALUES ('admin', sha1('admin'));
Готово.
Захожу для авторизации админа: логин - admin и пароль - admin и дальше как написано в сообщении #1
для пользователя book_sc привелегии установлены как USAGE.

4

Re: Проблема записи информации в базу данных

Pik-Nik
Как я понял book_sc - это имя БД и пользователь, которым подключается скрипт. Попробуйте задать этому пользователю привилегии из раздела "Структура".

5

Re: Проблема записи информации в базу данных

Спасибо, да book_sc - то и имя базы и логин посредством которого подключается скрипт. Привилегии и раздела структура установил все. Наименования то добавляются то нет, не понятно по какому принципу (я пробовал и кириллицу и цифры просто вводить, фильтр нигде не прописан), информацию обновить можно, т.е существующую, а вот категории не добавляются.

6

Re: Проблема записи информации в базу данных

Pik-Nik
Возможно ошибка где-то в скрипте. Не знаю, чем еще могу помочь, к сожалению.

7

Re: Проблема записи информации в базу данных

Hanut Так или иначе, спасибо, что откликнулись.

8 (изменено: Pik-Nik, 2009-03-21 20:36:24)

Re: Проблема записи информации в базу данных

Вот сценарий обработки (проверяет допустимость данных, введенных для нового наименования и помещает их в базу данных):

<?php

// Включить библиотеки функций для этого приложения
require_once('book_sc_fns.php');
session_start();

do_html_header('Добавление новой категории');
if (check_admin_user())
{
  if (filled_out($_POST))
  {
    $catname = $_POST['catname'];
   
   
    if(insert_category($catname))
      echo "Категория '$catname' добавлена в базу данных.<br />";
    else
      echo "Категория '$catname' не может быть добавлена в базу данных.<br />";
  }
  else
    echo 'Вы ввели не все данные.  Пожалуйста, повторите попытку.';
  do_html_url('admin.php', 'Назад в меню администрирования');
}
else
  echo 'Вам не разрешен доступ в область администратора.';

do_html_footer();

?>

Этот сценарий вызывает функцию insert_category(), которая используется сценарием администрирования.

function insert_category($catname)
// Добавляет в базу данных новую категорию
{
   $conn = db_connect();

   // Проверить, не существует ли уже такая категория
   $query = "select *
             from categories
             where catname='$catname'";
   $result = $conn->query($query);
   if (!$result || $result->num_rows!=0)
     return false; 

   // Добавить новую категорию
   $query = "insert into categories values
            ('', '$catname')";
   $result = $conn->query($query);
   if (!$result)
     return false;
   else
     return true;
}

9

Re: Проблема записи информации в базу данных

/* Смотрите структуру таблицы categories.
Если первое поле является идентификатором (ключ с аттрибутом auto_increment),
то замените пустую строку на NULL. */
$query = "insert into categories values
(NULL, '$catname')";

10 (изменено: Pik-Nik, 2009-03-22 09:38:34)

Re: Проблема записи информации в базу данных

Вот структура таблицы categories (первое поле является идентификатором):

create table categories
( catid int unsigned not null auto_increment primary key,
  catname char(60) not null
);

Hanut, если мы пишем, что поле catid not null и auto_increment, тогда есть ли смысл указывать его значение?

sad вот засада-то, не работает

11

Re: Проблема записи информации в базу данных

Pik-Nik
Перепишите запрос таким образом. Должно работать.

INSERT INTO `categories` (`catid`, `catname`) VALUES (NULL, "$catname");

12 (изменено: Pik-Nik, 2009-03-22 22:05:00)

Re: Проблема записи информации в базу данных

Перезаписал

$query = "insert into categories values(NULL, '$catname')";

теперь выглядит так:

$query = INSERT INTO 'categories' ('catid', 'catname') VALUES (NULL, "$catname");

Страница для добавления категории вообще не отображается!
Исправил на:

$query = "insert into 'categories' ('catid','catname') values (NULL,'$catname')";

Страница добавления категории отображается, но все равно не добавляет!!!

А вот еще что. В букваре написано, что чтобы код работал, как задумано, необходимо включить опцию magic_quotes_gps. Если этого не сделать, потребуется применить функцию addslashes() к вводимой в базу данных MySQL инфмации.

13

Re: Проблема записи информации в базу данных

Pik-Nik
Никогда не включайте Magic Qoutes. Это одна из самых распространенных проблемм. В 6 ветке PHP эти функции вообще удалены. Для решения проблемм с экранированием, используйте ниже приведенную функцию.

// Экранирование данных для составления запросов.
function User_addslashes($str) {
    if (!function_exists('get_magic_quotes_gpc') || !get_magic_quotes_gpc()) {
        $str = addslashes($str);
    }
    return $str;
}

$query = 'INSERT INTO `categories` (`catid`, `catname`) VALUES (NULL, "' . User_addslashes($catname) . '")';

14

Re: Проблема записи информации в базу данных

Hanut
Меня скоро белка посетит. Вот товар в категорию добавляется (и раньше добавлялся), а категория нет, нет и нет.

15

Re: Проблема записи информации в базу данных

Вот решение данной проблемы:

// Добавить новую категорию
   $query = "insert into categories values
             (NULL, '$catname')";
   $result = $conn->query($query);
   if (!$result)
         return "Ошибка в запросе при записи!".$conn->error;
   else
         return true;
   }