|
|
|
| Имеется форма поиска:
$query = "SELECT * FROM hotels
WHERE hide='show'
".$tmp1.$tmp2.$tmp3."
ORDER BY status, distance";
$prt = mysql_query($query);
if(!$prt) puterror("ERROR!");
if (mysql_num_rows($prt)>0)
{
?>
<?
while($par = mysql_fetch_array($prt))
{
echo "<form name='".$par['hotel_name']."' action='../".$par['link']."' method=POST>";
echo "<input type=hidden value='$city' name='city'>";
echo "<input type=hidden value='$location' name='location'>";
echo "<input type=hidden value='".$par['hotel_ID']."' name='prop_ID'>";
echo "<input type=hidden value='".$par['hotel_name']."' name='hotel_name'>";
echo "<input type=hidden value=$datea name=datea>";
echo "<input type=hidden value=$dated name=dated>";
echo"<h3>".$par['hotel_name']."</h3>
<div class=status><img src=../$status></div>
<div class=hotpic>
<img class=hotpic src=../".$par['photo'].">
<p>Address: $country, $city, ".$par['address']."<br>
Nearest metro: ".$par['metro']."<br>
Distance: ".$par['distance']."<br>
Hotel Note: <a class=hotelnote>".$par['note']."</a><br>
<ul class=reserve>
<li class=reserve><a href=../".$par['link']."></a></li>
</ul></div>";
echo "<div class=reserve-button reserve><input type=image id=reserve-button src=../images/icons/learnmore.jpg>
<input type=hidden name=search value=search></form></div>";
}
}
else
echo "<h3 class=required><img scr= width=16 height=16>Sorry, but there are no $status star hotels in that area of $city.</h3>";
echo "<br>";
}
?>
|
После обработки запроса выводится ряд гостиниц с скрытыми параметрами. Если убрать HIDDEN FIELDS, то форма-обработчик не будет знать какую гостинецу надо отобразить. Как можно избавиться от скрытых полей прибегнув к сессии? | |
|
|
|
|
|
|
|
для: nicksaint
(13.05.2006 в 14:16)
| |
<?php
$query = "SELECT * FROM hotels
WHERE hide='show'
".$tmp1.$tmp2.$tmp3."
ORDER BY status, distance";
$prt = mysql_query($query);
if(!$prt) puterror("ERROR!");
if (mysql_num_rows($prt)>0)
{
?>
<?
session_start();
while($par = mysql_fetch_array($prt))
{
$_SESSION['city'] = $city;
$_SESSION['location'] = $location;
$_SESSION['prop_ID'] = $hotel_ID;
$_SESSION['hotel_name'] = $hotel_name;
$_SESSION['datea'] = $datea;
$_SESSION['dated'] = $dated;
echo"<h3>".$par['hotel_name']."</h3>
<div class=status><img src=../$status></div>
<div class=hotpic>
<img class=hotpic src=../".$par['photo'].">
<p>Address: $country, $city, ".$par['address']."<br>
Nearest metro: ".$par['metro']."<br>
Distance: ".$par['distance']."<br>
Hotel Note: <a class=hotelnote>".$par['note']."</a><br>
<ul class=reserve>
<li class=reserve><a href=../".$par['link']."></a></li>
</ul></div>";
echo "<div class=reserve-button reserve><input type=image id=reserve-button src=../images/icons/learnmore.jpg>
<input type=hidden name=search value=search></form></div>";
}
}
else
echo "<h3 class=required><img scr= width=16 height=16>Sorry, but there are no $status star hotels in that area of $city.</h3>";
echo "<br>";
}
?>
|
Так вроде :-) | |
|
|
|
|
|
|
|
для: WebTech
(13.05.2006 в 16:19)
| | Большое спасибо за помощь. Немного подправил но сессия работает, но почему-то всегда передается только последний параметр.
И
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at z:\home\localhost\www\icon\util\top.php:8) in z:\home\localhost\www\icon\hotels\searcher.php on line 110
|
Следующая страница должна получить нужное значение параиетра $_SESSION['prop_ID']. У каждого значения оно свое, а передается только последнее и если вернуться назад и сново кликнуть на ссылку то зночение вовсе теряется. | |
|
|
|
|
|
|
|
для: nicksaint
(14.05.2006 в 10:02)
| | Сессия должна начинаться и переменные должны устанавливаться до вывода любой информации в браузер. Т.е.
session_start() и все $_SESSION надо поставить на самый верх скрипта.
Смотри на ошибку, у тебя происходит вывод чего-то в браузер в скрипте searcher.php в строке 110
А насчет последнего значения... У тебя же цикл, поэтому на следующую страницу попадает только последнее значение, которое получается в результате работы цикла. Надо придумать, как все значения передавать. Например, прибавлять номер к имени переменной, т.е.
$_SESSION['prop_ID_1'] при первом проходе цикла
$_SESSION['prop_ID_2'] при втором проходе и т.д. | |
|
|
|
|
|
|
|
для: WebTech
(14.05.2006 в 11:19)
| | Этот скрипт крепится к results.php (require_once "searcher.php";). Я перенес session_start(); в начало results.php и в начало searcher.php. Ошибка исчезла, но вроблема осталась - передается не та переменная, а песледняя.
Да, и ссылка с одним параметром на все гостиницы ведет на конкретную страницу, а вот там и нужен тот параметр по которому и происходит вывод нудной инфы.
Посмотрел в /tmp и там
city|N;location|N;hotel_ID|N;hotel_name|s:17:"Golden Ring Hotel";datea|N;dated|N;hotel_ID|i:0;status|N;
Почему только по одному отелю? | |
|
|
|
|
|
|
|
для: nicksaint
(14.05.2006 в 11:39)
| | Т.е., для каждой гостиницы своя страница?
Ничего страшного. В цикле будут созданы все переменные, а затем на соответствующей странице выбрана необходимая переменная.
А что у тебя в /tmp? И в каком виде хранятся ссылки на страницы? $par['link'] | |
|
|
|
|
|
|
|
для: WebTech
(14.05.2006 в 13:11)
| | Нет. Имеется страница XXX.php которая принимает параметр отеля ($_SESSION['hotel_ID']) из базы данных т.е. $_SESSION['hotel_ID']=$par['hotel_ID]. Исходя из того какой отель был выбран из списка - сессия должна переслать его ID странице XXX.php для дальнейшего вывода самого отеля.
$par['link']="XXX.php";
Инфо в /tmp постоянно меняется, но инфо только по отелю что последний по списку. Именно его ID и передается хотя должен другой!
city|s:6:"Moscow";location|s:2:"dt";status|s:26:"images/hotels/fivestar.gif";hotel_ID|s:1:"8";hotel_name|s:17:"Golden Ring Hotel";datea|s:10:"05/15/2006";dated|s:10:"05/17/2006";
|
Я попробывал посмотреть создаются ли вообще другие переменные путем прибавления к имени отеля той-самой переменной
echo"<h3>".$_SESSION['hotel_name']."/".$_SESSION['hotel_ID']."</h3>
|
К какждому имени отеля прибавилась нужная переменная. Но в /tmp они не заносятся. Значит мы где то рядом ходим. | |
|
|
|
|
|
|
|
для: nicksaint
(14.05.2006 в 13:30)
| | Кто-нибудь знает как это все должно работать? | |
|
|
|
|
|
|
|
для: nicksaint
(14.05.2006 в 13:30)
| | Не
$_SESSION['hotel_name']."/".$_SESSION['hotel_ID']
|
а
$_SESSION['hotel_name'.$i]
|
где $i это счетчик или
$_SESSION['hotel_name'.$_SESSION['hotel_ID']]
|
но тогда придется $_SESSION['hotel_ID'] приписывать к каждому имени переменной. Попробуй так и у тебя в /tmp окажутся все переменные.
Так уж ли нужны сессии в данном случае?
У тебя выводится отдельная форма для каждой гостиницы. И получается, что каждой форме назначен отдельный обработчик. Нельзя в скрытом поле передавать только hotel_ID, а в обработчике извлекать из бд все остальные данные?
Чем тебе не нравятся скрытые поля?
В данном случае сессии не очень хорошо годятся, потому что все переменные сессии будут созданы кучей и их не очень удобно будет потом "разбирать".
И сессия существует до тех пор, пока открыт браузер. Если пользователь сохранит страницу с формами, потом закроет браузер, а потом эту страницу снова откроет, то данные сессии будут потеряны.
>Но в
>/tmp они не заносятся. Значит мы где то рядом ходим.
Заносится только последнее значение, потому что имена переменных одинаковые, а цикл проходит несколько раз. Остаются только значения после последнего прохода цикла. | |
|
|
|
|
|
|
|
для: WebTech
(14.05.2006 в 16:25)
| | C hidden fields все работает, но мне не очень хочется их использовать. Их можно изменить. | |
|
|
|
|
|
|
|
для: nicksaint
(14.05.2006 в 16:29)
| | Ну и пусть изменяет. Это проблема пользователя, если он в результате подмены значения получит не то, что надо.
А если ты боишься SQL-injection, то надо просто подставляемые в запрос значения обрабатывать с помощью mysql_escape_string() и stripslashes(). | |
|
|
|
|
|
|
|
для: WebTech
(14.05.2006 в 19:12)
| | А Вы правы. Я наверное оставлю и не стану усложнять. Спасибо за помощь. | |
|
|
|
|
|
|
|
для: nicksaint
(14.05.2006 в 19:33)
| | Все-таки...
С помощью сессий - единственное, что пришло в голову, это вот что.
Если в $par['link'] хранится имя скрипта обработчика в виде xxx.php, то можно так.
<?
session_start();
$i = 0;
while($par = mysql_fetch_array($prt))
{
$i++;
echo "<form name='".$par['hotel_name']."' action='../".$par['link']."' method=POST>";
$_SESSION['city'][$par['link']] = $city;
$_SESSION['location'][$par['link']] = $location;
$_SESSION['prop_ID'][$par['link']] = $par['hotel_ID'];
$_SESSION['hotel_name'][$par['link']] = $par['hotel_name'];
$_SESSION['datea'][$par['link']] = $datea;
$_SESSION['dated'][$par['link']] = $dated;
. . .
// и т.д.
?>
|
и в каждом скрипте обработчике переменные будут извлекаться так:
<?php
session_start();
$city = $_SESSION['city'][$_SERVER['PHP_SELF']];
$location = $_SESSION['location'][$_SERVER['PHP_SELF']];
$prop_ID = $_SESSION['prop_ID'][$_SERVER['PHP_SELF']];
$hotel_name = $_SESSION['hotel_name'][$_SERVER['PHP_SELF']];
$datea = $_SESSION['datea'][$_SERVER['PHP_SELF']];
$dated = $_SESSION['dated'][$_SERVER['PHP_SELF']];
...
// и т.д.
?>
|
| |
|
|
|
|
|
|
|
для: WebTech
(14.05.2006 в 19:47)
| | Надо и это попробывать. Потом отпишу что получилось. | |
|
|
|
|
|
|
|
для: WebTech
(14.05.2006 в 19:47)
| | Меня смущает, что у тебя в форме стоит
action = $par['link']
Получается, что для каждой формы отдельный скрипт обработчик? Если так, то получается, что при добавлении нового отеля, нужно добавлять скрипт. Или в $par['link'] фиксированное значение, одинаковое для всех форм?
Хочется довести дело до конца :-) | |
|
|
|
|
|
|
|
для: WebTech
(14.05.2006 в 19:54)
| | Нет, как только hotel_ID падает на XXX.php происходит простой запрос:
$query = "SELECT hotel_name FROM hotels
WHERE hotel_ID='".$_SESSION['hotel_ID']."'";
$prt = mysql_query($query);
if(!$prt) puterror("ERROR!");
if (mysql_num_rows($prt)>0)
{
while($par = mysql_fetch_array($prt))
{
$property=$par['hotel_name']; и т.д.
|
И выводится инфо отеля. | |
|
|
|