из PHP4 в PHP5

Статус
Закрыто для дальнейших ответов.

Smoke

Member
Регистрация
05.09.2006
Сообщения
13
Всем привет!
Помогите пожалуйста перевести кусок кода из PHP4 в PHP5.

Код:
----code html----

<?php
if ($pg=="") { 
include ("pg/my.php");
}
else {
include ("pg/$pg.php");
}
?>

----code html----

<a href="/?pg=silka">Ссылка</a>
При таком коде на PHP5 не срабатывает ссылка.
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
ОТКЛЮЧЕНЫ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ, С ТАКИМ КОДИНГОМ ЛУЧШЕ УБИТЬСЯ ОБ СТЕНУ!!!!
Код:
<?php
$array_var=array("dir_1","dir_2");
$inc = "pg/".((!empty($_GET['pg'])&& in_array($_GET['pg'],$array_var))?$_GET['pg']:"my").".php";
include($inc);
как то так
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Medwoodu, я убит... Твой код понятен, но я думаю неудобен... :D

А чем вам switch не угодил?
Код:
switch ($_GET['pg'])
{
  case "silka":
  $page = "silka";
  break;

  case "...":
  $page = "page2";
  break;

  default: // когда значение не совпало или не передано
  $page = "my";
}

include $page.".php";
Это конечно не совершенство, но для такой задачи самое-то :D
И защититьсмя ещё как можно от левых данных.

А ваш код можно сломать за пару секунд
 

Smoke

Member
Регистрация
05.09.2006
Сообщения
13
Alex при таком коде не срабатывает ссылка

<a href="/?pg=silka">Ссылка</a>

Как это можно исправить?
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Medwoodu, я убит... Твой код понятен, но я думаю неудобен... :D
ну я бы сказал наоборот, он может быть непонятен но удобен, т.к. добавить в массив сколько нужно значений проще чем дописывать обработку кодом. Я кстати промолчу об неучтенном эксцепшине, если гет не определен :)
smoke, сделайте вместо include print и проверьте что у вас выводится
 

Smoke

Member
Регистрация
05.09.2006
Сообщения
13
Вот что получилось

Код:
<?php

switch($_GET['pg'])  {

case 'link':
	include ("pg/".$_GET['pg'].".php");
break;

case 'link':
	include ("pg/".$_GET['pg'].".php");
break;

case 'link':
	include ("pg/".$_GET['pg'].".php");
break;

case 'link':
	include ("pg/".$_GET['pg'].".php");
break;

	default:
		include ('pg/my.php');
}
?>
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Medwoodu, там всё учтено! Если не определена переменная $_GET, то выполнится default

smoke, вы сначала прочитайте, что такое опретарор switch(выбор), а потом эксперементируйте
Код:
<?php

switch($_GET['pg'])  {

case 'silka':
	include ("pg/".$_GET['pg'].".php");
break;

default:
	include ('pg/my.php');
}
?>
Всё работает, надо просто подумать чуть-чуть... И вообще этот вариант удобен тем, что можно в GET передавать одно, а в подключение отдавать другое имя, чтобы не палить файлы...

Хотя есть возможность, как на IPB, запихиваем в конфиг определение константы, а во всех файлах, кроме главного проверяем константу на определение, если что exit
 

Smoke

Member
Регистрация
05.09.2006
Сообщения
13
Привет! Еще один вопрос:

На php5 не работает скрипт, помогите найти причину!

Код:
<?
include("meta_conf.php"); //Имеется файл с параметрами ($author; $keyworlds)

if ($update == "")
 {
?>

<?
echo "
<form action='?adm=meta_teg ' method=post>
<br>Авторский состав:</font><input type=text name=author_ value=\"$author\" size=33>
<br>Ключевые слова:</font><input type=text name=keyworlds_ value=\"$keyworlds\" size=33>
name=meta_sitename_ value=\"$meta_sitename\" size=33>
<br><input type=submit name=action value=\"Обновить/Применить\"><br>
";
}

if ($action == "Обновить/Применить")
 {
  $a_update_config  = "<?\n";
  $a_update_config .= "\$author = \"$author_\";\n";
  $a_update_config .= "\$keyworlds = \"$keyworlds_\";\n";

  $a_update_config .= "?>";

  $u_update_config = fopen("meta_conf.php","w+");
  $a_update_config = ereg_replace("\\\'","&quot;",$a_update_config);
  $a_update_config = ereg_replace('\\\"','&quot;',$a_update_config);
  $a_update_config = str_replace('&lt;',"<",$a_update_config);
  $a_update_config = str_replace('&gt;',">",$a_update_config);
  fputs ($u_update_config,$a_update_config);
  $update = "okey";
 }

if ($update == "okey")
 {
echo "
<br><b>Параметры успешно обновленны нажмите на разделе с настройкой <a href=meta_teg>Нажмите СЮДА</a></b>";
}
?>
Смысл кода, в том, что имеется файл meta_conf.php в котом есть параметры $author и $keyworlds. Через форму они должны заменяться.
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Ща буду ругаться.
Medwoodu, там всё учтено! Если не определена переменная $_GET, то выполнится default
Код:
<b>Notice</b>:  Undefined index:  pg in <b>PHPDocument2</b> on line <b>1</b>
- это я выдумал :)
учите, молодой человек, матчасть и правильное составление кода, и поверьте , что в любых ваших скриптах я могу разобраться без проблем и посмотреть что учтено а что нет, так же как и многие из здесь присутствующих.

А на грабли с вашей кодогенерецией наступить элементарно: если на сервере, где отладка включен вывод всех ошибок, то те же сессии, если их обработка идет после notice работать не будут, в итоге к чертям летит весь скрипт.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Описывайте вашу проблему чётче... Слова, код не работает, нам не о чём не говорят, может код и рабочий, да прав на файл не хватает!
Если файл на хостинге, поставьте права 755.
Если что-то другое, опишите суть проблемы!

[OFFTOP]
Ща буду ругаться.
Не надо... Уже и сам всё проверил! Вы правы!
учите, молодой человек, матчасть и правильное составление кода, и поверьте , что в любых ваших скриптах я могу разобраться без проблем и посмотреть что учтено а что нет, так же как и многие из здесь присутствующих.
Помоему, я не начинал спор насчёт разборчивости и не разборчивости... И не отрицаю, что вы поймёте мой код, я и не пишу замудрено, хотя могу! Кстати, ваш код я тоже всегда пойму и осмыслю, поэтому не надо катить на меня! Закончим этот бессмысленный спор!
А на грабли с вашей кодогенерецией наступить элементарно: если на сервере, где отладка включен вывод всех ошибок, то те же сессии, если их обработка идет после notice работать не будут, в итоге к чертям летит весь скрипт.
Спасибо! Но я это знал!

[/OFFTOP]
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Заканчиваем :) последних пару камушков:
>Medwoodu, там всё учтено! Если не определена переменная $_GET, то выполнится default
>Помоему, я не начинал спор насчёт разборчивости и не разборчивости
;) если бы это держали в голове, то не ошибались бы :) а приведенный мной код, вам понятный, удобен в плане: a) расширяемости(не надо дописывать условия и чтобы поменять путь достаточно его исправить в одном месте) b) в плане интеграции, т.к. данный массив можно брать хотя бы даже из базы.
 

koldun919

Новичок
Регистрация
22.05.2008
Сообщения
1
где найти теорию кдиплому по php
 
Статус
Закрыто для дальнейших ответов.
Верх Низ