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

Форум PHP

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

 

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

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

тема: Сессия не работает?
 
 автор: Trololo   (03.04.2012 в 15:24)   письмо автору
 
 

Привет форумчанам!!!
Есть форма поиска с двумя параметрами. Мне надо чтобы по умолчанию(когда пользователь заходит на сайт) из БД выбирались какие-то значения, все оно хорошо, НО когда перехожу по ссылке Подробно(т.е. посылаю новый $_GET-запрос), из БД выбираются те параметры, которые записаны по умолчанию, а мне надо, чтобы данные, полученные из <select> сохранялись в скрипте на протяжении всего его выполнения или пока не будут выбраны другие значения <select> . Как сохранять эти значения? Хотела сделать с помощью сессии, но в все равно в сессии записывается только то, что после else. Может условие неверное составила? Посмотрите пожалуйста подскажите что не так! Уже четвертый день над этим скриптом бьюсь, ничего не получается
<?php
$title 
= array("Дата","Район""Кол-во комнат""Площадь""Цена""Контакты""Фото");

$little_image "./photo/little/";
$full_image "./photo/full/";

session_start();


if (isset (
$_POST['seek']))
{
    
$_SESSION['object'] = clearData($_POST['mr']);
    
$_SESSION['operation'] = clearData($_POST['mo']);
}

else
{
    
$_SESSION['object'] = "Квартира";
    
$_SESSION['operation'] = "Купить";
}

if (!empty(
$_GET['details']))
{
    
$id = (int)($_GET['details']);
    echo 
$id;
    
$sql_d "SELECT `date_dec`, `operation`, `estate_type`, `rooms`, `floor`,`square_all`, `square_live`,
            `square_k`, `wall`, `street`, `area_of_kerch`, `house`, `year`, `price`, `price_currency`,
            `price_comment`, `photo`, `publication`, `zem_uch`, `target`, `name_object`, `comment`,
            `contacts` FROM `table_main` WHERE `id`='"
.$id."'";
    
$data_d mysql_query ($sql_d) or die (my_err_sql ());
    
$item_d mysql_fetch_array ($data_d);
    
$sql_photo "SELECT `photo_name` FROM `photo` WHERE `id`='".$id."'";
    
$photo mysql_query($sql_photo) or die (my_err_sql());
    
    require_once 
"./templates/detail.php"// форма вывода подробного объявления
}

    
$sql "SELECT `id`, `date_dec`, `operation`, `estate_type`, `rooms`, `floor`,`square_all`, `square_live`,
            `square_k`, `wall`, `street`, `area_of_kerch`, `house`, `year`, `price`, `price_currency`,
            `price_comment`, `photo`, `publication`, `zem_uch`, `target`, `name_object`, `comment`,
            `contacts` FROM `table_main` WHERE `operation`='"
.$_SESSION['operation']."' AND `estate_type`='".$_SESSION['object']."'";
    
$data mysql_query($sql) or die (my_err_sql());
    echo 
"<table border=\"1\">";
    echo 
"<tr>";
    foreach (
$title as $value)
    {
        echo 
"<td align=\"center\"> ".$value." </td>";
    }
    echo 
"</tr>";
    
    while (
$item mysql_fetch_array ($data))
    {
        
$id = (int) ($item['id']);
        
$sql_photo "SELECT `photo_name` FROM `photo` WHERE `id`='".$id."'";
        
$photo mysql_query($sql_photo) or die (my_err_sql());
        
$p mysql_fetch_array ($photo);
        echo 
"<tr>
        <td>"
.$item["date_dec"]."</td>
        <td>"
.$item["area_of_kerch"]."</td>";
            if ((
$_SESSION['object'] == "Квартира") || ($_SESSION['object'] == "Дом"))
            {
                echo 
"<td>".$item["rooms"]."</td>";
            }
            else echo 
"<td> - </td>";
        echo 
"<td>".$item["square_all"]."</td>
        <td>"
.$item["price"]." ".$item["price_currency"]."</td>
        <td>"
.$item["contacts"]."</td>";
        echo 
'<td><img src="'.$little_image.$p['photo_name'].'" alt="" /></td>';
        echo 
'<td><a href="main.php?item=estate&details='.$id.'">Подробней</a></td>';
        echo 
"</tr>";
}
echo 
"</table>";
?>

  Ответить  
 
 автор: confirm   (03.04.2012 в 15:31)   письмо автору
 
   для: Trololo   (03.04.2012 в 15:24)
 

Вы поясните вот этот момент:
НО когда перехожу по ссылке Подробно(т.е. посылаю новый $_GET-запрос)
а проверяете в условии $_POST['seek']
как это все связано?

  Ответить  
 
 автор: Trololo   (03.04.2012 в 15:43)   письмо автору
 
   для: confirm   (03.04.2012 в 15:31)
 

>Вы поясните вот этот момент:
>НО когда перехожу по ссылке Подробно(т.е. посылаю новый $_GET-запрос)
>а проверяете в условии $_POST['seek']
>как это все связано?
может никак и не связано, имела ввиду, что значения получаемые из формы должны сохранятся на протяжении работы данного скрипта, а получается, что когда перехожу на другую ссылку(или вызываю другой скрипт) значения этого скрипта опять записываются по умолчанию
форма поиска
<form action="main.php?item=estate" method="post">
   <tr>
<td width="70">Тип: </td>
<td><select name="mr" size="1">
        <option value=""></option>
        <option value="Квартира">Квартира</option>
        <option value="Дом">Дом/Дача</option>
        <option value="Гараж">Гараж</option>
        <option value="Коммерческая">Коммерческая</option>
        <option value="Участок">Участок</option>
        </select>
        </td>
</tr>
<tr>
<td width="70">Операция: </td>
<td><select name="mo" size="1">
        <option value=""></option>
        <option value="Купить">Купить</option>
        <option value="Продать">Продать</option>
        <option value="Сдать">Сдать</option>
        <option value="Снять">Снять</option>
        </select>
        </td>
</tr>
<tr>
    <td>   <input type="submit" name="seek" value="Найти!"></td>
</tr>
</form>

  Ответить  
 
 автор: confirm   (03.04.2012 в 15:48)   письмо автору
 
   для: Trololo   (03.04.2012 в 15:43)
 

>имела ввиду, что значения получаемые из формы должны сохранятся на протяжении работы данного скрипта

Ну можно сказать и так, а потому правильно имеете ввиду

>а получается, что когда перехожу на другую ссылку(или вызываю другой скрипт)

И правильно получается, так как вы получаете новые данные, и если не было при этом отправки методом POST, то окуда же им взяться?

В скрипте, который обрабатывает данные формы и сохраняйте нужные из них в сессии, а в другом извлекайте.

  Ответить  
 
 автор: Trololo   (03.04.2012 в 16:14)   письмо автору
 
   для: confirm   (03.04.2012 в 15:48)
 

Скрипт обрабатывает данные, полученные из формы и их же использует в запросах к БД и выводится красивая табличка с объектами, когда перехожу по ссылке Подробно, выводится конкретное объявление со всеми подробностями, но данные полученные из формы перезаписываются значениями по умолчанию и в таблице отображается уже не то, что выбрано пользователем, а Квартира -> Купить, т.е. то что идет после else в скрипте. Как сохранить значения, выбранные в форме, т.е. чтобы эти данные, полученные из <select> сохранялись в скрипте на протяжении всего его выполнения или пока не будут выбраны другие значения <select>
Извините, что много "воды лью", просто пока не знаю как объяснить языком программистов php :)

  Ответить  
 
 автор: confirm   (03.04.2012 в 16:12)   письмо автору
 
   для: Trololo   (03.04.2012 в 15:43)
 

Опа, сейчас только обратил внимание - в обоих случаях у вас main.php
О каких разных скриптах тогда речь?

  Ответить  
 
 автор: Trololo   (03.04.2012 в 16:17)   письмо автору
 
   для: confirm   (03.04.2012 в 16:12)
 

в main.php находится форма поиска, в main.php подключаю estate_user.php - обрабатываю эту форму и вывожу данные из БД
p.s. ой, прочитайте пожалуйста мой предыдущий пост, описала проблему как можно подробней, если это поможет )

  Ответить  
 
 автор: confirm   (03.04.2012 в 16:27)   письмо автору
 
   для: Trololo   (03.04.2012 в 16:17)
 

Ну так это запрос к одному и тому же скрипту. И тогда все правильно, как вы действуете, так и получается. Первый запуск скрипта (вывод формы) - это выдал сервер пользователю ее и забыл об всем. Отправляется форма - опять запрос этого же скрипта, но то состояние сервера, которое было при первом запуске его, включая все переменные, которые вы могли установить, этого уже нет, и массив POST будет пуст, естественно, при третьем запросе его - ссылкой.
Вам надо проверять - если не установлена переменная в сессии и не было POST запроса, то установить ее и указать значение по умолчанию, в противном случае указать ей POST-значение.

  Ответить  
 
 автор: Trololo   (03.04.2012 в 17:00)   письмо автору
 
   для: confirm   (03.04.2012 в 16:27)
 

>Вам надо проверять - если не установлена переменная в сессии и не было POST запроса, то установить ее и указать значение по умолчанию, в противном случае указать ей POST-значение.
Написала такое условие:
if (!isset($_SESSION['object']) && !isset($_SESSION['operation']) && !isset($_POST['seek']))
{
    $_SESSION['object'] = "Квартира";
    $_SESSION['operation'] = "Купить";
}
else
{
    $_SESSION['object'] = clearData($_POST['mr']);
    $_SESSION['operation'] = clearData($_POST['mo']);
}

теперь php ругается на пер-е $_POST['mr'] и $_POST['mo'] Notice: Undefined index: mr in /home/user/php_work/New/html/user/estate_user.php on line 52 Notice: Undefined index: mo in /home/user/php_work/New/html/user/estate_user.php on line 53
т.е. в блоке else, я понимаю что php видит эти переменные как неидентифицированные, но я их получаю из формы, тогда как их правильно объявить?

  Ответить  
 
 автор: confirm   (03.04.2012 в 17:17)   письмо автору
 
   для: Trololo   (03.04.2012 в 17:00)
 

<?
session_start
();
if(!isset(
$_SESSION['seek']) && !$_POST) {
   
$_SESSION['seek']['object'] = "Квартира";
   
$_SESSION['seek']['operation'] = "Купить"
} else if(
$_POST) {
   
$_SESSION['seek']['object'] = $_POST['mr'];
   
$_SESSION['seek']['operation'] = $_POST['mo']; 
}
if(isset(
$_GET['seek'])) print_r($_SESSION['seek']);
?>
<form method="post">
<input name="mr" value="mr" />
<input name="mo" value="mo" />
<input type="submit" value="Send" />
</form>
<a href="?seek">GET</a>

PS. А вообще-то, у вас ведь загрузка по умолчанию, это только при условии, что не было вообще выбора, а любой выбор сохранять, тогда проще:
<?
session_start
();
if(!isset(
$_SESSION['seek'])) {
   
$_SESSION['seek']['object'] = "Квартира";
   
$_SESSION['seek']['operation'] = "Купить"

if(
$_POST) {
   
$_SESSION['seek']['object'] = $_POST['mr'];
   
$_SESSION['seek']['operation'] = $_POST['mo']; 
}
if(isset(
$_GET['seek'])) print_r($_SESSION['seek']);
?>
<form method="post">
<input name="mr" value="mr" />
<input name="mo" value="mo" />
<input type="submit" value="Send" />
</form>
<a href="?seek">GET</a>
Эффект тот же будет, если я правильно понимаю задачу.

  Ответить  
 
 автор: Trololo   (03.04.2012 в 17:45)   письмо автору
 
   для: confirm   (03.04.2012 в 17:17)
 

>PS. А вообще-то, у вас ведь загрузка по умолчанию, это только при условии, что не было вообще выбора, а любой выбор сохранять, тогда проще
>]Эффект тот же будет, если я правильно понимаю задачу.
Да, именно так, второй вариант более логичен, хотя возьму на заметку оба :) Теперь все выполняется как задумано. Можно покорять php дальше :) Спасибо Вам большое пребольшое за помощь!!!! Всего Вам хорошего, чего душа пожелает!!!!!

  Ответить  
Rambler's Top100
вверх

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