Jump to content
  • 0

Проблема с перенаправлением на другую страницу


bgraf
 Share

Question

Добрый день

Вот решил сделать на сайте вход для посетителей

Сделал базу данных

Форму для ввода пароля и форму для регистрации

И вот прочитал про header и вот что у меня получается

if($_POST['do'])

{

//Проверяем данные

$login = $_POST['login'];

$upass = $_POST['password'];

if($login !='' AND $upass !='')

{

//Создаем запрос

$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");

//Проверяем существует ли хоть одна запись

if(mysql_num_rows($q1)===1)

{

//Если есть, то создаем сессии и перенаправляем на эту страницу

$r=mysql_fetch_array($q1);

$_SESSION['user'] = $r['nick'];

$_SESSION['password'] = $r['password'];

$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));

@header("Location: eden/mazagot/mazagot.php");

вот тут меня должно как я понял перенапрвить на страницу mazagot.php а ничего не происходит , при том при всем что все проверки прошли и действительно есть такой клиент

Что не так помогите

Link to comment
Share on other sites

Recommended Posts

  • 0

подскажи а где я делаю пробелы или выводы

<?

session_start();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<META http-equiv=Content-Type content="text/html; charset=utf-8">

<META http-equiv=Content-Language content=he>

<base href="http://www.mytty.co.il/httpdocs">

<meta content="ניהול, בטיחות, ניהול בטיחות, ניהול סיכונים, מנהלים, איכות, בקרה, פרוייקטים, ייעוץ, ניהול פרויקטים, שיפור מתמיד, הדרכות, ליווי בטיחות, יועץ בטיחות, ממונה בטיחות, נאמני בטיחות, סכנה, קורסים, סדנאות, ימי עיון, מתי רביבי, הסמכות" name="keywords"/>

<meta content="חברה המתמחה בניהול בטיחות, בניהול איכות ובניהול סיכונים. באתר, מידע רב המלווה בתמונות ומצגות" name="description"/>

<title>מתי | בטיחות | אבטחת איכות</title>

<link href="../style.css" rel="stylesheet" type="text/css">

<style type="text/css">

.input_form

{

border: 1px solid #0C335F;

width:150px;

}

.table_style

{

padding:5px;

width:405px;

/*margin-right:150px;*/

}

.style_font{

font-family: Arial;

font-size:14px;

font-weight:bold;

color: #0C335F;

}

</style>

</head>

<body dir="rtl">

<?

session_destroy();

//Поключаем конфиг

include("config.php");

$forma = '

<table class="table_style">

<tr>

<td>

<form name="1" action="" method="post">

<tr>

<td>

<font class="style_font" id="font" size="2">שם משתמש:</font>

</td>

<td>

<input class="input_form" name="login" type="text" value="" >

</td>

</tr>

<tr>

<td>

<font class="style_font" id="font" size="2">סיסמא:</font>

</td>

<td>

<input class="input_form" name="password" type="password" value="" >

</td>

</tr>

<tr>

<td colspan="2" align="center">

<input name="do" type="submit" value="כניסה">

</td>

</tr>

<tr>

<td colspan="2" align="center">

<a href="registration.php"><font class="style_font" id="font" size="2">הרשמה</font></a>

</td>

</tr>

</form>

</td>

</tr>

</table>';

//Необходимо подключиться к БД

//$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)

$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd)

or die("Не могу подключиться" );

// сделать $DB текущей базой данных

mysql_select_db($dbname, $dbcnx) or die ('Не могу выбрать БД');

//Если нет сессий

if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID'])

{

//Если кнопка не нажата, отображаем форму

if(!$_POST['do'])

{

echo $forma;

}

//Если кнопка нажата

if($_POST['do'])

{

//Проверяем данные

$login = $_POST['login'];

$upass = $_POST['password'];

if($login !='' AND $upass !='')

{

//Создаем запрос

$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");

//Проверяем существует ли хоть одна запись

if(mysql_num_rows($q1)===1)

{

//Если есть, то создаем сессии и перенаправляем на эту страницу

$r=mysql_fetch_array($q1);

$_SESSION['user'] = $r['nick'];

$_SESSION['password'] = $r['password'];

$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));

header("Location: http://www.mytty.co.il/eden/mazagot/mazagot.php");

}

Link to comment
Share on other sites

  • 0
<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Начиная с <!DOCTYPE пошел вывод.

upd: и вообще, разделять нужно шаблоны и логику

и все же я не могу найти проблему помогите плиз

Link to comment
Share on other sites

  • 0

Заголовки (header) - это определенный набор информации, который подготавливает броузер к загрузке информации. Соответственно, заголовки никак не могут посылаться после того, как уже что-то выведено в броузер клиента. Они должны отправляться до любого вывода.

У вас страница построена не логично. В вашем случае сначала в php сделайте все ваши проверки, а потом уже выбирайте выводить эту страницу или отправлять на другую. Зачем эти проверки делать посреди вывода страницы, какой смысл?

Link to comment
Share on other sites

  • 0

Простите но я правда не очень понимаю

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

<?

session_start();

?>

дальше как и все страницы я определяю слудующее

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<META http-equiv=Content-Type content="text/html; charset=utf-8">

<META http-equiv=Content-Language content=he>

<base href="http://www.mty.co.il/httpdocs">

<meta content="ניהול, בטיחות, ניהול בטיחות, ניהול סיכונים, מנהלים, איכות, בקרה, פרוייקטים, ייעוץ, ניהול פרויקטים, שיפור מתמיד, הדרכות, ליווי בטיחות, יועץ בטיחות, ממונה בטיחות, נאמני בטיחות, סכנה, קורסים, סדנאות, ימי עיון, מתי רביבי, הסמכות" name="keywords"/>

<meta content="חברה המתמחה בניהול בטיחות, בניהול איכות ובניהול סיכונים. באתר, מידע רב המלווה בתמונות ומצגות" name="description"/>

<title>מתי | בטיחות | אבטחת איכות</title>

<link href="../style.css" rel="stylesheet" type="text/css">

теперь я добавляю стили местные

<style type="text/css">

.input_form

{

border: 1px solid #0C335F;

width:150px;

}

.table_style

{

padding:5px;

width:405px;

/*margin-right:150px;*/

}

.style_font{

font-family: Arial;

font-size:14px;

font-weight:bold;

color: #0C335F;

}

</style>

и закрываю голову

</head>

теперь тело страницы

<body dir="rtl">

<?

Поключаем конфиг

include("config.php");

я создал переменную которая содержит текст формы

$forma = '

<table class="table_style">

<tr>

<td>

<form name="1" action="" method="post">

<tr>

<td>

<font class="style_font" id="font" size="2">שם משתמש:</font>

</td>

<td>

<input class="input_form" name="login" type="text" value="" >

</td>

</tr>

<tr>

<td>

<font class="style_font" id="font" size="2">סיסמא:</font>

</td>

<td>

<input class="input_form" name="password" type="password" value="" >

</td>

</tr>

<tr>

<td colspan="2" align="center">

<input name="do" type="submit" value="כניסה">

</td>

</tr>

<tr>

<td colspan="2" align="center">

<a href="registration.php"><font class="style_font" id="font" size="2">הרשמה</font></a>

</td>

</tr>

</form>

</td>

</tr>

</table>';

Необходимо подключиться к БД

$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd)

or die("Не могу подключиться" );

сделать $DB текущей базой данных

mysql_select_db($dbname, $dbcnx) or die ('Не могу выбрать БД');

Если нет сессий

if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID'])

{

Если кнопка не нажата, отображаем форму

if(!$_POST['do'])

{

echo $forma;

}

//Если кнопка нажата

if($_POST['do'])

{

//Проверяем данные

$login = $_POST['login'];

$upass = $_POST['password'];

if($login !='' AND $upass !='')

{

//Создаем запрос

$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");

//Проверяем существует ли хоть одна запись

if(mysql_num_rows($q1)===1)

{

//Если есть, то создаем сессии и перенаправляем на эту страницу

$r=mysql_fetch_array($q1);

$_SESSION['user'] = $r['nick'];

$_SESSION['password'] = $r['password'];

$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));

header("Location: http://www.mty.co.il/eden/mazagot/mazagot.php");

}

таким оброзом я все строю на одной странице и следуя цепи логике я приду к тому что мне нужно перенаправить пользовотеля на другую страницу

или можно сделать страницу формы при нажатии на кнопку сделать проверки на другой странице где есть код рнр с проверками но там то мне тоже придется выбрать или обратно вернуться или перейти на нужную страницу

в этом случае мне нужно еще дополнительная страница и потом както выводить сообщения о том что не правельно введен пороль или имя

а так все на одной странице

пожалуйста обьясните что в моей логике не верно и почему этот хедар в моем случае не работает

если я правельно понимаю то я могу использовать рнр код в любом месте моей страницы так зачем я должен строить еще страницу с проверкой когда я могу все сделать на одной странице

Link to comment
Share on other sites

  • 0

header-заголовок должен задаваться на странице, если только нету вывода никакой информации, ни html-кодов, ничего, если вы хотите передать этот заголовок, то вам придется создать отдельный файл, и задать заголовок там, даже в этом файле не должно быть никаких выводов текста, вот будет ваш обработчик:

//Проверяем данные
$login = $_POST['login'];
$upass = $_POST['password'];
if($login !='' AND $upass !=''){
//Создаем запрос
$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");

//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1)===1){

//Если есть, то создаем сессии и перенаправляем на эту страницу
$r=mysql_fetch_array($q1);

$_SESSION['user'] = $r['nick'];
$_SESSION['password'] = $r['password'];
$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));
header("Location: http://www.mty.co.il/eden/mazagot/mazagot.php");
}
}

и все, тут не должно быть никаких выводов текста, понимаете?

Edited by vvsh
Link to comment
Share on other sites

  • 0

Господа вот сделал файл проверки и переадрессации и все равно получаю эту ошибку

<?php

session_start();

include("config.php");

$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);

mysql_select_db($dbname, $dbcnx);

if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID'])

{

if($_POST['do'])

{

//Проверяем данные

$login = $_POST['login'];

$upass = $_POST['password'];

if($login !='' AND $upass !='')

{

//Создаем запрос

$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");

//Проверяем существует ли хоть одна запись

if(mysql_num_rows($q1)===1)

{

//Если есть, то создаем сессии и перенаправляем на эту страницу

$r=mysql_fetch_array($q1);

$_SESSION['user'] = $r['nick'];

$_SESSION['password'] = $r['password'];

$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));

header("Location: http://www.matty.co.il/eden/mazagot/mazagot.php");

}

else

{

header("Location: http://www.matty.co.il/auth.php");

exit;

}

}

}

}

?>

Link to comment
Share on other sites

  • 0

Понятно, вы не особо разбираетесь в теории передачи информации и обработки её скриптами. Можно все сделать в одном файле скрипта, но не так как у вас. Действительно, один файл серверного скрипта может формировать совершенно разные страницы но он не может в реальном времени контролировать, что там посетитель вводит на страницу.

1. Грубо порядок работы скриптов такой:

[посетитель нажал на ссылку с именем скрипта]

[сервер запускает этот скрипт]

[скрипт полностью дорабатывает до конца, формирует страницу и сервер отправляет её в броузер посетителя и забывает о нем]

[посетитель что-то там делает на странице и нажимает кнопку submit]

[сервер записывает пересылаемые посетителем данные в массив $_POST (если в параметре method формы указано post) и запускает скрипт, который указан в action формы]

[скрипт снова начинает работать с первой строчки, а не с середины, как вы почему-то решили]

Нельзя вывести форму и сразу проверять, что она передала. Это можно сделать только при следующем запуске скрипта.

какой вывод?

Link to comment
Share on other sites

  • 0
Господа вот сделал файл проверки и переадрессации и все равно получаю эту ошибку

Какую? «Заголовки уже отправлены»?

?>

Не нужно ставить эту штуку в конце файла, пробел или пустая строка после нее может быть причиной ошибки «Заголовки уже отправлены» Например, у вас это может быть в config.php. PHP сам видит, что файл закончился и как бы автоматически вставляет ее (как еще сказать понятно:D).

Link to comment
Share on other sites

  • 0

вывод отделить форму от проверки уже отделил и вот код который также выводит ошибку

<?php
session_start();
include("config.php");
$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_select_db($dbname, $dbcnx);
if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID'])
{
if($_POST['do'])
{
//Проверяем данные
$login = $_POST['login'];
$upass = $_POST['password'];
if($login !='' AND $upass !='')
{
//Создаем запрос
$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");
//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1)===1)
{
//Если есть, то создаем сессии и перенаправляем на эту страницу
$r=mysql_fetch_array($q1);
$_SESSION['user'] = $r['nick'];
$_SESSION['password'] = $r['password'];
$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));
header("Location: http://www.matty.co.il/eden/mazagot/mazagot.php");
}
else
{
header("Location: http://www.matty.co.il/auth.php");
exit;
}
}
}
}
?>

а вот config.php

<?php

$dblocation = "ddddd";

$dbname = "ddddd";

$dbuser = "ddddd";

$dbpasswd = "ddddd";

?>

а ошибку вот

Cannot modify header information - headers already sent by (output started at D:\Domains\matty.co.il\httpdocs\config.php:8) in D:\Domains\matty.co.il\httpdocs\authorization.php on line 24

Link to comment
Share on other sites

  • 0

и правда в конфиге пустая строка была спасибо огромное что то получилось но вот все равно вопрос остается вот скажите теперь а если пороль был введен не верно и мне надо вернуться на страницу с формой только теперь еще на этой странице написать что пороль или имя введены не верно как мне это сделать

Иван Шумов простите а что мне должно быть ясно из этого , это строка с header

Link to comment
Share on other sites

  • 0

ну так все четко написано: output started at D:\Domains\matty.co.il\httpdocs\config.php:8

Значит в config.php после "?>" есть перенос строки, а то и не один раз. Уберите все что после "?>".

и правда в конфиге пустая строка была спасибо огромное что то получилось но вот все равно вопрос остается вот скажите теперь а если пороль был введен не верно и мне надо вернуться на страницу с формой только теперь еще на этой странице написать что пороль или имя введены не верно как мне это сделать

Иван Шумов простите а что мне должно быть ясно из этого , это строка с header

Это можно выводить в скрипте проверки после проверки.

и сделать ссылку на повторный ввод пароля

Link to comment
Share on other sites

  • 0

Да, чтобы стать программистом надо для начала теорию логики изучить, научится строить блок-схемы сначала на бумажке, а потом уже в голове.

Вообще, все это делается в одном скрипте. В самом начале проверяется наличие данных в $_POST, если их нет, значит выводим форму ввода пароля, если есть - проверяем эти данные, если совпало - переадресовываем дальше, если не совпало выводим надпись об ошибке и форму ввода пароля. Результаты этих проверок можно записать в переменную и выводить информацию уже не в самих проверках, а после них в зависимости от значения этой переменной.

Условие if else вроде вам знакомо, но пользоваться вы им не умеете. Я не смогу тут вам расписывать теорию программирования...

Link to comment
Share on other sites

  • 0

так вы сказали что там где hesder не должно быть выводов ничего .

вот я построил

auth.php ——страница ввода

<? 
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META http-equiv=Content-Language content=he>
<base href="http://www.matty.co.il/httpdocs">
<meta content="ניהול, בטיחות, ניהול בטיחות, ניהול סיכונים, מנהלים, איכות, בקרה, פרוייקטים, ייעוץ, ניהול פרויקטים, שיפור מתמיד, הדרכות, ליווי בטיחות, יועץ בטיחות, ממונה בטיחות, נאמני בטיחות, סכנה, קורסים, סדנאות, ימי עיון, מתי רביבי, הסמכות" name="keywords"/>
<meta content="חברה המתמחה בניהול בטיחות, בניהול איכות ובניהול סיכונים. באתר, מידע רב המלווה בתמונות ומצגות" name="description"/>
<title>מתי | בטיחות | אבטחת איכות</title>
<link href="../style.css" rel="stylesheet" type="text/css">
<style type="text/css">
.input_form
{
border: 1px solid #0C335F;
}

.table_style
{
padding:5px;
width:405px;
/*margin-right:150px;*/
}

.style_font{
font-family: Arial;
font-size:14px;
font-weight:bold;
color: #0C335F;
}
</style>
</head>
<body dir="rtl">


<table class="table_style">
<tr>
<td>
<form name="1" action="authorization.php" method="post">
<tr>
<td>
<font class="style_font" id="font" size="2">שם משתמש:</font>
</td>
<td>
<input class="input_form" name="login" type="text" value="" >
</td>
</tr>
<tr>
<td>
<font class="style_font" id="font" size="2">סיסמא:</font>
</td>
<td>
<input class="input_form" name="password" type="password" value="" >
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input name="do" type="submit" value="כניסה">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<a href="registration.php"><font class="style_font" id="font" size="2">הרשמה</font></a>
</td>
</tr>
</form>
</td>
</tr>
</table>

</body>
</html>

authorization.php ——- страница проверки и перенаправления

<?php
session_start();
session_destroy();
include("config.php");
$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_select_db($dbname, $dbcnx);
if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID'])
{
if($_POST['do'])
{
//Проверяем данные
$login = $_POST['login'];
$upass = $_POST['password'];
if($login !='' AND $upass !='')
{
//Создаем запрос
$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");
//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1)===1)
{
//Если есть, то создаем сессии и перенаправляем на эту страницу
$r=mysql_fetch_array($q1);
$_SESSION['user'] = $r['nick'];
$_SESSION['password'] = $r['password'];
$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));
header("Location: http://www.matty.co.il/eden/mazagot/mazagot.php");
}
else
{
header("Location: http://www.matty.co.il/auth.php");
exit;
}
}
}
}
?>

господа я программист программировал на foxpro , c , forms

не надо обьяснять мне правела программирования впринципе . так как они мне известны , в вебе есть свои тонкости .

теперь обратите внимание изночально я дал код страницы со всей логикой но вы обьяснили что есть нюансы . посмотрите вот код двух страниц . из расчета вот этого как мне сделать так чтобы тут

else

{

header("Location: http://www.matty.co.il/auth.php");

exit;

}

в месте где я перенаправляю назад на страницу формы выдать еще и сообщение

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