|
|
|
| Помогите пожалуйста разобраться как работать с ссесиями внутри функций классов.
Код у меня был такой:
function a1b0()
{
session_start();
$f1=$GLOBALS['HTTP_POST_VARS']['name'];
$f2=$GLOBALS['HTTP_POST_VARS']['pass'];
$connection=@mysql_connect("localhost", "root", "")
or die("Невозможно подключиться к MySQL.");
$db=@mysql_select_db($this->DBname,$connection)
or die("Невозможно выбрать базу данных.");
$sql="SELECT f1 FROM my_users WHERE f2='$f1';";
$result=mysql_query($sql,$connection)
or die(mysql_error());
$num_rows = mysql_num_rows($result);
if ($num_rows==1)
{
$row=mysql_fetch_array($result);
$id=$row['f1'];
session_register('id_user');
$id_user=$id;
$this->mymsg="Ваш id - $id_user";
}
else
{
$this->mymsg="<center><h2>Не правильно введенно имя пользователя или пароль.</h2>
<b>Войти в систему:</b><form method=\"post\" action=\"reg.php\">
<input type=\"hidden\" name=\"a\" value=\"1\">
<input type=\"hidden\" name=\"b\" value=\"0\">
<strong>Имя</strong><br><input type=\"text\" name=\"name\" size=15 maxlength=50>
<strong>Пароль</strong><br><input type=\"password\" name=\"pass\" size=15 maxlength=50>
<input type=\"submit\" name=\"submit\" value=\"Enter\"></form></center>";
}
}
|
А в файле ссесии сохраняется это:
А если писать без классов:
<?
session_start();
session_register('id_user');
$id_user="1290001";
?>
<html>
<head>
<title>Магазин</title>
</head>
<body bgColor=#b8d0dc>
</body>
</html>
|
и
<?
session_start();
?>
<html>
<head>
<title>Магазин</title>
</head>
<body bgColor=#b8d0dc>
<?
echo "$id_user";
?>
</body>
</html>
|
то ссесии работают нормально | |
|
|
|
|
|
|
|
для: MadMaxxx
(19.01.2005 в 23:18)
| | Чует мое сердце без global тут не обойтись. | |
|
|
|
|
|
|
|
для: Akira
(19.01.2005 в 23:38)
| | А как мне писать чтоб все работало? | |
|
|
|
|
|
|
|
для: MadMaxxx
(19.01.2005 в 23:18)
| | Хм... всё зависит от того, как вызывается функция класса, может до неё уже произошёл вывод в окно браузера? Тогда установить сессию не получится. | |
|
|
|
|
|
|
|
для: cheops
(19.01.2005 в 23:43)
| | Не еслиб она запускалась до вывода в окно браузера, то тогда бы и id не выводилось бы на экран | |
|
|
|
|
|
|
|
для: MadMaxxx
(19.01.2005 в 23:18)
| | Так что-же мне всетаки делать? как писать, чтоб все работало? | |
|
|
|
|
|
|
|
для: MadMaxxx
(20.01.2005 в 00:07)
| | Следует следить, чтобы до вызова функции session_start() не происходило вывод в окно браузера или перехватывать вывод при помощи функций управленя вывода http://www.softtime.ru/group/id_group=12, т.е.
<?php
// Заносим весь вывод во временный буффер
ob_start();
?>
Код гостевой книги. В теле сообщений содержаться ссылки в виде текста.
<?php
// инициируем сессию
session_start();
// содержимого буфера в переменную
$strtmp = ob_get_contents();
// очищение буфера вывода и отключение буферизации вывода
ob_end_clean();
// замена текстовой ссылки ссылкой HTML. Заменяются строки формата
// http://www.ресурс и www.ресурс
$strtmp = preg_replace("#(http://www|www)(\S+)#si",
"<a href=http://www\\2>www\\2</a>",
$strtmp);
// вывод модифицированного содержимого страницы в браузер
echo $strtmp;
?>
|
Всё это хозяйство следует адаптировать под свои цели... | |
|
|
|
|
|
|
|
для: cheops
(20.01.2005 в 00:35)
| | Если честно я непонял как это поможет, да и как этим пользоваться, ведь переменную всетаки регестрирует а значение не присваивает.
Вот мой код:
<?php
class Add_User
{
var $mymsg;
var $usermsg;
var $mymenu;
var $DBname="testShop";
var $MyTB="my_tbs";
var $myconst="1104867583";
function my_menu()
{
$connection=@mysql_connect("localhost", "root", "")
or die("Невозможно подключиться к MySQL.");
$db=@mysql_select_db($this->DBname,$connection)
or die("Невозможно выбрать базу данных.");
$sql="SELECT tb_naz,tb_nam FROM $this->MyTB;";
$result=mysql_query($sql,$connection)
or die(mysql_error());
$this->mymenu="<B><A href=\"index.php?a=0&b=0\">Новости</A></B><br>";
while ($row=mysql_fetch_array($result))
{
$tb_naz=$row['tb_naz'];
$tb_nam=$row['tb_nam'];
$this->mymenu.="<B><A href=\"index.php?a=1&b=0&c=1&name=$tb_nam\">$tb_naz</A></B><br>";
}
$this->mymenu.="<B><A href=\"index.php?a=0&b=1\">Архив новостей</A></B><br>";
}
function user_in()
{
if (!$id_user)
{
$this->usermsg="<h5>Войти в систему:</h5><h6><center><form method=\"post\" action=\"reg.php\">
<input type=\"hidden\" name=\"a\" value=\"1\">
<input type=\"hidden\" name=\"b\" value=\"0\">
<strong>Имя</strong><br><input type=\"text\" name=\"name\" size=15 maxlength=50>
<strong>Пароль</strong><br><input type=\"password\" name=\"pass\" size=15 maxlength=50>
<input type=\"submit\" name=\"submit\" value=\"Enter\"></form></center>
<A href=\"reg.php?a=0&b=0\">Регистрация</A></h6>";
}
else
{
$connection=@mysql_connect("localhost", "root", "")
or die("Невозможно подключиться к MySQL.");
$db=@mysql_select_db($this->DBname,$connection)
or die("Невозможно выбрать базу данных.");
$sql="SELECT f2 FROM my_users WHERE f2='$id_user';";
$result=mysql_query($sql,$connection)
or die(mysql_error());
$row=mysql_fetch_array($result);
$f2=$row['f2'];
$this->usermsg="<h6><center>User:<br>$f2</center>
<A href=\"reg.php?a=2&b=0\">Выйти</A></h6>";
}
}
function vibor($a,$b)
{
if($a==0 && $b==0)
{
$this->a0b0();
}
if($a==0 && $b==1)
{
$this->a0b1();
}
if($a==1 && $b==0)
{
$this->a1b0();
}
if($a==1 && $b==1)
{
$this->a1b1();
}
}
function a0b0()
{
$this->mymsg="<h1>Введите информацию о себе</h1><br>
<table width=70%><tr><td align=left>
<form method=\"post\" action=\"reg.php\">
<input type=\"hidden\" name=\"a\" value=\"0\">
<input type=\"hidden\" name=\"b\" value=\"1\">
<strong>Ваше имя</strong></td><td align=left>
<input type=\"text\" name=\"f1\" size=25 maxlength=50></td></tr><tr><td align=left>
<strong>Ваш пароль</strong></td><td align=left>
<input type=\"password\" name=\"f21\" size=25 maxlength=50></td></tr><tr><td align=left>
<strong>Повторите пароль</strong></td><td align=left>
<input type=\"password\" name=\"f22\" size=25 maxlength=50></td></tr><tr><td align=left>
<strong>Ф.И.О.</strong></td><td align=left>
<input type=\"text\" name=\"f3\" size=25 maxlength=50></td></tr><tr><td align=left>
<strong>Телефон</strong></td><td align=left>
<input type=\"text\" name=\"f4\" size=25 maxlength=50></td></tr><tr><td align=left>
<strong>e-mail адрес</strong></td><td align=left>
<input type=\"text\" name=\"f5\" size=25 maxlength=50></td></tr><tr><td colspan=2 align=center>
<strong>Адрес для доставки</strong><br><textarea name=\"f6\" cols=50 rows=4></textarea><br>
<input type=\"submit\" name=\"submit\" value=\"Отправить\"></form></td></tr></table>";
}
function a0b1()
{
$f2=$GLOBALS['HTTP_POST_VARS']['f1'];
$f31=$GLOBALS['HTTP_POST_VARS']['f21'];
$f32=$GLOBALS['HTTP_POST_VARS']['f22'];
$f4=$GLOBALS['HTTP_POST_VARS']['f3'];
$f5=$GLOBALS['HTTP_POST_VARS']['f4'];
$f6=$GLOBALS['HTTP_POST_VARS']['f5'];
$f7=$GLOBALS['HTTP_POST_VARS']['f6'];
if((!$f2) || (!$f31) || (!$f32) || (!$f4) || (!$f5) || (!$f6) || (!$f7))
{
$this->a0b0();
$this->mymsg.="<b>Внимание! Вы незаполнили одно или несколько полей.</b><br><br>";
}
else
{
if ($f31!=$f32)
{
$this->a0b0();
$this->mymsg.="<br><b>Внимание! Пароли не совпадают.</b>";
}
else
{
$connection=@mysql_connect("localhost", "root", "")
or die("Невозможно подключиться к MySQL.");
$db=@mysql_select_db($this->DBname,$connection)
or die("Невозможно выбрать базу данных.");
$i=0;
while ($i==0)
{
$f1=time()-$this->myconst;
$sql="SELECT f1 FROM my_users WHERE f1='$f1';";
$result=mysql_query($sql,$connection)
or die(mysql_error());
$num_rows = mysql_num_rows($result);
if ($num_rows==0)
{
$i=1;
}
}
$sql="INSERT INTO my_users (f1,f2,f3,f4,f5,f6,f7) VALUES ('$f1','$f2','$f32','$f4','$f5','$f6','$f7');";
$result=mysql_query($sql,$connection)
or die(mysql_error());
$this->mymsg="<h2>Поздравляем!</h2>Вы успешно зарегестрировались! Теперь вы можете войти в магазин под своим логином и заказать товар.";
}
}
}
function a1b0()
{
$f1=$GLOBALS['HTTP_POST_VARS']['name'];
$f2=$GLOBALS['HTTP_POST_VARS']['pass'];
$connection=@mysql_connect("localhost", "root", "")
or die("Невозможно подключиться к MySQL.");
$db=@mysql_select_db($this->DBname,$connection)
or die("Невозможно выбрать базу данных.");
$sql="SELECT f1 FROM my_users WHERE f2='$f1';";
$result=mysql_query($sql,$connection)
or die(mysql_error());
$num_rows = mysql_num_rows($result);
if ($num_rows==1)
{
$row=mysql_fetch_array($result);
$id=$row['f1'];
session_register('id_user');
$id_user=$id;
$this->mymsg="Ваш id - $id_user";
}
else
{
$this->mymsg="<center><h2>Не правильно введенно имя пользователя или пароль.</h2>
<b>Войти в систему:</b><form method=\"post\" action=\"reg.php\">
<input type=\"hidden\" name=\"a\" value=\"1\">
<input type=\"hidden\" name=\"b\" value=\"0\">
<strong>Имя</strong><br><input type=\"text\" name=\"name\" size=15 maxlength=50>
<strong>Пароль</strong><br><input type=\"password\" name=\"pass\" size=15 maxlength=50>
<input type=\"submit\" name=\"submit\" value=\"Enter\"></form></center>";
}
}
function a1b1()
{
}
}
session_start();
$s=new Add_User;
$s->my_menu();
$s->user_in();
if ((isset($a)) && (isset($b)))
{
$s->vibor($a,$b);
}
else
{
$s->vibor(0,0);
}
?>
<html>
<head>
<title>Магазин</title>
</head>
<body bgColor=#b8d0dc>
<table width="100%" cellspacing=5 cellpaddung=5 border=1>
<tr><td align=center colspan=3><center>Здесь будет логотип<br>d(*_*)b</center></td></tr>
<tr><td width="15%" align=center valign=top><b>Mеню:</b><br>
<?
echo "$s->mymenu";
?>
</td><td width="70%" align=center>
<?
echo "$s->mymsg";
?>
</td><td width="15%" align=center valign=top>
<?
echo "$s->usermsg";
?>
</td></tr>
<tr><td align=center colspan=3>@бла бла бла</td></tr></table>
</body>
</html>
|
во временный файл записывается следующее:
| |
|
|
|
|
|
|
|
для: cheops
(20.01.2005 в 00:35)
| | Хм... вообще должно работать... а нет пробелов или пустых строк перед <?php
PS Вообще такие здоровые листинги лучше прикреплять в виде файла... | |
|
|
|
|
|
|
|
для: cheops
(20.01.2005 в 01:51)
| | Пробелов нет, тык что мне никак не помочь? Главное без класса все работает прекрасно, а с классами вечно проблемы разные. А писать надо обязательно с классами :-( | |
|
|
|
|
|
|
|
для: cheops
(20.01.2005 в 01:51)
| | Если это поможет решить мою проблему, вот мои файлы php.ini и httpd.conf. Может я там где-то напартачил. | |
|
|
|
|
|
|
|
для: MadMaxxx
(20.01.2005 в 03:35)
| | Он пишет какие-нибудь предупреждения или просто тихой цапой не работает? | |
|
|
|
|
|
|
|
для: cheops
(20.01.2005 в 07:57)
| | Да ничего он не пишет, все работает, тока сессии не работают. | |
|
|
|