Тема: Странное поведение сессий.
Здравствуйте!)
У меня следующая проблема: сессии отправляются через раз... Если более точно, то если пользователь в первый раз отправляет форму, то сессии передаются хорошо. Если пользователь опять вводит информацию в эту форму и отправляет ее, то сессии не передаются. Если еще раз провести эту процедуру, то сессию опять передаются. Короче, они не передаются каждый второй раз. Ниже привожу скрипты...
<form action="php_scripts/search.php" method="POST" id="form" onsubmit="document.getElementById('ajaxloader').style.opacity='1'">
<table style="width:95%;text-align:center;">
<?php
$result = mysql_query("select countries from search");
$select = '<select class="select" name="country_id" id="country_id"><option value="0">Выберите страну</option>';
for ($c=1; $c<mysql_num_rows($result)+1; $c++) {
$f = mysql_fetch_array($result);
$select .='<option value="'.$c.'">'.$f['countries'].'</option>';
}
$select .= '</select>';
echo <<<_END
<tr>
<td style="width:50%">
Отправление
</td>
<td>
Прибытие
</td>
</tr>
<tr>
<td>
<select class="select" id="countr" name="countr1">
<option>Россия</option>
</select>
</td>
<td>
$select
</td>
</tr>
<tr>
<td>
<select class="select" id="cities" name="cities1">
<option>Москва</option>
</select>
</td>
<td>
<select class="select" name="region_id" id="region_id">
<option value="0">Выберите город</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
Дата
</td>
</tr>
<tr>
<td>
<input class="select" type="text" id="datepicker1" name="first">
</td>
<td>
<input class="select" type="text" id="datepicker2" name="second">
</td>
</tr>
<tr>
<td colspan="2">
<input type="image" src="images/project/submit.png" class="submit" style="margin:0" onmouseover="this.src='images/project/submitact.png'" onmouseout="this.src='images/project/submit.png'" >
</td>
</tr>
_END;
?>
</table>
</form>
- Это сама форма.
<?php
include "functions.php";
function CheckDMY($val) {
if(preg_match("/^(\d\d)\.(\d\d)\.(\d\d\d\d)$/",$val,$dmy)==0) { return false; }
if(!checkdate($dmy[2],$dmy[1],$dmy[3])) { return false; }
if(!mktime(0,0,0,$dmy[2],$dmy[1],$dmy[3])) { return false; }
return $dmy;
}
$country = $city = $fdate = $sdate = "";
session_start();
if (isset($_SESSION['country_id'])) destroySession();
if (isset($_POST['country_id'])) {
$country = $_POST['country_id'];
$city = $_POST['region_id'];
$fdate = $_POST['first'];
$sdate = $_POST['second'];
if ((CheckDMY($fdate) == false) or (CheckDMY($sdate) == false) or ($country == "0") or ($city == "0")) {
echo "<br><div class='errormsg round' id='errormsg'>Возможно, одно из полей не заполнено, или заполнено некорректно. Проверьте правильность введенных Вами данных.</div><br>";
} else {
$error1 = $error2 = $error3 = $error4 = $error5 = "";
$error = FALSE;
$temp = explode(".",$fdate);
$t = mktime(0,0,0, intval($temp[1]), intval($temp[0]), intval($temp[2]));
if (time() > $t) {
$error2 = "Введенная дата в первом поле не может быть отправлена. Проверьте правильность введенных Вами данных.";
$error = TRUE;
}
$temp1 = explode(".",$sdate);
$t1 = mktime(0,0,0, intval($temp1[1]), intval($temp1[0]), intval($temp1[2]));
if (time() > $t1) {
$error3 = "Введенная дата во втором поле не может быть отправлена. Проверьте правильность введенных Вами данных.";
$error = TRUE;
}
if ($t1<$t) {
$error4 = "Введенная дата во втором поле не может быть раньше даты в первом поле. Проверьте правильность введенных Вами данных.";
$error = TRUE;
}
if ($fdate == $sdate) {
$error5 = "Введенная дата в первом поле совпадает с датой во втором поле. Проверьте правильность введенных Вами данных.";
$error = TRUE;
}
if ($error == FALSE) {
$_SESSION['country_id'] = $country;
$_SESSION['region_id'] = $city;
$_SESSION['date'] = "$fdate - $sdate";
echo "<script> document.location.href='../tour.php' </script>";
} else {
echo "<br><div class='errormsg round' id='errormsg'>";
if ($error1<>"") {
echo "<br>$error1<br>";
}
if ($error2<>"") {
echo "<br>$error2<br>";
}
if ($error3<>"") {
echo "<br>$error3<br>";
}
if ($error4<>"") {
echo "<br>$error4<br>";
}
if ($error5<>"") {
echo "<br>$error5<br>";
}
echo "</div><br>";
}
}
}
?>
--- Это скрипт проверки формы. (search.php)
<?php
$country = $city = $date = "";
if (isset($_SESSION['country_id'])) {
$country = $_SESSION['country_id'];
$city = $_SESSION['region_id'];
$date = $_SESSION['date'];
}
$result = mysql_query("select countries from search");
$select = '<select class="select" name="country" id="country"><option value="0">Выберите страну</option>';
for ($c=1; $c<mysql_num_rows($result)+1; $c++) {
$f = mysql_fetch_array($result);
if ($c == $country) {
$select .='<option selected="selected" value="'.$c.'">'.$f['countries'].'</option>';
}
else {
$select .='<option value="'.$c.'">'.$f['countries'].'</option>';
}
}
$select .= '</select>';
if (($country == 0) or ($country == "")){
$selectcity = '<select class="select" name="city" id="city"><option value="0">Выберите город</option></select>';
} //Если не выбрана страна, то города не отображаются
if ($country == 1) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Аналия</option></select>';
} //Если выбрана турция, то отображается Анталия
if ($country == 2) {
if ($city == 2) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Бургас</option><option value="2" selected="selected">Варна</option></select>';
} //Болгария, Варна
else {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Бургас</option><option value="2">Варна</option></select>';
} //Болгария, Бургас
}
if ($country == 3) {
if ($city == 2) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Хургада</option><option value="2" selected="selected">Шарм</option></select>';
} //Егпет, Шарм
else {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Хургада</option><option value="2">Шарм</option></select>';
} //Египет Хургада
}
if ($country == 4) {
if ($city == 2) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Ираклион</option><option value="2" selected="selected">Каламата</option><option value="1">Корфу</option><option value="1">Кос</option><option value="1">Ларнака</option><option value="1">Радос</option><option value="1">Салоники</option></select>';
} //Греция Каламата
elseif ($city == 3) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Ираклион</option><option value="2">Каламата</option><option selected="selected" value="1">Корфу</option><option value="1">Кос</option><option value="1">Ларнака</option><option value="1">Радос</option><option value="1">Салоники</option></select>';
} //Греция Корфу
elseif ($city == 4) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Ираклион</option><option value="2">Каламата</option><option value="1">Корфу</option><option selected="selected" value="1">Кос</option><option value="1">Ларнака</option><option value="1">Радос</option><option value="1">Салоники</option></select>';
} //Греция Кос
elseif ($city == 5) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Ираклион</option><option value="2">Каламата</option><option value="1">Корфу</option><option value="1">Кос</option><option selected="selected" value="1">Ларнака</option><option value="1">Радос</option><option value="1">Салоники</option></select>';
} //Греция Ларнака
elseif ($city == 6) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Ираклион</option><option value="2">Каламата</option><option value="1">Корфу</option><option value="1">Кос</option><option value="1">Ларнака</option><option selected="selected" value="1">Радос</option><option value="1">Салоники</option></select>';
} //Греция Родос
elseif ($city == 7) {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Ираклион</option><option value="2">Каламата</option><option value="1">Корфу</option><option value="1">Кос</option><option value="1">Ларнака</option><option value="1">Радос</option><option selected="selected" value="1">Салоники</option></select>';
}
else {
$selectcity = '<select class="select" name="city" id="city"><option value="1">Ираклион</option><option value="2">Каламата</option><option value="1">Корфу</option><option value="1">Кос</option><option value="1">Ларнака</option><option value="1">Радос</option><option value="1">Салоники</option></select>';
} //Греция Салоники
}
?>
<div class="round block" style="margin: 20px auto">
<div class="blockcontent">
<div class="round headcontent"><b><h2 style="margin:0;padding:5px">Оставьте, пожалуйста, заявку</h2></b></div>
<table style="width:100%">
<tr>
<td style="width:40%; padding:10px">
Вы можете оставить заявку, и в скором времени с Вами свяжется представитель нашей компании. Для того, чтобы с Вами связались, необходимо заполнить форму справа.
</td>
<td style="width:60%">
<form>
<?php
echo <<<_END
<table style="width:90%; float:right">
<tr>
<td style="width:50%; text-align:left">E-mail</td>
<td style="width:50%"><input class="select clear" value="Введите Ваш e-mail"></td>
</tr>
<tr>
<td style="width:50%; text-align:left">Телефон</td>
<td style="width:50%"><input class="select clear" value="Введите номер Вашего телефона"></td>
</tr>
<tr>
<td style="width:50%; height: 30px" colspan="2">Ваша заявка</td>
</tr>
<tr>
<td style="width:50%; text-align:left">Страна прибытия</td>
<td style="width:50%">$select</td>
</tr>
<tr>
<td style="width:50%; text-align:left">Город прибытия</td>
<td style="width:50%">$selectcity</td>
</tr>
</table>
</form>
_END;
?>
</td>
</tr>
</table>
</div>
</div>
--- Часть страницы, куда должны приходить сессии. Каждый второй раз $_SESSION['country_id'] не приходит.
<?php
require 'login.php';
mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
mysql_query('SET NAMES cp1251');
mysql_query("SET CHARACTER SET 'cp1251'");
mysql_select_db($dbname) or die (mysql_error());
function queryMysql($query) // выдает запрос к базе данных, иначе выдает ошибку
{
$result = mysql_query($query) or die(mysql_error());
return $result;
}
function destroySession()
{
$_SESSION=array();
if (session_id() != "" || isset($_COOKIE[session_name()]))
setcookie(session_name(), '', time()-2592000, '/');
session_destroy();
}
function sanitizeString($var)
{
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
$str = stripslashes($var);
$str = mysql_real_escape_string($var);
}
else
{
$str = mysql_real_escape_string($var);
}
return $var;
}
?>
- functions.php