|
|
|
| На странице 2 формы, обе передают на ту же страницу методом post некоторые данные. Причем работать эти формы должны последовательно: сначала отрабатывает одна, потом загружается другая. Первая форма работает нормально, вторая не передает ничего. На локалке все работало, на сервере не работает. Хостинг на st-host.ru. Насколько я знаю, он работает под Unix. Может у Unix есть какие-то особенности по передаче данных методом POST? Кстати, сессии тоже работать перестали. Никто с такими проблемами не встречался? | |
|
|
|
|
|
|
|
для: Костян
(18.09.2008 в 00:13)
| | У Вас поразительная манера задавать вопрос и ждать ответа, не приводя никакого кода.
Или Вы ожидаете ответы именно от техподдержки st-hosting? Так они предпочитают, чтобы к ним по е-мэйлу обращались. | |
|
|
|
|
|
|
|
для: Trianon
(18.09.2008 в 00:20)
| | Действительно, чего это я? Вот код:
<! 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=windows-1251">
<meta name="keywords" content="работа, найти работу, вакансии , поиск работы">
<meta name="description" content="На данной странице вы найдете информацию по поиску и предложению работы ">
<title>Напоминание пароля</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script language="javascript" type="text/javascript">
<!--
function step_back()
{
window.history.back(1);
}
//-->
</script>
</head>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<table width="690" border="0" align="center" bgcolor="#FFFFFF" class="main_border">
<?php @session_start(); require_once("blocks/header1.php"); ?>
<tr>
<td width="80" height="481" valign="top" class="left">
<table width="689" height="164" border="0" cellpadding="1" cellspacing="1">
<tr>
<td width="164" rowspan="4"> </td>
<td width="356" align="center" ><img src="img/vho_d.gif" width="250" height="50"></td>
<td width="159"> </td>
</tr>
<tr>
<td><br>Забыли пароль? Не страшно. Введите свое имя и ответ на контрольный вопрос. </td>
<td> </td>
</tr>
<tr>
<td>
<p class="forma1"> </p>
<form method=post>
<p class="forma">Имя : </p>
<input type=text name=name
value='<?= $_SESSION['fuck']; ?>'>
<br>
<input type=submit value="Запрос контрольного вопроса">
</form>
<?
// Обработчик формы
//echo "name1=".$_SESSION['fuck'];
//echo "name2=".$_POST['name'];
//echo "name3=".$name;
//if ($_POST['name']) $name= $_POST['name'];
if(!empty($_POST['name']))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Защищаясь от SQL-инъекции, пропускаем
// полученные пароль и логин через функцию
// mysql_escape_string
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
}
// Осуществляем запрос, который возвращает
// число записей, удовлетворяющих паролю
// и логину
$query = "SELECT COUNT(*) FROM userslist
WHERE name = '$_POST[name]'";
$usr = mysql_query($query);
if(!$usr) exit("Ошибка в блоке авторизации");
// Получаем число записей
if(mysql_result($usr,0) > 0) define("TOTAL", 1);
}
// Если число записей больше 0
// заносим данные о пользователе в сессию
if(defined("TOTAL"))
{
$_SESSION['fuck'] = $_POST['name'];
//$self1=$_SERVER['PHP_SELF']."?";
/* echo "sss=". $_SESSION['fuck']; */
//echo "hhh=".$_SERVER['PHP_SELF'];
}
// Если посетитель "вошёл" - приветствуем его
if(isset ($_SESSION['fuck']))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Выводим приветствие
/* echo "Здравствуйте, ".$_SESSION['name']."!<br>";
echo "Доступ к вашим секретным данным<br>"; */
//$self=$_POST['self'];
// Выводим данные пользователя
$query = "SELECT * FROM userslist WHERE name = '$_SESSION[fuck]'";
//echo "sss=".$_SESSION['name'] ;
$usr = mysql_query($query);
if(!$usr) exit(mysql_error());
$user = mysql_fetch_array($usr);
//unset($_SESSION['name']);
echo "Контрольный вопрос: ".$user['contr_q']."?"."<br>";?>
<form method=post>
<input type=text name=contr_a >
<input type=submit value="Напомнить пароль">
</form>
<?
echo "KV=".$_POST['contr_a'];
echo "KV1=".$contr_a;
if(!empty($_POST['contr_a']))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Защищаясь от SQL-инъекции, пропускаем
// полученные пароль и логин через функцию
// mysql_escape_string
if (!get_magic_quotes_gpc())
{
$_POST['contr_a'] = mysql_escape_string($_POST['contr_a']);
}
$_SESSION['contr_a'] = $_POST['contr_a'];
// Осуществляем запрос, который возвращает
// число записей, удовлетворяющих паролю
// и логину
echo "ssq=".$_SESSION['contr_a'];
echo "вопр= ".$user['contr_a']."<br>";
echo "пароль= ".$user['pass']."<br>";
$contr_a=$_POST['contr_a'];
echo "вопр1= ".$contr_a."<br>";
if ($_SESSION['contr_a']==$user['contr_a'])
{echo "Пароль - ".$user['pass'];
$_SESSION['name'] = $user['name'];
$_SESSION['password'] = $user['pass'];}
}
}
?>
</td>
<tr>
<td align="right"><br><a href="index.php"><img src="img/index.gif" width="150" height="30" alt="Назад" border="0" title="Назад"></a></td>
</table>
<?php require_once("blocks/footer.php")?>
</table>
</BODY>
</HTML>
|
| |
|
|
|
|
|
|
|
для: Костян
(18.09.2008 в 06:40)
| | 1. куча ненужного неиспользуемого текста в коментариях никак не способствует пониманию кода.
2. точно так же не способствует этому отсутствие нормальных отступов.
3. зачем-то применяется конструкция define() там, где хватило бы обычного присваивания.
4. функция session_start() вызывается с блокировкой диагностик.
5. диагностика о преждевременном выводе и о том, что функция не сработала из-за этого - теряется.
6. сессии не работают.
Исправляйте. | |
|
|
|
|
|
|
|
для: Trianon
(18.09.2008 в 09:30)
| | Именно потому что не работают сессии я на Ваш форум и обратился. Не смотря на то, что код кривой, это я признаю, на локальном сервере все это работает. Подскажите, где искать причину, почему выдается ошибка, когда я убираю блокировку диагностик. Дело в том, что за основу этого скрипта взят код из книги по MySQL, на сколько я понимаю, Вашей книги. И где искать причину, почему данные из второй формы не попадают в скрипт. На локальном сервере не нужно было даже использовать переменные $_POST['']. Все работало с обычными переменными вида $var.
<! 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=windows-1251">
<meta name="keywords" content="работа, найти работу, вакансии , поиск работы">
<meta name="description" content="На данной странице вы найдете информацию по поиску и предложению работы ">
<title>Напоминание пароля</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<table width="690" border="0" align="center" bgcolor="#FFFFFF" class="main_border">
<?php session_start(); require_once("blocks/header1.php"); ?>
<tr>
<td width="80" height="481" valign="top" class="left">
<table width="689" height="164" border="0" cellpadding="1" cellspacing="1">
<tr>
<td width="164" rowspan="4"> </td>
<td width="356" align="center" ><img src="img/vho_d.gif" width="250" height="50"></td>
<td width="159"> </td>
</tr>
<tr>
<td><br>Забыли пароль? Не страшно. Введите свое имя и ответ на контрольный вопрос. </td>
<td> </td>
</tr>
<tr>
<td>
<p class="forma1"> </p>
<form method=post>
<p class="forma">Имя : </p>
<input type=text name=name
value='<?= $_SESSION['fuck']; ?>'>
<br>
<input type=submit value="Запрос контрольного вопроса">
</form>
<?
// Обработчик формы
if(!empty($_POST['name']))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Защищаясь от SQL-инъекции, пропускаем
// полученные пароль и логин через функцию
// mysql_escape_string
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
}
// Осуществляем запрос, который возвращает
// число записей, удовлетворяющих паролю
// и логину
$query = "SELECT COUNT(*) FROM userslist
WHERE name = '$_POST[name]'";
$usr = mysql_query($query);
if(!$usr) exit("Ошибка в блоке авторизации");
// Получаем число записей
if(mysql_result($usr,0) > 0) $total=1;
}
// Если число записей больше 0
// заносим данные о пользователе в сессию
if($total==1)
{
$_SESSION['fuck'] = $_POST['name'];
}
// Если посетитель "вошёл" - приветствуем его
if(isset ($_SESSION['fuck']))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Выводим приветствие
$query = "SELECT * FROM userslist WHERE name = '$_SESSION[fuck]'";
$usr = mysql_query($query);
if(!$usr) exit(mysql_error());
$user = mysql_fetch_array($usr);
echo "Контрольный вопрос: ".$user['contr_q']."?"."<br>";?>
<form method=post>
<input type=text name=contr_a >
<input type=submit value="Напомнить пароль">
</form>
<?
echo "KV=".$_POST['contr_a'];
echo "KV1=".$contr_a;
if(!empty($_POST['contr_a']))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Защищаясь от SQL-инъекции, пропускаем
// полученные пароль и логин через функцию
// mysql_escape_string
if (!get_magic_quotes_gpc())
{
$_POST['contr_a'] = mysql_escape_string($_POST['contr_a']);
}
$_SESSION['contr_a'] = $_POST['contr_a'];
// Осуществляем запрос, который возвращает
// число записей, удовлетворяющих паролю
// и логину
echo "ssq=".$_SESSION['contr_a'];
echo "вопр= ".$user['contr_a']."<br>";
echo "пароль= ".$user['pass']."<br>";
$contr_a=$_POST['contr_a'];
echo "вопр1= ".$contr_a."<br>";
if ($_SESSION['contr_a']==$user['contr_a'])
{echo "Пароль - ".$user['pass'];
$_SESSION['name'] = $user['name'];
$_SESSION['password'] = $user['pass'];}
}
}
?>
</td>
<tr>
<td align="right"><br><a href="index.php"><img src="img/index.gif" width="150" height="30" alt="Назад" border="0" title="Назад"></a></td>
</table>
<?php require_once("blocks/footer.php")?>
</table>
</BODY>
</HTML>
|
| |
|
|
|
|
|
|
|
для: Костян
(18.09.2008 в 10:09)
| | Уважаемый, старт сессии должен объявляться до любого вывода в браузер! А у вас до старта куча целая выводится. Вы что ошибок не получаете? | |
|
|
|
|
|
|
|
для: sim5
(18.09.2008 в 10:15)
| | Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /www/nv-rabotaru/htdocs/rem_pass.php:7) in /www/nv-rabotaru/htdocs/rem_pass.php on line 11
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /www/nv-rabotaru/htdocs/rem_pass.php:7) in /www/nv-rabotaru/htdocs/rem_pass.php on line 11
Такую ошибку выдает броузер. Я убрал блокировку диагностик и поставил вызов сессии перед первым выводом, перед
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
|
Если Вам сложно объяснить, в чем проблема - скажите, где почитать. | |
|
|
|
|
|
|
|
для: Костян
(18.09.2008 в 12:56)
| | Вы должны стартовать сессию, передавать любые заголовки до любого вывода в браузер! У вас сессия должна стартовать до этого:
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:www.w3.org/TR/html4/loose.dtd">
<html>
.......
И даже перед тегом <?php ничего не должно быть! | |
|
|
|
|
|
|
|
для: sim5
(18.09.2008 в 13:13)
| | Огромное СПАСИБО! Оказывается, все было так просто! В заблуждение ввели примеры из книги. Там эта команда стоит в самом начале скрипта (хедер опущен по умолчанию), но я просто не думал, что еще выше хедера. А я как только ен изголялся, и параметры сессии методом гет передавал и еще много всякой всячины. Спасибо огромное! | |
|
|
|
|
|
|
|
для: Костян
(18.09.2008 в 13:45)
| | Ну а зачем изголятся, нужно было просто почитать в мануале РНР, в нем все сказано. Да и в книге должно быть об этом. | |
|
|
|