помогите пожалуйста)
<? //подключиться к MySQL
$mysql=mysql_pconnect("localhost", "root", "");
if(!$mysql) die("не могу подключиться к mysql");
$mysql=mysql_select_db('auth');
if(!$mysql) die("не могу подключиться к базе данных");
$query="select * from auth where name='$_POST['name']' and pass='$_POST['pass']';" ; //здесь выдает ошибку
$result=mysql_query($query);
if(!$result) die("не могу запустить запрос");
for($i=0; $i<count($result); $i++)
echo $result[$i];
$count = mysql_result( $result, 0, 0 );
if ( $count > 0 )
{
// Комбинация имени и пароля посетителя правильная
echo "<h1>Here it is !</h1>" ;
echo "Text.";
}
else
{
// Комбинация имени и пароля посетителя не правильная
echo "<h1>Go Away ! </h1>" ;
echo "You are not authorized to view this resource.";
}
?>
Вот так надо
$query="select * from auth where name='".mysql_real_escape_string($_POST['name'],$mysql)."' and pass='".mysql_real_escape_string($_POST['pass'],$mysql)."';";
А еще die лучше не используйте.
Код:
$mysql=mysql_pconnect("localhost", "root", "") or die("не могу подключиться к mysql");
И во всех остальных случаях аналогично.
2. По поводу ошибки... ассоциативные масивы нельзя так преобразовывать в строку
Код:
$query="select * from auth where name='".$_POST['name']."' and pass='".$_POST['pass']."'" ;
3. А пароль что в БД в чистом виде лежит? Не красиво
Цитата: Finder
Неэкранированые данные и лучше с оператором конкатенации, будет понятнее.
Вот так надо
$query="select * from auth where name='".mysql_real_escape_string($_POST['name'],$mysql)."' and pass='".mysql_real_escape_string($_POST['pass'],$mysql)."';";
А еще die лучше не используйте.
Вот так надо
$query="select * from auth where name='".mysql_real_escape_string($_POST['name'],$mysql)."' and pass='".mysql_real_escape_string($_POST['pass'],$mysql)."';";
А еще die лучше не используйте.
Но-но. смотри внимательно что у него за переменная $mysql
http://php.net/manual/en/language.types.string.php глава Variable parsing
правильно будет:
$query="select * from auth where name='{$_POST['name']}' and pass='{$_POST['pass']}';" ;
$query="select * from auth where name='$_POST[name]' and pass='$_POST[pass]';" ;
$query='select * from auth where name=\''.$_POST['name'].'\' and pass=\''.$_POST['pass'].'\';';
блин, пока напишешь, ссылки найдёшь - до тебя уже 3 поста написали)))
правильно будет:
$query="select * from auth where name='{$_POST['name']}' and pass='{$_POST['pass']}';" ;
$query="select * from auth where name='$_POST[name]' and pass='$_POST[pass]';" ;
$query='select * from auth where name=\''.$_POST['name'].'\' and pass=\''.$_POST['pass'].'\';';
блин, пока напишешь, ссылки найдёшь - до тебя уже 3 поста написали)))
Lone Wolf, спасибо за помощь) не знал что нельзя ассоциативный массив преобразовывать в строку) по поводу хранения паролей. конечно буду использовать какое-то шифрование, но это только знакомство с базами данных) поэтому код написан по-простому) спасибо всем!!!!
А да, ой не посмотрел, он зачемто затирает идентификатор соединения. Учитесь писать аккуратно сразу. Если в этом коде надо будет работать еще с одной базой данных, то придется его переписывать. Юзайте идентификатор соединения с базой данных, пожааааалуйста.
Юзайте sprintf для формирования запроса. Код становится намного прозрачнее и прятнее.
sprintf - хорошая идея до тех пор, пока не надо заботиться о скорости.. самое быстрое (в PHP) если не выводить - конкатенация строк в одинарных кавычках..