Форум: "Прочее";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.005 c