Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Авторизует,но выдаёт много ошибок


Автор: Димос 27.11.2009, 21:31
Скрипт авторизует, но не возвращает обратно и при этом выдаёт ошибки:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 
Notice: Undefined variable: link
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource
Warning: Cannot modify header information - headers already sent by

Вот скрипт:
Код
<?php
error_reporting(E_ALL);
if(isset($_POST['auth_submit'])) {
$db = mysql_connect("localhost", "wmggfg_666","666");
mysql_select_db("wmggfg_666");
$login = $_POST['login'];
$pass = $_POST['pass']; 
$query = "SELECT id, login, pass
FROM admin
WHERE login ='{$login}' AND pass='{$pass}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
echo "Авторизованно." ;
else
echo "Доступ закрыт!" ;
}
?>
<?php
session_start();
      $_SESSION['user'] = $login;
      mysql_close($link);
      if (isset($_SERVER['HTTP_REFERER'])) {
         header ("location: ".$_SERVER['HTTP_REFERER']);
      }else {
         header ("location: index.php");
      }
?>
<html>
<head>
<title>Авторизация</title>
</head>
</html>

Автор: skyboy 27.11.2009, 23:41
итак, ошибки:
1.
Код

$db = mysql_connect("localhost", "wmggfg_666","666");
...
mysql_close($link);

идентификатор соединения сохраняем в $db, но закрыть пытаемся по содержимому переменной $link. 
2. если используешь header, то до него не должно быть никакого вывода.
3. если используешь header('Location:..., то после него не должно быть больше вывода. Вообще. Для верности стоит поставить exit() или die().
4. session_start() неявно(для программиста на PHP) отправляет заголовки, потому то же ограничение - до session_start() никакого вывода. И да, сообщения об ошибках, выводимые РНР - это тоже вывод. Потому сначала надо избавиться от ошибок, приводящих к выводу сообщений - и "headers already sent" тоже пропадет, возможно.

Автор: Димос 28.11.2009, 00:46
так надо?

Код
<?php
error_reporting(E_ALL);
if(isset($_POST['auth_submit'])) {
$db = mysql_connect("localhost", "wmggfg_666","666");
mysql_select_db("wmggfg_666");
$login = $_POST['login'];
$pass = $_POST['pass']; 
$query = "SELECT id, login, pass
FROM admin
WHERE login ='{$login}' AND pass='{$pass}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
echo "Авторизованно." ;
else
echo "Отказанно в доступе!" ;
}
?>
<?php
session_start();
      $_SESSION['user'] = $login;
      mysql_close($db, $link);
      if (isset($_SERVER['HTTP_REFERER'])) {
         header ("location: ".$_SERVER['HTTP_REFERER']);
       die("location: index.php");
 exit()
?>
<html>
<head>
<title>Авторизация</title>
</head>
</html>


Автор: SneG0K 28.11.2009, 00:57
Цитата(Димос @  27.11.2009,  23:46 Найти цитируемый пост)
if (mysql_num_rows($sql) == 1)
echo "Авторизованно." ;
else
echo "Отказанно в доступе!" ;

Это полюбому уже вывод до head и session_start()
В идеале решение таких проблем - это использование шаблонизаторов.
Код

mysql_close($db, $link);

Во вторых
Код

mysql_close($db);

Автор: Димос 28.11.2009, 15:04
А ну да ,всё заработалло. Только почему у меня при вводе в форму авторизации любых букв просто от
балды он авторизует, причём в базе только одна запись, авторизует всё что напишешь??

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)