ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

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

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

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


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Интеграция баз данных. Часть Пятая.


31-05-2015

| Листинг 23.5. Сеансы PHP, сохраненные в базе данных MySQL
<?php
class mySession
{
private $dbLink; public function open()
{
if(!($this->dbLink =
mysql_connect("localhost", "httpd", "")))

{

 return(FALSE); 
// выбрать базу данных, а затем проверить на ошибку
if(!($dbResult =
mysql_query("USE test", $this->dbLink)))
{
return(FALSE);
}
return(TRUE);
}
public function close()
{
mysql_close($this->dbLink); return(TRUE);
}
public function read($id)
{
$Query = "SELECT SessionData " . "FROM session " .
"WHERE ID = '" . addslashes($id) . "'";
if(!($dbResult = mysql_query($Query, $this->dbLink)))
{
return(FALSE);
}
$dbRow = mysql_fetch_assoc($dbResult); //обозначить сеанс, как уже имевший доступ $Query = "UPDATE session " . "SET " .
"LastAction=NOW() " .
"WHERE ID='".addslashes($id)."' "; if(!($dbResult = mysql_query($Query, $this->dbLink)))
{
return(FALSE);
}
return($dbRow['SessionData']);
}
public function write($id, $data)
{
// создать сеанс, если он еще не существует
$Query = "INSERT IGNORE " . "INTO session (ID) " . "VALUES ('".addslashes($id)."')";
if(!($dbResult = mysql_query($Query, $this->dbLink)))
{
return(FALSE);
}
// обновить сеанс $Query = "UPDATE session " . "SET " .
"SessionData='".addslashes($data)."', " .
"LastAction=NOW() " .
"WHERE ID='".addslashes($id)."' ";
if(!($dbResult = mysql_query($Query, $this->dbLink)))
{
return(FALSE);
}
return(TRUE);

}
public function destroy($id)
{
$Query = "DELETE session " .
"WHERE ID='".addslashes($id)."' ";
if(!($dbResult = mysql_query($Query, $this->dbLink)))
{
return(FALSE);
}
return(TRUE);
}
public function garbage($lifetime)
{
$Query = "DELETE session " .
"WHERE (LastAction + $lifetime) < NOW() ";
if(!($dbResult = mysql_query($Query, $this->dbLink)))
{
return(FALSE);
}
return(TRUE);
}
}
$s = new mySession(); session_set_save_handler(
array($s, 'open'),
array($s, 'close'),
array($s, 'read'),
array($s, 'write'),
array($s, 'destroy'),
array($s, 'garbage')
);
// начать сеанс session_start();
// наращивать счетчик по мере доступа к страницам
if(isset($_SESSION['Count']))
$_SESSION['Count']++;
else
//начать отсчет с 1 $_SESSION['Count'] = 1;
// подключиться к базе данных
if(!($dbLink = mysql_connect("localhost", "httpd", "")))
print("Heвoзмoжнo подключиться к базе данных!<br>n"); // выбрать базу данных, затем проверить на ошибку
if(!($dbResult = mysql_query("USE test", $dbLink)))
print("Heвoзмoжнo использовать базу данных test!<br>n");
//если пользователь изменяет идентификатор счета, // обновить этот столбец и сеанс
if(isset($_REQUEST['invoice'])) 
//преобразовать идентификатор счета в целое число
$_REQUEST['invoice'] = (integer)$_REQUEST['invoice'];
if(!($dbLink = mysql_connect("localhost", "httpd", "")))
{
print("Невозможно подключиться к базе данных!<br>n");
}
//выбрать базу данных, затем проверить на ошибку
if(!($dbResult = mysql_query("USE test", $dbLink)))
{
print("Невозможно использовать базу данных test!<br>n");
}
$Query = "UPDATE session " .
"SET Invoice={$_REQUEST['invoice']} " . "WHERE ID = '" . session_id() . "' ";
if(!($dbResult = mysql_query($Query, $dbLink)))
{
print("Невозможно обновить счет!<br>n");
}
$Invoice = $_REQUEST['invoice'];
}
else
{
//получить инвойс
$Query = "SELECT Invoice FROM session " . "WHERE ID = '" . session_id() . "' ";
if(!($dbResult = mysql_query($Query, $dbLink)))
{
print("Невозможно получить счет!<br>n");
}
$dbRow = mysql_fetch_assoc($dbResult); $Invoice = $dbRow['Invoice'];
}
?>
<html> <head>
<title>Листинг 23.5</title>
</head>
<body>
<?php
print("Вы просматривали эту страницу {$_SESSION['Count']}
раз!<br>n"); print("Текущий счет: $Invoice<br>n"); // отобразить форму для получения имени print("<form " .
"action="{$_SERVER['PHP_SELF']}" " . "method="post">" .
"<input type="text" name="invoice" " .
"value="">n" .
"<input type="submit" value="set order number"><br>n" . "</form>");
// для перезагрузки этой страницы воспользуйтесь ссылкой
print("<a href="{$_SERVER['PHP_SELF']}">reload</a><br>n");
?>
</body> </html>

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Интеграция баз данных. Часть Четвёртая. PHP. Интеграция баз данных. Часть Шестая.