Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с добавлением в БД данных, Подробнее внутри. 
V
    Опции темы
Нурик Сакура
Дата 16.6.2006, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Доброго времени суток. Вот сел сейчас кодить и столкнулся с проблемой: ранее работавший скрипт после некоторой модификации перестал добавлять данные в БД.

У меня есть отдельно скриптик регистрации, в котором выделена функция newUser, данные в которую передаются через форму методом POST. Ниже привожу саму функцию и данные, которые ей передаются.

Код

function newUser($login, $char_name, $password, $email, $str, $agi, $vit, $int, $dex, $luk)
{
    global $link;
    global $users_table;

//в базе такие столбцы:
//login, char_name, access_level, password, email, job, baselvl, joblvl, baselvlexp, joblvlexp, str, agi, vit, int, dex, luk
    $query="INSERT INTO " . $users_table . " VALUES('$login', '$char_name', '0', '$password', '$email', 'Novice', '1', '1', '0', '0', '$str', '$agi', '$vit', '$int', '$dex', '$luk')";
    if(!($dbResult = mysql_query($query, $link)))
    {
        print("Unnable to work with <b>$users_table!</b><br>\n" .
              "MySQL tells: " . mysql_error() . "<br>\n");
    }

    return true;
}


Код

newUser($_POST["login"], $_POST["char_name"], $_POST["password"], $_POST["email"], $_POST["str"], $_POST["agi"], $_POST["vit"], $_POST["int"], $_POST["dex"], $_POST["luk"]);


После регистрации происходит активация сессии, переход на новую страничку "для зареганых", где выводиться логин пользователя. Но в БД ничего не добавляется. Пожалуйста, если кто поймет, в чем я допустил ошибку - подскажите, плз. 
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Black Rabbit
Дата 16.6.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.10.2004

Репутация: 2
Всего: 2



А почему в твоем запросе нет перечисления полей?
$query="INSERT INTO " . $users_table . " (login,name,...) values('{$login}',...)"

что содержится в $users_table?
Данные переданные через $_POST фильтруются?

Твоя функция всегда возвращает true, может у тебя сразу происходит перенаправление и ты не успеваешь прочесть сообщение об ошибке? 
Попробуй переписать так
Код


function newUser($login, $char_name, $password, $email, $str, $agi, $vit, $int, $dex, $luk)
{
    global $link;
    global $users_table;


    $query="INSERT INTO " . $users_table . " VALUES('$login', '$char_name', '0', '$password', '$email', 'Novice', '1', '1', '0', '0', '$str', '$agi', '$vit', '$int', '$dex', '$luk')";
    if(!($dbResult = mysql_query($query, $link)))
    {
        print("Unnable to work with <b>$users_table!</b><br>\n" .
              "MySQL tells: " . mysql_error() . "<br>\n");
        return false;
    }

    return true;
}
или используй вместо print функцию die(); 
PM MAIL ICQ   Вверх
Нурик Сакура
Дата 16.6.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Цитата

А почему в твоем запросе нет перечисления полей?
$query="INSERT INTO " . $users_table . " (login,name,...) values('{$login}',...)"

На сколько я знаю, это не обязательно.

Цитата

что содержится в $users_table?

Мм.. название таблицы, в которой хранятся данные про юзверей.

Цитата

Данные переданные через $_POST фильтруются?

В каком плане "фильтруются"? Есть проверка на правильность введенных данных.

Цитата

Твоя функция всегда возвращает true, может у тебя сразу происходит перенаправление и ты не успеваешь прочесть сообщение об ошибке? 
Попробуй переписать так

Попробовал. Результат тот же. В БД ничего не добавилось. 
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Black Rabbit
Дата 16.6.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.10.2004

Репутация: 2
Всего: 2



В том-то и дело, что обязательно
Можно не указывать поля, значения в которых устанавливаются по умолчанию, но тогда и в values() данное значение должно быть опущено
А на твой запрос должна выдаться ошибка Column count doesn't match value count

Добавлено @ 21:02 
Фильтруются в том смысле, что удаляются ли перед вставкой потенциально опасные символы(кавычки и тд) ?
 
PM MAIL ICQ   Вверх
Нурик Сакура
Дата 16.6.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Цитата(Black Rabbit @ 16.6.2006,  21:00)
В том-то и дело, что обязательно
Можно не указывать поля, значения в которых устанавливаются по умолчанию, но тогда и в values() данное значение должно быть опущено
А на твой запрос должна выдаться ошибка Column count doesn't match value count

Добавлено @ 21:02 
Фильтруются в том смысле, что удаляются ли перед вставкой потенциально опасные символы(кавычки и тд) ?

Прописал. Ничего не изменилось.

Что же касается фильтрации - то да, я пока не ас в ПХП, сделал просто проверку, что если лишние символы есть - выдает сообщение об ошибке. 
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Нурик Сакура
Дата 16.6.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Я сейчас посидел, немного повырезал из разных файлов, сложил все, что, по моему скромному мнению, в чем может скрываться ошибка, в один файл. Вот, что получилось:

Код

<?php

require "lang.en.php";

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "txtro";
$users_table  = "users";

function connectToDB()
{
    global $link, $dbhost, $dbuser, $dbpass, $dbname;

    if(!($link = mysql_connect($dbhost, $dbuser, $dbpass)))
    {
        print("Unable to connect to <b>$dbhost!</b><br>!\n
                Ending work.<br>\n");
    }

    if(!($dbResult = mysql_query("USE " . $dbname, $link)))
    {
        print("Unable to wort with database <b>$dbname!</b><br>\n
                Ending work.<br>\n");
    }

}

connectToDB();

function newUser($login, $char_name, $password, $email, $str, $agi, $vit, $int, $dex, $luk)
{
    global $link;
    global $users_table;

    $query="INSERT INTO " . $users_table . " (login, char_name, access_level, password, email, job, baselvl, joblvl, baselvlexp, joblvlexp, str, agi, vit, int, dex, luk) VALUES('$login', '$char_name', '0', '$password', '$email', 'Novice', '1', '1', '0', '0', '$str', '$agi', '$vit', '$int', '$dex', '$luk')";
    if(!($dbResult = mysql_query($query, $link)))
    {
        print("Unnable to work with <b>$users_table!</b><br>\n" .
              "MySQL tells: " . mysql_error() . "<br>\n");
        return false;
    }
    return true;
}

if($_POST["submit"])
{
    newUser($_POST["login"], $_POST["char_name"], $_POST["password"], $_POST["email"], $_POST["str"], $_POST["agi"], $_POST["vit"], $_POST["int"], $_POST["dex"], $_POST["luk"]);
}

?>

<html>
<head>
<title><?php print($lang['title_reg']); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<h1><?php print $lang['title_reg'] ?></h1>
<form action="<?=$_SERVER["PHP_SELF"]?>" method="POST">
<table>
<tr>
    <td>
        <?php print $lang['login'] ?>:
    </td>
    <td>
        <input type="text" name="login" value="<?php print $_POST["login"] ?>" maxlength="15">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['char_name'] ?>:
    </td>
    <td>
        <input type="text" name="char_name" value="<?php print $_POST["char_name"] ?>" maxlength="16">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['password'] ?>:
    </td>
    <td>
        <input type="password" name="password" value="" maxlength="15">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['pass_confirm'] ?>:
    </td>
    <td>
        <input type="password" name="password2" value="" maxlength="15">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['email'] ?>:
    </td>
    <td>
        <input type="text" name="email" value="<?php print $_POST["email"] ?>" maxlength="40">
    </td>
</tr>

<tr>
    <td>
        <?php print $lang['str'] ?>:
    </td>
    <td>
        <input type="text" name="str" value="" maxlength="1" size="2">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['agi'] ?>:
    </td>
    <td>
        <input type="text" name="agi" value="" maxlength="1" size="2">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['vit'] ?>:
    </td>
    <td>
        <input type="text" name="vit" value="" maxlength="1" size="2">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['int'] ?>:
    </td>
    <td>
        <input type="text" name="int" value="" maxlength="1" size="2">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['dex'] ?>:
    </td>
    <td>
        <input type="text" name="dex" value="" maxlength="1" size="2">
    </td>
</tr>
<tr>
    <td>
        <?php print $lang['luk'] ?>:
    </td>
    <td>
        <input type="text" name="luk" value="" maxlength="1" size="2">
    </td>
</tr>

<tr>
    <td>
        &nbsp;
    </td>
    <td>
        <input name="submit" type="submit" value="<?php print $lang['submit'] ?>">
    </td>
</tr>

</table>
</form>
</body>
</html>


Всякие проверки я отбросил, мне важно понять, почему не добавляется в БД. Когда я запускаю скрипт и ввожу данные, выводиться вот это:
Код

Unnable to work with users!
MySQL tells: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int, dex, luk) VALUES('Nurik', 'Nurik', '0', 'password', '[email protected]', 'N' at line 1


Добавлено @ 22:35 
Все. Проблема решена. Как оказалось, суть проблемы заключалась в том, что БД не может нормально работать со столбцом, название которого int. Пришлось ставить inta, хотя не очень красивое это сокращение слова intelligence =( Black_Rabbit, спасибо за попытку помочь. С меня плюсик =) 

Это сообщение отредактировал(а) Nurik - 16.6.2006, 22:30
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Drache
Дата 17.6.2006, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 31.3.2006

Репутация: нет
Всего: 3



smile
Подсказка - пиши названия таблиц, БД, столбцов в обратных кавычках (`).
Тогда не будет таких проблем. 
PM MAIL   Вверх
Нурик Сакура
Дата 18.6.2006, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Цитата(Drache @  17.6.2006,  02:17 Найти цитируемый пост)
Подсказка - пиши названия таблиц, БД, столбцов в обратных кавычках (`).
Тогда не будет таких проблем.

Кстати, я писал. Пробовал. Может, где-то фтыкнул, но оно все равно не работало. Но возьму на заметку и буду пробовать, может, что-то и получится. 
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0894 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.