Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Динамический сайт


Автор: adamant 1.3.2006, 00:49
У меня есть вопрос. Есть страница index с авторизацией, суть скрипта такая: Соединяется с MSSQL, получает сесию и записывает её если она есть, Далее идёт контент и после Заголовков происходит следующее =>

Код

<? 
if(empty($name) || empty($oldpwd) || empty($login))
{
print($form);
}
if ($username_check <= 0){header("Location: error.php");}
if ($name_check <= 0){header("Location: error.php");}
elseif ($pw_check <= 0){header("Location: error.php");}
if($username_check > 0 || $name_check > 0 || $pw_check > 0)
{
require'include/who.php';
}
?>

Исходя из скрипта всё ок. НО до него идёт контент и переадресация е работает, пихать вначало нельзя поскольку сразу редирект будет как решить проблемму?

Автор: Serkys 1.3.2006, 08:19
Используй буферизацию вывода. Поиск рулит.

Автор: Guedda 1.3.2006, 08:26
Попробуй это:
Код

echo "<META HTTP-EQUIV=\"Refresh\" Content=\"0; url=error.php\">";

Мне помогает в таких ситуациях.

Автор: CTAPbIuMABP 1.3.2006, 11:01
Код

if(empty($name) || empty($oldpwd) || empty($login)){
    print($form);
} else {
   if ($username_check <= 0 || $name_check <= 0 || $pw_check <= 0) {
   header("Location: error.php");
   }else {
   require'include/who.php';
   }
}


и будет тебе счастье

Автор: adamant 1.3.2006, 22:51
Хехе, спасибо всем взял Ваши коды за основу чуть переделал и заработало! НО => теперь У меня возник вопрос... Как сделать так чтобы при обновлении страницы из адресса удалялось это: ?do=error
Код

http://127.0.0.1/index.php?do=error

Автор: krulik 2.3.2006, 09:35
adamant, вот http://forum.vingrad.ru/index.php?showtopic=85591 у меня такойже вопрос был. Ответ получил приблизительно такой.
Что нужно данные передавать методом POST и ниче такого небудет.

Автор: adamant 2.3.2006, 23:35
Ну если честно то изначально у меня POST и был smile Кстати А почему вот многие используют буферизацию для заголовков, Я например после того как сделал отладку скриптов всего навсего отключаю в php.ini
Код

display_errors = off

Ведь сообщение об ошибке это тоже заголовок, а если нужно узнать что за ошибка то:
Код

log_errors = On



Разве я не прав?

Автор: Serkys 3.3.2006, 00:48
adamant, php.ini ты на боевом серваке не подправишь.
Добавлено @ 00:51
Цитата(adamant @ 2.3.2006, 23:35 Найти цитируемый пост)
А почему вот многие используют буферизацию для заголовков

Если я тебя правильно понял, то буферизацию используют для того, чтобы заголовки можно было вставлять в любую точку скрипта (передача заголовков происходит до первого вывода на экран).

Автор: adamant 3.3.2006, 22:15
Да ты понял меня правильно...

Эч smile сталкнулся с проблемой:
Когда принимаеться инфа, то он её считает в любом случаи правельной как исправить Apache + MSSQL (MSSQL удалённо)
Прервая часть:
Код

require('include/function.php');

switch($do) 

case 'auth': 
$name = stripslashes($_POST['name']);
$login = stripslashes($_POST['login']);
$oldpwd = stripslashes($_POST['oldpwd']);
$_SESSION['login'] = "$login";
$_SESSION['name'] = "$name";
$_SESSION['oldpwd'] = "$oldpwd";
   if ($username_check = FALSE || $name_check = FALSE || $pw_check = FALSE) 
   {
   header("Location: index.php?do=error");
   } 
   if($username_check = TRUE|| $name_check = TRUE || $pw_check = TRUE)
{
   header("Location: index.php?do=ok");
}

break;


Вторая часть:
Код

switch($do)
{
case'error':
if($username_check = FALSE || $name_check = FALSE || $pw_check = FALSE)
{
print($form);
}
break;
}
if(empty($name) || empty($oldpwd) || empty($login))
   {
    print($form);
    }
switch($do)
{    
case'ok':
if($username_check = TRUE || $name_check = TRUE || $pw_check = TRUE)
    {
   require'include/who.php';
    }
break;
}

FUNCTION.PHP
Код

session_start();
if(isset($_GET['content'])) { $do=$_GET['content']; } 
require_once "sql_inject.php"; 
$bDestroy_session = TRUE; 
$url_redirect = 'index.php'; 
$sqlinject = new sql_inject('./log_file_sql.log',$bDestroy_session,$url_redirect)  ;
require 'config.php';
$msconnect=mssql_connect("$dbhost","$dbuser","$dbpasswd");
$msdb=mssql_select_db("MuOnline",$msconnect);

$sql_username_check = mssql_query("SELECT memb___id FROM MEMB_INFO WHERE memb___id='$login'"); 
$username_check = mssql_num_rows($sql_username_check); 
$sql_name_check = mssql_query("SELECT Name FROM Character WHERE Name='$name' and AccountID = '$login'"); 
$name_check = mssql_num_rows($sql_name_check); 
$sql_money_check = mssql_query("SELECT Money FROM Character WHERE Name='$name'");
$total_money = mssql_fetch_row($sql_money_check);
$sql_pw_check = mssql_query("SELECT memb__pwd FROM MEMB_INFO WHERE memb__pwd='$oldpwd' and memb___id='$login'"); 
$pw_check = mssql_num_rows($sql_pw_check); 
$money1 = 25000000;
$sql_res_check = mssql_query("SELECT res FROM Character WHERE Name='$name'");
$total_res = mssql_fetch_row($sql_res_check);
$sql_lvl_check = mssql_query("SELECT cLevel FROM Character WHERE Name='$name'");
$your_lvl = mssql_fetch_row($sql_lvl_check);
$res1 = $total_res[0] + 1;
$money_check = $money1 * $res1;

$form = "<span class='text'>
......../* форма большая писать не буду передаёться всё через post */

Автор: Serkys 4.3.2006, 00:23
Блин, да отключите вы все уже register_globals и юзайте массивы $_GET и $_POST smile . И безопасней, и разобраться в ваших скриптах легче.
Возможно, у тебя register_globals и вывод предупреждений отключены, а ты всё равно переменные напрямую юзаешь.

З.Ы. Сегодня на учёбе на контрольной по паскалю ~40 минут сидел и мысленно матерился - прога работала криво. Под конец пары, когда уже почти вся прога была в бантиках, допёрло: вместо переменной m написал n (очепятка). Обняв несколько девчёнок и радостно матерясь, получил как всегда 5.

Автор: adamant 5.3.2006, 03:09
А какая разница между $_GET и $_POST и правда что $_POST безопастнее?

Автор: Ciber SLasH 5.3.2006, 03:59
Цитата(adamant @ 5.3.2006, 03:09 Найти цитируемый пост)
А какая разница между $_GET и $_POST

А какая разнице, когда ты передаёшь данные в самом URL-е: my-page.x?var1=10&var2=20
или когда ты всё отсылаешь НЕ через URL ? То-то и оно...

Цитата(adamant @ 5.3.2006, 03:09 Найти цитируемый пост)
и правда что $_POST безопастнее?

А как ты думаешь, если кто-либо в твой скрипт будет передавать переменные через GET прямо в URL-е или когда все переменные передаются через форму методом POST и этот кто-то не может изменить код страницы? Догадайся с трёх раз что безопаснее...

А вообще мог бы и поиском воспользоваться...

Автор: Serkys 5.3.2006, 05:08
adamant, ты не слишком доверяй POST'у, его тоже подделать можно. Сложнее, но тоже проверяй данные прежде чем их использовать.

Автор: Ciber SLasH 5.3.2006, 07:00
Нельзя вообще доверять тому, что вводит юзер, какой бы метод не использовался. А подделать данные конечно можно — точно не знаю технологию... знаю, что создают туннель между двумя узлами (клиент/сервер) и все пакеты идут через третий компьютер в сети... таким макаром можно подделывать передаваемые данные.

Автор: adamant 5.3.2006, 14:59
Sorry but... Я плохо пользуюсь поиском поскольку не могу сформулировать вопрос smile.

Автор: adamant 5.3.2006, 21:06
Всё я решил проблемму. Всем спасибо.

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