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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с sql-запросом (или с чем-то другим) 
:(
    Опции темы
CruorVult
Дата 17.11.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




Код

<?session_start();
require_once('functions.php');
zagolovok('');

$rah=$_POST['rah'];
$summa=$_POST['summa'];
$username=$_SESSION['s_user'];
if (isset($_POST['rah']) && isset($_POST['summa']) )
{
    $hostname="localhost";
    $usernames="root";
    $password="";
    $dbName="bank";
    $usertable="operation";
    mysql_CONNECT($hostname,$usernames,$password) or die ("can't connect to DB ");
    mysql_select_db("$dbName") or die ("Can't select DB");
    $query="INSERT INTO $usertable Values('$username','$rah','$summa')";
    $result=mysql_query($query);
    if($result){
    echo "GOOD";
    }
    elseif(!$result)
    {echo "error";}
    mysql_close();
}
else "Заполнены не все поля";
?>



Проблема заключается в том, что не выполняется запрос INSERT INTO $usertable Values('$username','$rah','$summa'). Тоесть конектится к ДБ нормально. Выполняется этот кусок :
             
elseif(!$result)
    {echo "error";}

Подскажите, может я что-то не правильно делаю!

Это сообщение отредактировал(а) CruorVult - 17.11.2008, 17:01
PM MAIL Skype   Вверх
americanets
Дата 17.11.2008, 16:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

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



CruorVult,  выделяй код  подсветкой


Код

INSERT INTO $usertable Values('$username','$rah','$summa')


конкатенация , нельзя ставить переменную в одинарных кавычках


+ mysql_real_escape_string

Код

 $query="INSERT INTO $usertable Values('". mysql_real_escape_string($username) . "', ... )";



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
CruorVult
Дата 17.11.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всеравно выводит error, может дело совсем не в запросе а в чем-то другом 
PM MAIL Skype   Вверх
awers
Дата 17.11.2008, 17:15 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



americanets, плохо шутки шутите
Код

insert into `mytable` (`id`,`name`) values (1,'adam')


Добавлено через 1 минуту и 34 секунды
и еще по поводу
Цитата

конкатенация , нельзя ставить переменную в одинарных кавычках

минус вам положен..

Код

 $query="INSERT INTO $usertable Values('$username','$rah','$summa')";


Добавлено через 6 минут и 58 секунд
А вообще вопросов по этому скрипту много...
Код

<?session_start();

почему не 
Код

<?php
ses...


Код


$rah=$_POST['rah'];
$summa=$_POST['summa'];
$username=$_SESSION['s_user'];


и только потом проверка на существование??
Код

if (isset($_POST['rah']) && isset($_POST['summa']) )


блок
Код

    $hostname="localhost";
    $usernames="root";
    $password="";
    $dbName="bank";
    $usertable="operation";
    mysql_CONNECT($hostname,$usernames,$password) or die ("can't connect to DB ");
    mysql_select_db("$dbName") or die ("Can't select DB");


вообще внутри ифа. так не проще ли все в 2 строки сделать?

Код

    $query="INSERT INTO $usertable Values('$username','$rah','$summa')";
    $result=mysql_query($query);

тоже прикольно ничего не скажешь )) это же не делфи )


Код

    if($result){
    echo "GOOD";
    }
    elseif(!$result)
    {echo "error";}
    mysql_close();
}
else "Заполнены не все поля";


как говорит лебедев - мегакруто ))
?>
PM MAIL WWW ICQ Skype   Вверх
unicross
Дата 17.11.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CruorVult @  17.11.2008,  16:23 Найти цитируемый пост)
    $result=mysql_query($query);

После этой строки вставьте 
Код

echo mysql_errno() . ": " . mysql_error() . "<BR>";

Покажите результат вывода и SQL-запрос для создания таблицы.
Цитата(CruorVult @  17.11.2008,  16:23 Найти цитируемый пост)
<?session_start();

По моему надо
Код

<?php
session_start();

Думаю в переменной 
Цитата(CruorVult @  17.11.2008,  16:23 Найти цитируемый пост)
$username=$_SESSION['s_user'];

пусто...
PM MAIL WWW   Вверх
awers
Дата 17.11.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



вообще что то типа
Код

<?php
session_start();
require_once('functions.php');
zagolovok('');

if (isset($_POST['rah']) && isset($_POST['summa']) )
{
    $rah=mysql_real_escape_string($_POST['rah']);
    $summa=mysql_real_escape_string($_POST['summa']);
    $username=mysql_real_escape_string($_SESSION['s_user']);

    mysql_connect('localhost','bank','') or die('...');
    mysql_select_db('bank') or die('...');
    if(mysql_query("INSERT INTO `operation` (`username`,`rah`,`summa`) Values('$username','$rah','$summa')")){
        echo "GOOD";
    }else{
        echo "error";
    }
    mysql_close();
}else{
    echo "Заполнены не все поля";
}

может чего и сам не досмотрел

Добавлено через 46 секунд
unicross
Цитата

Думаю в переменной Цитата(CruorVult @  17.11.2008,  16:23 )
$username=$_SESSION['s_user'];


пусто...

думаю тут и так глюков валом ))

Добавлено через 1 минуту и 44 секунды
unicross, хотя нет стойте. а может у него на другой странице данные записываются. короче в любом случае все криво. 
PM MAIL WWW ICQ Skype   Вверх
CruorVult
Дата 17.11.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



короч, вот текст аутентификации(который работает)
Код

<?session_start();
require_once('functions.php');
zagolovok('');

$username=$_POST['username'];
$passwd=$_POST['passwd'];

if($username && $passwd)
{
$hostname="localhost";
$usernames="root";
$password="";
$dbName="bank";
$usertable="users";
$db_connect=mysql_CONNECT($hostname,$usernames,$password);
mysql_select_db("$dbName") or die ("Can't select DB");
$query=mysql_query("select * from $usertable where userid='$username' and pass='$passwd'");
$result=mysql_num_rows($query);
if($result==0)
{
echo "Не правильный логин или пароль<br>
 <a href=main.php>На главную</a>";
}
if($result>0)
{
$_SESSION['s_user']=$username;
    if(isset($_SESSION['s_user']))
    {
        if($_SESSION['s_user']!=='Sasha')
        {
        echo '<h3>Привет, '.$_SESSION['s_user'].'</h3><br>';
        vnesok();
        }
        else
        {
        echo '<h3>Привет, админ '.$_SESSION['s_user'].'</h3><br>';
        }
        display_user_menu();

    }
}

mysql_close();
}

?>



Сесия продолжается...

если я захожу под своим логином вызывается ф-я vnesok();

Код

<form method='post'action='operation.php'>
<table border="1" bgcolor='#cccccc'>
    <tr>
        <td colspan=2 align="center"><h3>Внесок на рахунок</h3></td> 
    </tr>
    <tr>
        <td>Номер счета</td>
        <td><input type="text" name=rah size=16 maxlength=16></td>
    </tr>
    <tr>
        <td>сума </td>
        <td><input type="text" name=summa size=16 maxlength=16></td>
    </tr>
    <tr>
    <td colspan=2><input type="submit" value="Внести"></td>
    </tr>
</table>
</form>



заполняются поля и потом  вызывается этот мой код(который не пашит)

Добавлено через 8 минут и 15 секунд
Цитата(awers @ 17.11.2008,  17:15)
Код

    if($result){
    echo "GOOD";
    }
    elseif(!$result)
    {echo "error";}
    mysql_close();
}
else "Заполнены не все поля";


Это я так искал в чем ошибка smile 

Это сообщение отредактировал(а) CruorVult - 17.11.2008, 19:23
PM MAIL Skype   Вверх
CruorVult
Дата 17.11.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(unicross @  17.11.2008,  17:27 Найти цитируемый пост)
echo mysql_errno() . ": " . mysql_error() . "<BR>";
Покажите результат вывода и SQL-запрос для создания таблицы.

Вот вывело
1136: Column count doesn't match value count at row 1

вот две таблици 
Код
CREATE TABLE `users` (
`userid` CHAR( 17 ) NOT NULL ,
`pass` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `userid` ) 
);

CREATE TABLE `operation` (
`userid` VARCHAR( 17 ) NOT NULL ,
`num_rah` INT( 20 ) NOT NULL ,
`summ_v` FLOAT NOT NULL ,
`t_zb` INT NOT NULL ,
`date` DATE NOT NULL ,
`procent` FLOAT NOT NULL 
);



Это сообщение отредактировал(а) CruorVult - 17.11.2008, 19:49
PM MAIL Skype   Вверх
unicross
Дата 17.11.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CruorVult @  17.11.2008,  19:34 Найти цитируемый пост)
1136: Column count doesn't match value count at row 1

Ошибка сообщает, что число столбцов в таблице и в операторе INSERT не совпадают...
Цитата

 $query="INSERT INTO $usertable Values('$username','$rah','$summa')";

У вас 6 полей, а вставляете только в 3. Где логика?

PM MAIL WWW   Вверх
CruorVult
Дата 17.11.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понял, в чем причина! А главное сам так думал  smile

Добавлено через 8 минут и 12 секунд
Теперь все GOOD smile  Большое спасибо за помощь
PM MAIL Skype   Вверх
unicross
Дата 17.11.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CruorVult @  17.11.2008,  19:57 Найти цитируемый пост)
Понял, в чем причина! А главное сам так думал

Думаю все-таки не поняли... Перечитайте ВНИМАТЕЛЬНО все исправления сделанные в вашем коде awers

Цитата(CruorVult @  17.11.2008,  19:18 Найти цитируемый пост)
$query=mysql_query("select * from $usertable where userid='$username' and pass='$passwd'");


Код

$_POST['username'] = "' OR ''='";
$_POST['passwd'] = "' OR ''='";

С этими данными я войду в вашу систему НЕ ЗНАЯ ни логина ни пароля...
PM MAIL WWW   Вверх
CruorVult
Дата 17.11.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(unicross @  17.11.2008,  20:07 Найти цитируемый пост)
Перечитайте ВНИМАТЕЛЬНО все исправления сделанные в вашем коде awers


Переделал, но после этого вывело ошибки :
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\home\localhost\www\project\rgr\operation.php on line 9

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in D:\home\localhost\www\project\rgr\operation.php on line 9 

PM MAIL Skype   Вверх
unicross
Дата 17.11.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CruorVult @  17.11.2008,  20:44 Найти цитируемый пост)
Переделал, но после этого вывело ошибки :

Да. Здесь awers просто ошибся в последовательности. Функцией mysql_real_escape_string() можно пользоваться ТОЛЬКО после подключения к базе данных!!! А вот пользоваться этой функцией надо обязательно...

Итог. Вначале проверяем существование переменных (лишь потом создаем короткие имена), затем подключаемся к базе данных, потом используем функцию mysql_real_escape_string() и только в конце выполняем SQL-запрос и проверяем его результат.

PM MAIL WWW   Вверх
CruorVult
Дата 17.11.2008, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Теперь разобрался, еще почитал про эту ф-ю на http://ua.php.net/mysql_real_escape_string, там все подробно расписано. Ну конечно в нынешнем проекте эта ф-я не очень так и надо но на будущее весьма полезна  smile 

Также не помешает использовать готовую ф-ю
Код

function quote_smart($value)
{
    // если magic_quotes_gpc включена - используем stripslashes
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    // Если переменная - число, то экранировать её не нужно
    // если нет - то окружем её кавычками, и экранируем
    if (!is_numeric($value)) {
        $value = "'" . mysql_real_escape_string($value) . "'";
    }
    return $value;
}

PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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