Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.05;
Скачать: CL | DM;

Вниз

PHP и параметры строки   Найти похожие ветки 

 
dmk ©   (2009-04-28 06:16) [0]

Привет!
В HTML страничку помещен PHP-скрипт, который выводит ссылки для выбора категорий (Например: index.html/?category=3).
При первом запуске по умолчанию выбирается категория 1. Потом пользователь выбирает какую то категорию, например 3, но скрипт не видит параметры в строке. Т.е. я делаю так: $click = $_GET["category"],
но $click у меня всегда получается пустой, хотя в строке написано index.html/?category=3.
Подскажите как получить параметр?


 
dmk ©   (2009-04-28 06:29) [1]

Для уточнения: скрипт помещен в HTML-код как SSI.


 
palva ©   (2009-04-28 08:13) [2]

html страничка это то, что отправляется клиенту. Скрипт помещенный в нее не будет выполняться на сервере а отправляется клиенту. Для того, чтобы скрипт выполнялся на сервере, его URL нужно указать в атрибуте action формы. Именно этому скрипту передаются параметры формы. Если вы хотите включить в этот скрипт другой php-код, для которого должны быть доступны эти же параметры, включайте его при помощи команды php include, а не через SSI.


 
dmk ©   (2009-04-28 08:20) [3]

т.е. должен быть index.php, а не index.html? и весь HTML код выводить PHP средствами?


 
antonn ©   (2009-04-28 08:55) [4]

по умолчанию расширение html не обрабатывается php. Не я ли говорил уже про ЧПУ и htaccess в прошлой теме? :)


 
antonn ©   (2009-04-28 08:57) [5]

а, опять ssi...
а так пробывали? index.html?category=3


 
palva ©   (2009-04-28 09:00) [6]

Грубо говоря, да.
На самом деле может быть все что угодно, лишь бы это привело к работе серверного скрипта с передачей нужных параметров.
Например, файла index.html на сервере вообще может не быть. В этом случае сервер должен вернуть клиенту фиксированную страницу (ошибка 404) Имя этой страницы вы можете указать в .htaccess. Но если вы там укажете имя скрипта, который правильно обработает параметры и передаст клиенту нужный html-текст, то все будет в порядке.


 
palva ©   (2009-04-28 09:01) [7]

Это я отвечал на следующий вопрос:

> т.е. должен быть index.php, а не index.html? и весь HTML
> код выводить PHP средствами?


 
dmk ©   (2009-04-28 09:05) [8]

>Не я ли говорил уже про ЧПУ и htaccess в прошлой теме? :)
Скорее всего это был не я.

>а так пробывали? index.html?category=3
У меня именно так. В моем посте ошибка.


 
antonn ©   (2009-04-28 09:09) [9]


> Скорее всего это был не я.

ну да, я, но нема чья? )
http://delphimaster.net/view/15-1239829821/

значит вебсервером (точнее php) не "обрабатываются" html, отсюда отсутствие. На тестовом 11.php такие массивы есть?


 
dmk ©   (2009-04-28 09:19) [10]

antonn ©   (28.04.09 09:09) [9]

Прошу прощения. Точно я. :-)

Проблему я решил путем вызова самого скрипта и возвратом обратно.
Сейчас все работает, кроме одного сессий. Вернее на локальной машине
работает все ок, а у провайдера сессия инициализироваться не хочет.

Скачал тест сессий с php.net - у провайдера работает у меня нет.
Пишет Warning: session_start() [function.session-start]: open(/tmp\sess_li5cqiv7rcl3m9cftrf6jgdi37, O_RDWR) failed: No such file or directory (2) in D:\Dmk_server\test.php on line 9 Непонятно чего не хватает.


 
antonn ©   (2009-04-28 09:22) [11]

сервак на винде чтоли? в конфиге путь правильный нужно прописать


 
dmk ©   (2009-04-28 09:27) [12]

Спасибо. Прописал - работает. Только если куки выключить не работает.
А без них никак нельзя?


 
palva ©   (2009-04-28 09:27) [13]

Вам надо проверить установку session.save_path в php.ini
Только найдите у себя нужный php.ini их обычно накидано по компьютеру несколько, а используется один.


 
dmk ©   (2009-04-28 09:28) [14]

>сервак на винде чтоли?
Локальный на винде, а у провайдера FreeBSD.


 
dmk ©   (2009-04-28 09:32) [15]

Это у меня в конфиге
Может не так что-нибудь?

session.save_path = "c:/tmp"
session.use_cookies = 0
; session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor     = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = 0
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5


 
palva ©   (2009-04-28 09:44) [16]


> c:/tmp

Попробуйте использовать обратный слэш.

Чтобы изменения php.ini вступили в силу нужно перезапускать apache


 
palva ©   (2009-04-28 09:52) [17]

Директория c:\tmp должна быть создана и доступна для записи. У меня, например, нет такой директории. Может, у вас тоже?

Тот ли php.ini вы правите?


 
dmk ©   (2009-04-28 10:02) [18]

palva ©   (28.04.09 09:52) [17]

Да php.ini у меня только один.

В общем сессии работают только когда включены куки и то через раз.
Иногда не регистрируются. С чем связано не знаю.

Когда куки отключаешь - не работают. Сессии не регистрируются :-(
А как же тогда быть? Если пользователь их отключит?


 
palva ©   (2009-04-28 10:22) [19]

А причем здесь работает/не работает. Сначала нужно решить проблему с открытием файла. Сессионные переменные у вас всё равно сохраняться не будут.
Ошибка при открытии файла исчезла?

> С чем связано не знаю.

Это связано с
session.use_cookies = 0
session.use_trans_sid = 0
их надо установить в единицу. Читайте здесь: http://www.phpfaq.ru/sessions


 
dmk ©   (2009-04-28 16:00) [20]

>Ошибка при открытии файла исчезла?
Да, ошибка исчезла.

Вот тест который рекомендован на PHP.NET
У меня не работает. ID сессии выдает, но переменные в ней не сохраняются.

session_start();

$sessPath   = ini_get("session.save_path");
$sessCookie = ini_get("session.cookie_path");
$sessName   = ini_get("session.name");
$sessVar    = "foo";

echo "<br>sessPath: " . $sessPath;
echo "<br>sessCookie: " . $sessCookie;

echo "<hr>";

if( !isset( $_GET["p"] ) ){
   // instantiate new session var
   $_SESSION[$sessVar] = "hello world";
}else{
   if( $_GET["p"] == 1 ){

       // printing session value and global cookie PHPSESSID
       echo $sessVar . ": ";
       if( isset( $_SESSION[$sessVar] ) ){
           echo $_SESSION[$sessVar];
       }else{
           echo "[not exists]";
       }

       echo "<br>" . $sessName . ": ";

       if( isset( $_COOKIE[$sessName] ) ){
       echo $_COOKIE[$sessName];
       }else{
           if( isset( $_REQUEST[$sessName] ) ){
           echo $_REQUEST[$sessName];
           }else{
               if( isset( $_SERVER["HTTP_COOKIE"] ) ){
               echo $_SERVER["HTTP_COOKIE"];
               }else{
               echo "problem, check your PHP settings";
               }
           }
       }

   }else{

       // destroy session by unset() function
       unset( $_SESSION[$sessVar] );

       // check if was destroyed
       if( !isset( $_SESSION[$sessVar] ) ){
           echo "<br>";
           echo $sessName . " was "unseted"";
       }else{
           echo "<br>";
           echo $sessName . " was not "unseted"";
       }

   }
}


 
dmk ©   (2009-04-28 16:06) [21]

ну и соответственно HTML

<a href=test.php?p=1>test 1 (printing session value)</a><br>
<a href=test.php?p=2>test 2 (kill session)</a>


 
palva ©   (2009-04-28 17:18) [22]

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


 
dmk ©   (2009-04-28 17:47) [23]

Даже не знаю, что и сказать. Когда я запускаю в первый раз, то
этот скрипт пишет problem, check your PHP settings.

Если обновить страницу, то в темпе появляется файл,
но переменной в нем нет.

У провайдера работает.

Проблема где-то у меня, но как ее обнаружить я не знаю.
А не мог бы я получить Ваш php.ini? Не знаю только, подойдет?
У меня PHP 5.2.1


 
dmk ©   (2009-04-28 19:21) [24]

Нашел проблему. Функция, которая использовала переменные сессии
была в конфигурационном файле, который был включен так:

require_once("eg_config.php");

переделал на require и все заработало!!! :-)

Спасибо за помощь!


 
dmk ©   (2009-04-28 19:27) [25]

Кроме того в php.ini значение session.auto_start = 0 !!!
Поэтому если сделать так, и вставить в первый попавшийся
php-код, то работает без вопросов.


$session_name = "PHPSESSID";
$session_started = session_is_registered($session_name);
if (!$session_started)
  {
   session_register($session_name);
   session_start();
  };


 
antonn ©   (2009-04-28 22:30) [26]

а мне вообще сессии не нравятся, не стабильно как то :)


 
dmk ©   (2009-04-28 23:32) [27]

antonn ©   (28.04.09 22:30) [26]

Мне тоже не нравятся. Действительно не стабильно.
А как Вы делаете параметры уникальными?


 
antonn ©   (2009-04-28 23:37) [28]

как я уже говорил, я юзаю обычные скрипты без всяких ssi, где в get передаю категорию и id картинки, вообще всю информацию по отображению стараюсь узнавать из GET, все это работает без всяких куков, доступно для индексации поисковиками и удобным обменом ссылками :)


 
antonn ©   (2009-04-28 23:56) [29]

а почему вообще вся идея с этим ssi или что там появилась?
ну для примера, моя "галерея": http://desksoft.ru/index.php?pictures&id=5&owner=3
в параметрах передается владелец, сама галерея (и там на странице id картинки), работает без каких то куков и записей в сессию.
Код я уже приводил:
if(isset($_GET["cat"]) && isnum($_GET["cat"])){
//рисуем ссылки с категорией cat
//echo "<a href=\"index.php?galery&cat=".$_GET["cat"]."\">url</a>";
}else{
//рисуем просто ссылки
//echo "<a href=\"index.php?galery\">url</a>";
}


 
dmk ©   (2009-04-29 10:40) [30]

>а почему вообще вся идея с этим ssi или что там появилась?

У меня опыта в програмировании WEB 0 целых 1 десятая из ста :-)
Поэтому я просто не знаю как делать. В моем распоряжении есть только
лицензионный Dreamweaver CS3. Есть еще Delphi for PHP, но чисто для
изучения. В общем я ограничен возможностями Дрима и своими скудными
знаниями. Вот и все.

Дело в том, что я дизайнер и сделав дизайн я должен написать именно
под свой дизайн и никак иначе. Соответственно у меня есть таблица
и место в ней и кроме SSI ничего в голову не приходит. А делать
дизайн средствами PHP, а не например Дрим + HTML – это неудобно.
Хотя думаю, что чего то не знаю. Насовав скриптов в дизайн я теперь
пытаюсь их связать. В итоге вчера связал, но работает нестабильно.
В куках иногда ничего не сохраняется. Редко, но бывает.


 
dmk ©   (2009-04-29 10:55) [31]

А по поводу моего приключения могу сказать следующее. Вчера нашел
на сайте разработчиков именно свою проблему: один в один.
С версии 4 качует и до сих пор не исправили.
Называется "breaks sessions handling".
http://aspn.activestate.com/ASPN/Mail/Message/php-Dev/1290276


 
dmk ©   (2009-04-29 11:28) [32]

Я вот думаю сделать такую связку:
Ссылки рисуются через скрипты PHP. При нажатии вызываю javascript
который читает выбранную ссылку и параметры и передает значения
PHP-скрипту, который обновляет активную ссылку.
Такой вариант лучше?


 
dmk ©   (2009-04-29 19:51) [33]

Ну ничего не получается... епрст...

Неужели никак нельзя сохранить один байт на стороне клиента без куков?
Скрытые поля и все такое, только без SUBMIT!!!

Помогите плз.


 
palva ©   (2009-04-29 20:06) [34]

Вопрос не понятен. Один байт он где находится? в переменной Javascript? Его нужно сохранить на диске клиента? В виде однобайтового файла? Для интернет страницы это криминал - сохранять что-либо у клиента помимо механизма кэша и куков.


 
dmk ©   (2009-04-29 20:22) [35]

У меня есть список. В нем поля со значениями read.php?category=1...20
20 ссылок. Скрипт вставлен как SSI в HTML-страницу.
Соответственно он рисует эти ссылки. Ссылки берутся из базы, поэтому нужен PHP.
Нужно как то реагировать на клики по ссылкам, причем страница должна
обновляться, но переходить по ссылке к PHP-скрипту. Состояние, т.е.
выбранную ссылку нужно сохранять. Куда ее сохранять? Куки не подходят.
Работают нестабильно.
У меня получилось передавать через JS в hidden-поле, а как считать теперь
значение из PHP?
Если нельзя, то как лучше изменить механизм определения на какую
ссылку кликнули? Как по ссылке сделать сабмит.
В общем ничего не работает.
Вариант внедрения огромного HTML-кода в PHP-скрипт не подходит.
Потом исправлять будет тяжело.


 
dmk ©   (2009-04-29 20:23) [36]

>но переходить по ссылке к PHP-скрипту
но НЕ переходить по ссылке к PHP-скрипту в новом окне.


 
dmk ©   (2009-04-29 20:24) [37]

Если на PHP никак, то как передать в JS список из имен файлов, чтобы делать это на машине клиента?


 
dmk ©   (2009-04-29 20:37) [38]

Даже так – упрощу:

есть ссылка со значением 1, щелкаю по другой со значением 2
страница перегружается, но php-скрипт должен узнать,
что щелкнули на 2 ссылке.

Когда он в SSI, то не видит SUBMIT и соответственно параметров
которые ему передали. Где можно сохранить значение "2", чтобы
при перезагрузке страницы, скрипт понял, что щелкнули по ссылке №2.

Запись в файл - не годится (проблема совместного доступа).
Куки не работают должным образом (иногда не сохраняют переменные в файл)
php-скрипт находящийся в SSI не может принимать параметры строки через $_GET.

Вот и проблема.


 
palva ©   (2009-04-29 21:26) [39]

Блин, вроде все слова знакомые, но не понимаю ничего... Кроме последнего предложения.


 
antonn ©   (2009-04-29 22:36) [40]


> А делать
> дизайн средствами PHP, а не например Дрим + HTML – это неудобно.
>

вот отсюда начнутся недопонимания :)
На ПХП не делают дизайн, дизайн верстают в ХТМЛ (макромедии, картинкой в пайнте и тп), а вот сам хтмл - результат работы ХТМЛ. Честно не знаю, как нужно начинающим начинать, сам диз (хтмл) я тренировался делать в блокноте для narod.ru, ну и на пхп перешел с тем же блокнотом, для меня это проще.

По поводу ссылок и их формирования, вот пример, об чем я говорил:
<?
function isNum($value) {
return (preg_match("/^[0-9]+$/", $value));
}

$arr=array();
$arr["1"]["name"]="gal1";
$arr["1"]["0"]="pic0.jpeg";
$arr["1"]["1"]="pic0.png";
$arr["1"]["2"]="pic0.bmp";

$arr["2"]["name"]="gal2";
$arr["2"]["0"]="pic1.jpeg";
$arr["2"]["1"]="pic1.png";
$arr["2"]["2"]="pic1.bmp";

$arr["3"]["name"]="gal3";
$arr["3"]["0"]="pic2.jpeg";
$arr["3"]["1"]="pic2.png";
$arr["3"]["2"]="pic2.bmp";

if(isset($_GET["cat"]) && isNum($_GET["cat"]) && isset($_GET["pic_id"]) && isNum($_GET["pic_id"])){

 if($_GET["cat"]>0 && $_GET["cat"]<4){
  if($_GET["pic_id"]>=0 && $_GET["pic_id"]<3){
   echo "picture: ".$arr[$_GET["cat"]][$_GET["pic_id"]];
  }
 }

}elseif(isset($_GET["cat"]) && isNum($_GET["cat"])){

 if($_GET["cat"]>0 && $_GET["cat"]<4){
  for($i=0; $i<3; $i++){
   echo "<a href=\"?cat=".$_GET["cat"]."&pic_id=".($i)."\">".$arr[$_GET["cat"]][$i]."</a><br>";
  }
 }

}else{
 for($i=0; $i<count($arr); $i++){
  echo "<a href=\"?cat=".($i+1)."\">".$arr[($i+1)]["name"]."</a><br>";
 }
}

?>


а то что делается с записью в сессию, да еще через куки - это костыль. И язык и хтмл придется учить, иначе ничего хорощего (в плане дизайна и кода) врядли получится.

PS Дримвивер - зло, в принципе :)
PSS А еще придется разбираться с вебсервером (апач или iis, с первым ессно придется столкнуться с юнихом) и его настройкой, потом базы (я бы даже сказал это отдельный "абзац" :)), да и в самом пхп будут встречаться довольно мозгоимеющие вещи (регулярки, например :)). Итого, для написания сайтика придется узнать сразу дофига всего нового :(



Страницы: 1 2 вся ветка

Текущий архив: 2009.07.05;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.011 c
2-1242655529
@!!ex
2009-05-18 18:05
2009.07.05
Помогите перевести на С++.


15-1240833219
Nic
2009-04-27 15:53
2009.07.05
Влияние объёма контента на посещаемость


15-1241622164
Step
2009-05-06 19:02
2009.07.05
Скрыть главную форму


2-1242548602
Чипырик
2009-05-17 12:23
2009.07.05
Вопрос по WordApplication


2-1242628077
Игорь
2009-05-18 10:27
2009.07.05
Как правильно передать PChar из DLL