
13.08.2013, 11:24
|
Новичок на форуме
|
|
Регистрация: 13.08.2013
Сообщений: 9
|
|
Присвоение PHP-переменных сессии через Ajax-запрос
Суть в том, что с текущей страницы отправляется ajax-запрос к другой странице, на которой присваивается переменная $_SESSION, она никуда там не выводится и т.д., просто присваивается значение. В качестве обработки ajax-ответа я хочу вывести эту переменную на текущей странице без перезагрузки, но она не выводится. После обновления страницы все ок. Вопрос: то, что я пытаюсь сделать, вообще возможно?
|
|

13.08.2013, 14:02
|
 |
Профессор
|
|
Регистрация: 28.03.2012
Сообщений: 376
|
|
с особенностями сессий в пхп не знаком, но если покажете код, посмотреть могу.
|
|

13.08.2013, 14:06
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от kuznecovo4ka
|
Вопрос: то, что я пытаюсь сделать, вообще возможно?
|
конечно, просто не забывайте открывать сессию и при изменении данных в нем, сохранять сессию или закрывать(что тоже приводит к сохранению)
если с открытием сессии все у вас ок, просто вконце работы PHP вызывайте метод session_write_close(); и все должно быть гуд
|
|

13.08.2013, 14:36
|
Новичок на форуме
|
|
Регистрация: 13.08.2013
Сообщений: 9
|
|
Сообщение от devote
|
вконце работы PHP вызывайте метод session_write_close();
|
спасибо! помогло 
|
|

13.08.2013, 14:39
|
Новичок на форуме
|
|
Регистрация: 13.08.2013
Сообщений: 9
|
|
еще такой вопрос: как правильно вызывать js-функцию обновления документа? ни document.reload() ни document.refresh() не дают никакой реакции вообще. и можно ли обновить только часть страницы (например div с инклудом другой страницы)?
|
|

13.08.2013, 15:58
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
location.reload();
|
|

14.08.2013, 13:33
|
Новичок на форуме
|
|
Регистрация: 13.08.2013
Сообщений: 9
|
|
блин,что-то опять не работает с сессиями((
видимо вчера выводилось то, что уже было записано в $_SESSION до этого.
вот код страницы, на которой вызывается ajax-запрос и в которую нужно вывести переменную сессии:
<?
session_start();
class Client {
public $name;
public $tel;
public $skidka;
public $code;
public $kolvoObr;
public $sum;
}
?>
<script language="javascript" type="text/javascript">
var request = null;
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxm12.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
if (request == null)
alert("Error creating request object!");
}
function hide() {
document.getElementById("resAuthCl").innerHTML = "";
}
function auth(f) {
createRequest();
var txt = f.elements["searchWord"].value;
if (txt == "") {document.getElementById("resAuthCl").innerHTML = "Задан пустой запрос"; }
else {
var elemsRadio = f.elements["authValue"];
var i, elem;
for (i=0; i<elemsRadio.length; ++i) {
if (elemsRadio[i].checked == true) {
elem = elemsRadio[i];
break; }
}
var data = "txt="+txt+"&type="+elem.value;
var url = "other/forAuthClient.php?"+data;
request.open("GET", url, true);
request.onreadystatechange = upd;
request.send(null);
}
}
function upd() {
if (request.readyState == 4) {
var result = request.responseText;
if (result == "Запись найдена") {
document.getElementById("resAuthCl").innerHTML = "Имя клиента: "+"<? echo $_SESSION['client']->name.'<br />'; ?>"+"Телефон: "+"<? echo $_SESSION['client']->tel.'<br />'; ?>"+"<input id='postAndHide' type='button' value='Да, всё верно' onclick='hide();'/>";
}
else {
document.getElementById("resAuthCl").innerHTML = "Запись не найдена";
}
}
}
</script>
<body>
<div id="top"></div>
<form name="form1">
<input onkeydown="if (event.keyCode == 13) {auth(this.form); return false;}" id="searchWord" type="text" autofocus="autofocus" />
<input name="authValue" type="radio" value="tel" />по номеру
<input name="authValue" type="radio" value="code" checked />по Карте клиента
<input id="poisk" type="button" value="Найти" onclick="auth(this.form);"/>
</form>
<div id="resAuthCl"></div>
<? session_write_close(); ?>
</body>
а вот код обработки ajax-запроса:
<?
session_start();
header("Content-Type: text/html; charset=WINDOWS-1251");
class Client {
public $name;
public $tel;
public $skidka;
public $code;
public $kolvoObr;
public $sum;
}
function clientAuth($text, $pole){
include('../block/db.php');
$res = mysql_query("select * from clients where $pole='$text'", $db);
$numrows = mysql_num_rows($res);
if ($numrows>'0') {
$myrow = mysql_fetch_array($res);
$_SESSION['client'] = new Client();
$_SESSION['client']->name = $myrow['name'];
$_SESSION['client']->tel = $myrow['tel'];
$_SESSION['client']->skidka = $myrow['skidka'];
$_SESSION['client']->code = $myrow['code'];
$_SESSION['client']->kolvoObr = $myrow['kolvo_obr'];
$_SESSION['client']->sum = $myrow['sum'];
session_write_close();
return true;
}
else {
return false;
}
return;
}
if (isset($_GET['txt']) and isset($_GET['type'])) {
$text = $_GET['txt'];
$pole = $_GET['type'];
$fl = clientAuth($text, $pole);
if($fl) {
echo "Запись найдена";
}
else echo "Запись не найдена";
}
?>
|
|

14.08.2013, 15:36
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
какой же ужас у вас создан. И плюс с проблемами безопасности.
<script type="text/javascript">
function hide() {
document.getElementById("resAuthCl").innerHTML = "";
}
function auth(f) {
var txt = f.elements["searchWord"].value;
if (txt == "") {
document.getElementById("resAuthCl").innerHTML = "Задан пустой запрос";
} else {
var elemsRadio = f.elements["authValue"];
var i, elem;
for (i=0; i<elemsRadio.length; ++i) {
if (elemsRadio[i].checked == true) {
elem = elemsRadio[i];
break;
}
}
var data = "txt="+txt+"&type="+elem.value;
var url = "other/forAuthClient.php?"+data;
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.onreadystatechange = function() {
if (this.readyState == 4) {
if (this.status >= 200 && this.status < 300 || this.status === 304) {
var perhapsJSON = null;
try {
if (window.JSON && JSON.parse) {
perhapsJSON = JSON.parse(this.responseText);
} else {
perhapsJSON = (new Function("return " + this.responseText))();
}
} catch(_e_) {}
if (perhapsJSON && perhapsJSON.found) {
document.getElementById("resAuthCl").innerHTML = 'Имя клиента: ' +
perhapsJSON.name + '<br />Телефон: ' + perhapsJSON.tel + '<br />' +
'<input id="postAndHide" type="button" value="Да, всё верно" onclick="hide();"/>';
} else {
document.getElementById("resAuthCl").innerHTML = "Запись не найдена";
}
}
}
};
request.send(null);
}
}
</script>
<body>
<div id="top"></div>
<form name="form1">
<input onkeydown="if (event.keyCode == 13) {auth(this.form); return false;}" id="searchWord" type="text" autofocus="autofocus" />
<input name="authValue" type="radio" value="tel" />по номеру
<input name="authValue" type="radio" value="code" checked />по Карте клиента
<input id="poisk" type="button" value="Найти" onclick="auth(this.form);"/>
</form>
<div id="resAuthCl"></div>
</body>
<?php
header("Content-Type: text/html; charset=WINDOWS-1251");
function clientAuth($text, $pole){
include('../block/db.php');
$res = mysql_query("select * from clients where $pole='" . mysql_real_escape_string($text) ."'", $db);
$numrows = mysql_num_rows($res);
if ($numrows > 0) {
$myrow = mysql_fetch_array($res);
return array(
'found' => true,
'name' => $myrow['name'],
'tel' => $myrow['tel'],
'skidka' => $myrow['skidka'],
'code' => $myrow['code'],
'kolvoObr' => $myrow['kolvo_obr'],
'sum' => $myrow['sum'],
);
}
return array('found' => false);
}
if (isset($_GET['txt'], $_GET['type'])) {
$text = $_GET['txt'];
$fl = array('found' => false);
session_start();
if ($_GET['type'] == 'tel') {
$fl = clientAuth($text, 'tel'); // в целях безопасности делать лучше так
} else if ($_GET['type'] == 'code') {
$fl = clientAuth($text, 'code'); // в целях безопасности делать лучше так
}
$_SESSION['auth'] = $fl;
session_write_close();
echo json_encode($fl);
}
?>
Последний раз редактировалось devote, 14.08.2013 в 16:13.
|
|

14.08.2013, 16:02
|
Новичок на форуме
|
|
Регистрация: 13.08.2013
Сообщений: 9
|
|
devote, про ужас,это может быть,я только учусь))
в Вашем коде в первом файле на 32 строке у меня dreamweaver подсвечивает как ошибку
на странице теперь совсем ничего не выводится и даже после перезагрузки
|
|

14.08.2013, 16:09
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
да, там ошибка, скобочку забыл.. добавил
|
|
|
|