Jump to content
  • 0

Простенькая авторизация на PHP


konivnik
 Share

Question

Привет!

Подскажите пожалуйста в чем проблема?

Решил попрактиковаться в php и сделал простенькую авторизацию.

На локальном компьютере (денвере)

Вот код:


<?php
session_start();
include_once("blocks/bd.php");
if (isset($_POST['login']) && isset($_POST['password']))
{
$login = mysql_real_escape_string($_POST['login']);
$password = $_POST['password'];

$query = "SELECT `id`
FROM `users`
WHERE `login`='{$login}' AND `password`='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());

if (mysql_num_rows($sql) == 1) {

$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
}
else {
die('Такой логин с паролем не найдены в базе данных.');
}
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="style/index0.1.css" rel="stylesheet" type="text/css">
<title>Бла бла бла!</title>

</head>

<body>

<?php
if (isset($_SESSION['user_id'])) {
?>
Все ок мы авторизованы

<?php
}
else {

?>
<div id="center">
<form action="" method="post" name="login">
<table>
<tr>
<td>Логин:</td>
<td><input type="text" name="login"></td>
</tr>
<tr>
<td>Пароль:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Войти"></td>
</tr>
</table>
</form>
</div>

<?php } ?>
</body>
</html>

Но вот беда выдает ошибку все время


Warning: session_start(): Cannot send session cookie - headers already sent by (output started at z:\home\qqq.ru\www\index.php:1) in z:\home\qqq.ru\www\index.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at z:\home\qqq.ru\www\index.php:1) in z:\home\qqq.ru\www\index.php on line 2

Спасибо.

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Файл сохранён без BOM?

Int до вашего ответа даже и не знал что такое BOM!

Почитал разобрался оказывается был :(

Вроде и писал все в Dreamweaver.

Спасибо огромное!!!

А есть ли функция какая нить в Dreamweaver что бы проверяла на BOM автоматом?

Link to comment
Share on other sites

  • 0

Здравствуйте!

Возникла схожая проблемма.

Начал делать форму отправки сообщений с сайта.

При добавлении в файл sample-html-graphic.php

<?php session_start(); ?>

Выскакивает ошибка:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\barma\www\chpu.php:62) in Z:\home\barma\www\sample-html-graphic.php on line 1

chpu.php:

62 строка, это последняя пустая строка после ?>


<?php

// Получаем URL в переменную $result в случае yourdomain.com/name-page.html в $result окажется строка: /name-page.html

// $result = $_SERVER['REQUEST_URI'];

$result = parse_url($_SERVER['REQUEST_URI']);
$result = $result['path'];

// проверяем, что бы в URL не было ничего, кроме символов алфавита (a-z A-Z), цифр (0-9), а также . / — _ # в противном случае — выдать ошибку 404


$array_url = preg_split ("/(\/|\..*$)/", $result,1, PREG_SPLIT_NO_EMPTY);


// в случае, если обращение было только к домену (yourdomain.com/ или yourdomain.com), в $array_url будет пустой результат, такое событие нужно обработать, как страницу с ID_page = 1

if (!$array_url)
{
$ID_page = 1;
}
else
{
$sef_value = $array_url[0];


/* Далее идёт запрос в БД о наличие в столбце SEF строки $sef_value при положительном ответе получаем из БД соответствующий $sef_value $ID_page,
если такой строки не найдено — выводим страницу ошибки 404. */

$query = "SELECT id_menu FROM main_menu WHERE url = '".$sef_value."' LIMIT 1";
$result = mysql_query($query);

if ($row = mysql_fetch_array($result))
{
$ID_page = $row ['id_menu'];
}
else
{
// header("HTTP/1.0 404 Not Found");
echo "Страница не существует";
exit;
}

}

// Теперь обычная обработка, как если бы $ID_page был получен методом GET */

$cont = "SELECT * FROM main_menu WHERE id_menu = $ID_page LIMIT 1";
$conte = mysql_query($cont);
$row = mysql_fetch_array($conte);

?>

Кодировка всех файлов ANSI, поэтому как я понимаю BOM исключается, он только в UTF-8 существует.

Edited by fiver
Link to comment
Share on other sites

  • 0

пробел, перевод строки, табуляция - это всё тоже символы которые улетают и сервер перед ними шлёт заголовки, удалите всё с конца что после ?>

Дело было в том, что chpu.php вызывался раньше чем sample-html-graphic.php в котором - session_start();

Инициировав сессию до вызова chpu.php ошибка убралась.

Вот только почему так произошло непонятно.

Видимо какие то данные нельзя выводить до инициации сессии.

И возможно что дело вовсе не в chpu.php

В общем пока ошибку устранил, но без понимания почему она возникла.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy