PDA

Просмотр полной версии : PHP скрипт в HTML


dmk777
29.04.2009, 17:40
Привет! Есть такая проблема:

В HTML страничку вставлен PHP-скрипт как SSI. Его задача выводить список ссылок на самого себя, т.е. выбор категорий с помощью GET.
script.php?category=3

Но после вывода он должен вернуться на страницу которая его вызывала,
т.е. index.html, что не происходит. А если вызывать из Javascript, то PHP не получает параметры, т.е. GET пустой.

В общем нужно, чтобы PHP скрипт выполнялся, строил ссылки, но при нажатии на сылку не было перехода на другую страницу, а просто менялась картинка в соответствии с выбранной сылкой.

Если все делать или на PHP или JS+HTML - работает, но PHP нужен для выборки изображений из базы. У меня связка HTML+PHP не работает.

Вот код:
require("eg_config.php");//Настройки сервера

$selected = 1;

$click = $_GET['category'];//В параметре выбор по клику
if ($click == 0)
{
echo "Параметра нет!";
}
else
{
echo "Категория №".$click;
$selected = $click;
};

$call_page = "index.html";
$self_page = "eg_category_load.php";

$num_records = GetCategoryCount();
ob_start();//Начинаем кэшировать страницу
echo "<span class=\"neg_small_cyan_u\">";//Используем свой стиль для вывода ссылок
for ($i = 0; $i < $num_records; $i++)
{
$rec = ReadCategoryRec($i);//Читаем запись
$data_id = $i + 1;//Индекс категории начинается с единицы
$data_str = rtrim($rec["name"]);//Название категории
if ($i == ($selected - 1)) { $sel = "›"; } else { $sel = ""; };
echo "<a href=/".$self_page."?category=$data_id".">".$data_str." </a> ".$sel.$br;//Выводим ссылки на запрос по категориям
//echo "<a href=\"javascript:void(0)\" onClick=\"ChangeRef('".$data_id."')\">".$data_str."</a>".$sel.$br;
};//for
echo "</span>";
header("Location: $call_page");
ob_end_flush();

Добавлено через 11 минут
Переменная должна хранится на стороне пользователя, только не в куках!

artem_fs
29.04.2009, 18:42
так на html+php и не будет (никак) работать в таком виде, чтобы страница заново вся не подгружалась.
надо такой связкой делать - html+js+php
адрес будет script.php#category=3
с помощью jquery например хватаете эту переменную, и подгружаете php скрипт, который будет выдавать нужную картинку

dmk777
29.04.2009, 20:41
Неужели никак нельзя передать 1 единственное значение?
Через скрытое поле или еще как? В HTML ничего для этого не предусмотрено?
Или обязательно нужен SUBMIT?

Добавлено через 3 часа 50 минут
Это test.html

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
Hello world - PHP include next<BR>
<!--#include virtual="test.php" -->//Никаких параметров не передается
<BR>
that was the PHP include output
<BR>Now include php with a fixed parameter ...<BR>
<!--#include virtual="test.php?a=1" -->//Передается параметр a=1
</script>
</body>
</html>

и test.php

<?php
$a=htmlspecialchars($_REQUEST['a']);
echo "value of parameter a=".$a;
?>



Когда задаешь параметр в теле HTML, то все прекрасно.
Параметры через SSI передаются нормально.
Вот теперь как средствами HTML заменить строку
<!--#include virtual="test.php?a=1" -->
на
<!--#include virtual="test.php?a=2" --> и т.д.

Через JS не выходит. Apache не понимает внутри поля <script> ничего.
Поэтому формирование строчки

sURL = "test.php?a="+index;
s = "<"+"!"+"--"+"#"+"include virtual="+sURL+" -->";
document.write(s);

что в итоге дает правильную строку, но не дает включение PHP-файла.

Добавлено через 3 часа 50 минут
Sorry

Это test.html

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
Hello world - PHP include next<BR>
<!--#include virtual="test.php" -->//Никаких параметров не передается
<BR>
that was the PHP include output
<BR>Now include php with a fixed parameter ...<BR>
<!--#include virtual="test.php?a=1" -->//Передается параметр a=1
</script>
</body>
</html>

и test.php

<?php
$a=htmlspecialchars($_REQUEST['a']);
echo "value of parameter a=".$a;
?>



Когда задаешь параметр в теле HTML, то все прекрасно.
Параметры через SSI передаются нормально.
Вот теперь как средствами HTML заменить строку
<!--#include virtual="test.php?a=1" -->
на
<!--#include virtual="test.php?a=2" --> и т.д.

Через JS не выходит. Apache не понимает внутри поля <script> ничего.
Поэтому формирование строчки

sURL = "test.php?a="+index;
s = "<"+"!"+"--"+"#"+"include virtual="+sURL+" -->";
document.write(s);

что в итоге дает правильную строку, но не дает включение PHP-файла.

duhowka
30.04.2009, 23:13
или я че-то не понимаю, но почему в php файле нельзя юзать html?
например, так файл test.php
<html><h1> это хтмл</h1>
<?php print "это php"; ?>
в одном файле сразу

dmk777
08.05.2009, 11:42
Усе! сделал через JS<->PHP. Работает раза в 3-4 быстрее и ссылки не видно в строке.

2duhowka
Много всего наверстано в дриме. Поэтому нужны только внешние PHP.
А так я просто с SSI разбирался. Кстати передать параметры через SSI
возможно. Только неудобно.

duhowka
09.05.2009, 17:55
зачем SSI я так и не понял.
имхо если есть php, то проще использовать require или include.
Я использовал ssi, когда еще только был "perl", но у заказчика иной раз был хостинг без него приходилось делать все на html, а при использовании SSI - shtml и даже получалось сделать некую динамичность. =)
параметры передать можно, но страница при этом перезагружается.

dmk777
09.05.2009, 18:54
>но страница при этом перезагружается
Вот отсюда и все проблемы =)

Хочется динамики + без перегрузки страниц.
В общем сочетание PHP и JS, на мой взгляд позволяет делать все,
что душе угодно.

А SSI мне попалось потому, что до нее я не знал как выделить
область под действие PHP-скрипта. Т.е. выводить кучу верстки
средствами PHP - нудно и долго, т.к. объем HTML-кода большой.
Вот и химичил с SSI. Зато понял, что "клиент" мертв :-)

Теперь я сделал так: JS делает запрос PHP-скрипту,
PHP-скрипт передает массив данных в JS,
а JS на основе данных обновляет нужные элементы.
Вроде так нормально?

duhowka
10.05.2009, 06:21
Теперь я сделал так: JS делает запрос PHP-скрипту,
PHP-скрипт передает массив данных в JS,
а JS на основе данных обновляет нужные элементы.

формулировки не совсем верны, но мне показалось, что я понял, что вы хотели сказать.
js+php+mysql очень сильная связка.
Мне кажется, что последнее время стал популярен и актуален Ajax (как считают некоторые благодаря гуглу), а если упростить, то по сути это "асинхронный" JavaScript и XML. используя его можно изменить "изображение" страницы, не перезагружая её. имхо стоит обратить на него внимание.