|
|
|
| Есть следующий код
<?php
session_start();
include ("dbconnect.php");
echo $_POST['login'];
$login=mysql_query("SELECT * FROM user WHERE nik = ".$_POST['login'].";");
if($login)
{
echo "сюда прошли";
$name=mysql_query("SELECT name FROM user WHERE nik = ".$_POST['login'].";");
$_SESSION['login']=mysql_result($name,0);
}
?>
|
При работе
срабатывает, но надписи "сюда прошли" не вылезает, хотя в phpMyAdmin при замене ".$_POST['login']." на буквенное значение все работает.
Помогите, пожалуйста, найти выход из положения. | |
|
|
|
|
|
|
|
для: tim_mironov
(15.10.2005 в 21:09)
| | Надо заключать имя в кавычки:
<?php
session_start();
include ("dbconnect.php");
echo $_POST['login'];
$login=mysql_query("SELECT * FROM user WHERE nik = '".$_POST['login']."';");
if($login)
{
echo "сюда прошли";
$name=mysql_query("SELECT name FROM user WHERE nik = '".$_POST['login']."';");
$_SESSION['login']=mysql_result($name,0);
}
?>
|
А вообще никогда не подставляйте в SQL запрос явно данные из суперглобальных массивов GET, POST , COOKIE и др. т.к. появляется возможность взлома скрипта при помощи SQL - иньекций. | |
|
|
|
|
|
|
|
для: Евгений Петров
(15.10.2005 в 21:21)
| | Спасибо | |
|
|
|
|
|
|
|
для: Евгений Петров
(15.10.2005 в 21:21)
| | А какое альтернативное решение вы предлогаете.....для примера кодик набейпе пожалуйста | |
|
|
|
|
|
|
|
для: hatsker
(25.10.2005 в 08:17)
| | Самое простое - удалять все одинарные кавычки из переменных, передаваемых в sql запрос. | |
|
|
|
|
|
|
|
для: tim_mironov
(15.10.2005 в 21:09)
| | Проявилась еще одна проблема: при выполнении следующего скрипта
<?php
session_start();
include ("dbconnect.php");
$POSTlogin=$_POST['login'];
$login=mysql_query("SELECT name FROM user WHERE nik = '".$POSTlogin."';");
if($login)
{
$_SESSION['login']=mysql_result($login,0);
}
header("location: menu.php");
?>
|
при поступлении переменной $_POST['login'], значения которой нет в базе вылезает следующая штука
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 3 in C:\www\scripts\login.php on line 8.
Разъясните, пожалуйста, почему не срабатывает if($login). | |
|
|
|
|
|
|
|
для: tim_mironov
(16.10.2005 в 20:44)
| | Я например для себя сделал так:
<?php
// Making query
//=========================================
$total_query = "SELECT COUNT(*) FROM employee
WHERE Employee_Login = '$login'
AND Employee_Password = '$password'";
$total_result = mysql_query($total_query)
or die ('Error : '.mysql_error() );
$total = mysql_result($total_result,0);
if($total > 0){
// user is logged in
$login_ok = true;
// making query to get user infos
$user_query = "SELECT * FROM employee
WHERE Employee_Login = '$login'
AND Employee_Password = '$password'";
$user_result = mysql_query($user_query)
or die ('Error : '.mysql_error() );
$user_data = mysql_fetch_assoc($user_result);
// put user infos into session
$_SESSION['name'] = $user_data['Employee_Name'];
$_SESSION['category'] = $user_data['Employee_Category'];
}
?>
|
| |
|
|
|
|
|
|
|
для: codexomega
(16.10.2005 в 23:02)
| | Спасибо за отклик. Идея мне понравилась и работает, но хотелось бы сохранить простоту. В самоучителе по PHP моя конструкция якобы работает. Вот и хочу узнать почему она не работает у меня.
P.S. Правда не понимаю какие ошибки у Вас предугадываются конструкцией типа $user_result = mysql_query($user_query) or die ('Error : '.mysql_error() ); Был бы не против узнать и об этом. | |
|
|
|
|
|
|
|
для: tim_mironov
(16.10.2005 в 23:19)
| | Если в запросе будут ошибки, они высвятятся на странице.
$user_result = mysql_query($user_query) or die ('Error : '.mysql_error() ):
Осуществи запрос, а в случае проблемы, высвети ошибки и выйди из запроса. | |
|
|
|
|
|
|
|
для: codexomega
(16.10.2005 в 23:29)
| | Но это возможно только на стадии отладки. В процессе использования это пользователям будет мешать, да и может создать "дыру". | |
|
|
|
|
|
|
|
для: tim_mironov
(16.10.2005 в 20:44)
| | if($login) срабатывает только на неправильный синтаксис SQL-запроса, но не на число возвращаемых записей. Для проверки числа записей вам придётся воспользоваться функцией mysql_num_rows()
<?php
session_start();
include ("dbconnect.php");
$POSTlogin=$_POST['login'];
$login=mysql_query("SELECT name FROM user WHERE nik = '".$POSTlogin."';");
if($login)
{
if(mysql_num_rows($login) > 0) $_SESSION['login']=mysql_result($login,0);
}
header("location: menu.php");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(17.10.2005 в 00:59)
| | Cheops я как то спрашивал, а вы как то отвечали (но я не помню где :) ) что если проверять на количество возвращаемых записей, то возникает риск того, что SQL - запрос можно будет изменить таким образом, что он вернет хотя бы одно значение. Как можно др. способом проверить возвратила ли MySQL какой нибудь результат? | |
|
|
|
|
|
|
|
для: Евгений Петров
(17.10.2005 в 01:52)
| | Ну в данном случае пожалуй ничего и не сделаешь (тем более нам не известна цель), в любом случае следует проводить защиту от SQL-инъекций, если она будет корректной, то манипулировать запросом уже не удастся. | |
|
|
|
|
|
|
|
для: cheops
(17.10.2005 в 00:59)
| | Уточняю вопрос: "При вводе в $POSTlogin значения не существующего в базе, все равно выполняется команда находящаяся в операторных скобках после if($login), т.е. даже при $login=false. Почему это происходит? Может я чего не понимаю?" | |
|
|
|
|
|
|
|
для: tim_mironov
(17.10.2005 в 10:41)
| | if($login) срабатывает только на неправильный синтаксис SQL-запроса, и будет срабатывать всегда, даже если значения $POSTlogin не существует в базе данных. | |
|
|
|
|
|
|
|
для: cheops
(17.10.2005 в 13:53)
| | Спасибо. | |
|
|
|
|
|
|
|
для: tim_mironov
(15.10.2005 в 21:09)
| | Есть следующая таблица:
Поле Тип Атрибуты Ноль По умолчанию Дополнительно
id mediumint(8) UNSIGNED Нет auto_increment
surname varchar(20) Да NULL
name varchar(20) Нет
patronymic varchar(20) Да NULL
nik varchar(20) Нет
password varchar(8) Нет
e-mail varchar(45) Да NULL
status enum('a', 'm', 'u') Нет u
lastcamedate timestamp Нет CURRENT_TIMESTAMP
|
При таком запросе из PHP:
mysql_query("INSERT INTO user VALUES (, '".$POSTsurname."', '".$POSTname."', '".$POSTpatronymic."', '".$POSTlogin."', '".$POSTpassword."', '".$POSTemail."');");
|
скрипт выполняется до конца, но значения в базу не добавляются. Значения $POSTname, $POSTnik, $POSTpassword обязательно существуют и !=0.
Подскажите, пожалуйста, почему это может происходить. | |
|
|
|
|
|
|
|
для: tim_mironov
(19.10.2005 в 10:52)
| | А почему NULL в первом значении не пишите? Следует выяснить ошибку при помощи кода
<?php
if(!mysql_query("INSERT INTO user VALUES (NULL, '".$POSTsurname."', '".$POSTname."', '".$POSTpatronymic."', '".$POSTlogin."', '".$POSTpassword."', '".$POSTemail."');"))
{
exit("Ошибка - ".mysql_error());
}
?>
|
PS Под новые вопросы лучше заводить новые темы. | |
|
|
|