Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос: Ссесии + Классы
 
 автор: MadMaxxx   (19.01.2005 в 23:18)   письмо автору
 
 

Помогите пожалуйста разобраться как работать с ссесиями внутри функций классов.
Код у меня был такой:
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>";
  }
 }


А в файле ссесии сохраняется это:
!id_user|


А если писать без классов:
<?
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>

то ссесии работают нормально

   
 
 автор: Akira   (19.01.2005 в 23:38)   письмо автору
 
   для: MadMaxxx   (19.01.2005 в 23:18)
 

Чует мое сердце без global тут не обойтись.

   
 
 автор: MadMaxxx   (20.01.2005 в 00:27)   письмо автору
 
   для: Akira   (19.01.2005 в 23:38)
 

А как мне писать чтоб все работало?

   
 
 автор: cheops   (19.01.2005 в 23:43)   письмо автору
 
   для: MadMaxxx   (19.01.2005 в 23:18)
 

Хм... всё зависит от того, как вызывается функция класса, может до неё уже произошёл вывод в окно браузера? Тогда установить сессию не получится.

   
 
 автор: MadMaxxx   (20.01.2005 в 00:28)   письмо автору
 
   для: cheops   (19.01.2005 в 23:43)
 

Не еслиб она запускалась до вывода в окно браузера, то тогда бы и id не выводилось бы на экран

   
 
 автор: MadMaxxx   (20.01.2005 в 00:07)   письмо автору
 
   для: MadMaxxx   (19.01.2005 в 23:18)
 

Так что-же мне всетаки делать? как писать, чтоб все работало?

   
 
 автор: cheops   (20.01.2005 в 00:35)   письмо автору
 
   для: 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;
?>

Всё это хозяйство следует адаптировать под свои цели...

   
 
 автор: MadMaxxx   (20.01.2005 в 01:06)   письмо автору
 
   для: 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==&& $b==0)
  { 
   
$this->a0b0();
  }
  if(
$a==&& $b==1)
  { 
   
$this->a0b1();
  }
  if(
$a==&& $b==0)
  { 
   
$this->a1b0();
  }
  if(
$a==&& $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>

во временный файл записывается следующее:
!id_user|

   
 
 автор: cheops   (20.01.2005 в 01:51)   письмо автору
 
   для: cheops   (20.01.2005 в 00:35)
 

Хм... вообще должно работать... а нет пробелов или пустых строк перед <?php

PS Вообще такие здоровые листинги лучше прикреплять в виде файла...

   
 
 автор: MadMaxxx   (20.01.2005 в 02:14)   письмо автору
 
   для: cheops   (20.01.2005 в 01:51)
 

Пробелов нет, тык что мне никак не помочь? Главное без класса все работает прекрасно, а с классами вечно проблемы разные. А писать надо обязательно с классами :-(

   
 
 автор: MadMaxxx   (20.01.2005 в 03:35)   письмо автору
 
   для: cheops   (20.01.2005 в 01:51)
 

Если это поможет решить мою проблему, вот мои файлы php.ini и httpd.conf. Может я там где-то напартачил.

   
 
 автор: cheops   (20.01.2005 в 07:57)   письмо автору
 
   для: MadMaxxx   (20.01.2005 в 03:35)
 

Он пишет какие-нибудь предупреждения или просто тихой цапой не работает?

   
 
 автор: MadMaxxx   (20.01.2005 в 20:25)   письмо автору
 
   для: cheops   (20.01.2005 в 07:57)
 

Да ничего он не пишет, все работает, тока сессии не работают.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования