Версия для печати темы
Форум о web-дизайне, графике - RusForumz _ Web-программирование: PHP _ из Php4 в Php5
Автор: Smoke 6.5.2008, 16:01
Всем привет!
Помогите пожалуйста перевести кусок кода из PHP4 в PHP5.
Код
----code html----
<?php
if ($pg=="") {
include ("pg/my.php");
}
else {
include ("pg/$pg.php");
}
?>
----code html----
<a href="/?pg=silka">Ссылка</a>
При таком коде на PHP5 не срабатывает ссылка.
Автор: liw 6.5.2008, 17:01
а с чего вы взяли что дело в версии PHP ?
просто у вас в PHP5
REGISTER_GLOBALS = Off
обращатся надо так $_GET['pg'] а не просто $pg или включить REGISTER_GLOBALS/
хотя просто так использовать то что пришло в URL, ничего не проверяя, я вам как бы сказать.. , -
не советую.
Автор: SteAlzzer 6.5.2008, 17:04
Код
----code html----
<?php
if ($pg=="") {
include ("pg/my.php");
}
else {
include ("pg/$pg.php");
}
?>
----code html----
<a href="?pg=silka">Ссылка</a>
Просто знак / мешает нормальному сробатыванию ссылки. Ток не думай, что это и есть перевоплощение PHP4 в PHP5. То, что ты его убираешь, не имеет ничего общего с языком PHP, ибо PHP у тебя заканчивается на " ?> "
И, если не ошибаюсь, в 8 строчке знак $ не нужен и будет катигорически всему мешать. Ну или будет все путем, если в папке pg есть файл с именем $pg.php, что, как я понимаю, маловероятно))
Автор: liw 6.5.2008, 17:05
Да, а теперь ждём автора что бы понять что значили слова:
Цитата
При таком коде на PHP5 не срабатывает ссылка.
Цитата
И, если не ошибаюсь, в 8 строчке знак $ не нужен и будет катигорически всему мешать. Ну или будет все путем, если в папке pg есть файл с именем $pg.php, что, как я понимаю, маловероятно))
Ну почему же, - там же двойные кавычки.
Автор: SteAlzzer 6.5.2008, 17:06
Ну или в первом я ошибаюсь... Но что-либо должно сработать.
К томуже, эту операцию можно сделать качественно через case, а не через if-else
Автор: liw 6.5.2008, 17:07
Цитата(SteAlzzer @ 6.5.2008, 18:06)

Ну или в первом я ошибаюсь... Но что-либо должно сработать.
Как раз во втором)
Автор: SteAlzzer 6.5.2008, 17:13
Растолкуй, пожалуйста, почему бует правильно постановка $ перед именем файла? Я просто не такой уж и большой опыт имею в том или ином языке програмирования, начал с PHP, да и не все еще понимаю.
Но, насколько далеки мои догадки, то винда не разрешает использование знака $ в имени файла - раз.
Если стоит $, значит последующее название есть ни что иное, как переменная. Но в этой строчке... Ну язык не поймет нужную переменную, так как она ничем не выделена. Тобишь, получается переменная $pg.php. Насколько понимаю, переменные так не задаются, да и в путях они наврядтли присутствуют - два.
Мои аспекты ошибочны?
Автор: liw 6.5.2008, 17:22
Так как двойные кавычки то php воспринимает конструкцию $pg как переменную а не как строку,
даже не смотря на то что перед ней / а после точка (.) => /$pg.
Если включена директива REGISTR_GLOBALS то все данные которые приходя из URL (GET) или POST (поля форм например) становятся переменными.
То есть:
если перейти на страницу index.php?pg=value то мы в скрипте получим переменную $pg значение которой будет 'value'.
Вот у автора так и сделано что то типа если URL вида index.php?pg=registration то в срипте подключается файл registration.php из папки pg/ только при влключенной REGISTER_GLOBALS
Ну да конечно там если файла не будет то будет ошибка и т.д. и т.п.
Вот я и написал чтоб использовал если так уж хочется
include ("pg/".$_GET['pg'].".php");
ну и проверять тоже надо конечно там if($_GET['pg']=="") ... < - это если как у автора.
Вот.
Автор: SteAlzzer 6.5.2008, 17:54
Хм... Спасибо. На досуге как-нить поэксперементирую...
Автор: Smoke 7.5.2008, 6:27
Всем спасибо, особенно liw! Я разобрался в своей ошибке.
А как бы теперь его организовать через case?
Автор: SteAlzzer 7.5.2008, 13:50
Код
<?
switch($_GET['pg']) {
case 'ssilka': //если ссылка содержит ?pg=ssilka
include('pg/$pg.php');
break;
/*case 'sth':
что-либо выполняется;
*/
default: //Если pg=ничему или тупо ее нет
include ('pg/my.php'); //то инклюдитья обычная страница
}
?>
Пожалуйста.
Только чисто совет: испльзуй нормальные названия ссылок, старайся избегать транслит и использовать слова на английском или сокращения. Например, здесь бы заменил ssilka на link))
Автор: Smoke 7.5.2008, 15:22
Вот что получилось
<?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');
}
?>
Автор: liw 7.5.2008, 15:57
какой смысл обращатся к массиву постоянно ?
switch($_GET['pg']) {
case 'link':
include ("pg/".$_GET['pg'].".php");
break;
}
то есть если case 'link' то и писать уже бы include ("pg/link.php");
ну это так к слову, я не настаиваю. )
а вообще проще так тогда уже:
$links = array('registration','about','blablabla'); //сюда добавляете файлы которые могут быть подлючены
include_once('pg/'.(in_array(@strval($_GET['pg']),$links)?$_GET['pg']:'my').'.php'));
а ещё посмотрите в FAQ в этом разделе.
и последнее: тема про case уже есть на форуме, сначало пользовались бы поиском..
Автор: Smoke 18.5.2008, 20:55
Привет! Еще один вопрос:
На 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("\\\'",""",$a_update_config);
$a_update_config = ereg_replace('\\\"','"',$a_update_config);
$a_update_config = str_replace('<',"<",$a_update_config);
$a_update_config = str_replace('>',">",$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. Через форму они должны заменяться.
Автор: liw 19.5.2008, 13:59
Что значит не работает?
Выше сто раз сказали что дело не в версии php.
Автор: SteAlzzer 19.5.2008, 19:47
liw, позволь я сам найду ошибку, чисто для повышения практики, а ты скажешь, прав я или нет)) Просто чутук попозже, через минут 15-20.
Smoke, а че пишет, когда откурываешь страницу?
Автор: Smoke 19.5.2008, 20:35
Цитата(liw @ 19.5.2008, 14:59)

Что значит не работает?
Выше сто раз сказали что дело не в версии php.
Да я понимаю, что дело не в версии. Просто в php4 он работает, а в php5 нет. Поэтому я и уточняю, что мне надо для php5.
Цитата(SteAlzzer @ 19.5.2008, 20:47)

liw, позволь я сам найду ошибку, чисто для повышения практики, а ты скажешь, прав я или нет)) Просто чутук попозже, через минут 15-20.
Smoke, а че пишет, когда откурываешь страницу?
Страница просто перезагружается, и параметры $author и $keyworlds остаются неизменными.
Автор: SteAlzzer 19.5.2008, 20:50
Если так говорить, то ты их просто не получаешь)))
Используй $peremennaya = $_POST[" "]; )))
А так, не понимаю смысл многих строчек...
Цитата
<?
include("meta_conf.php"); //Имеется файл с параметрами ($author; $keyworlds)
if ($update == "")
{
?>
Здесь чего-нибудь есть, или так и идет по коду?
<?
echo "
<form action='?adm=meta_teg ' method=post> liw, а здесь можно указывать такой файл в атрибуте action?
<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> а тег Form разве не требует закрытия?
";
}
if ($action == "Обновить/Применить")
{
$a_update_config = "<?\n";
$a_update_config .= "\$author = \"$author_\";\n"; Следующие три строчки вообще не понял) Зачем перед знаком присваивания стоит точка? Че за переменная, например, $author_ ? И че так все криво написано?
$a_update_config .= "\$keyworlds = \"$keyworlds_\";\n";
$a_update_config .= "?>";
$u_update_config = fopen("meta_conf.php","w+");
$a_update_config = ereg_replace("\\\'",""",$a_update_config); А че тут заменяется?
$a_update_config = ereg_replace('\\\"','"',$a_update_config);
$a_update_config = str_replace('<',"<",$a_update_config);
$a_update_config = str_replace('>',">",$a_update_config);
fputs ($u_update_config,$a_update_config);
$update = "okey";
А файл не надо закрывать?
}
if ($update == "okey")
{
echo "
<br><b>Параметры успешно обновленны нажмите на разделе с настройкой <a href=meta_teg>Нажмите СЮДА</a></b>"; А куда эта ссылка ведет? Разве он определит, что это за файл, не имея представления о его раширешении?
}
?>
Надеюсь, мне кто-нибудь ответит тупому на мои вопросы))))
Автор: SteAlzzer 20.5.2008, 14:10
Ну и где то сообщение, которое я так усердно писал, а мне высвеилась табличка "Ждите проверки и утвержения модератором"?
Автор: liw 20.5.2008, 16:03
Цитата
<form action='?adm=meta_teg ' method=post> liw, а здесь можно указывать такой файл в атрибуте action?
Да, - указывать можно, просто тот же файл и параметры.
Автор: SteAlzzer 20.5.2008, 18:20
ну, liw, вообще-то последующие красные вопросы тоже тебе адресовывались))))
Автор: liw 20.5.2008, 18:39
Цитата
?>
Здесь чего-нибудь есть, или так и идет по коду?
<?
Да какая разница, может у автора что то было, потом удалил не суть...
Цитата
<br><input type=submit name=action value=\"Обновить/Применить\"><br> а тег Form разве не требует закрытия?
Ну а что тут отвечать. Конечно закрыть надо.
Цитата
$a_update_config = "<?\n";
$a_update_config .= "\$author = \"$author_\";\n"; Следующие три строчки вообще не понял) Зачем перед знаком присваивания стоит точка? Че за переменная, например, $author_ ? И че так все криво написано?
$a_update_config .= "\$keyworlds = \"$keyworlds_\";\n";
$a_update_config .= "?>";
Автор как бы записывает файл c php скриптом.
Поэтому вначале и в конце файла открывающий и закрывающий тег. <? ?>
Если включена register_globals то после отправки формы будет переменная $author_ , так как
name=author_ <- смотри форму
.= <- мануал смотри, что это значит. )
НУ можно было писать
$a_update_config .= '$author = "'.$author_.'";\n';
вместо:
$a_update_config .= "\$author = \"$author_\";\n";
но это уже личное дело автора.
Цитата
$a_update_config = ereg_replace("\\\'",""",$a_update_config); А че тут заменяется?
$a_update_config = ereg_replace('\\\"','"',$a_update_config);
В первой строке заменяется слеш и одиночная кавычка на ... вот тут ошибка синтаксиса, и странно что автор ни чего про неё ни сказал, так как там три двойных кавычки.
Уж не знаю на что там нужно ему заменять, но написано не верно.
Во второй строке видимо вместо '\\\"' должно быть "\\\"" автор наверное не очень понимает различия в двойных и одинарных кавычках.
Следующие две строки:
$a_update_config = str_replace('<',"<",$a_update_config);
$a_update_config = str_replace('>',">",$a_update_config);
Бессмысленны в принципе.
Тут вообще ждём автора, - может он прокомментирует чего он хотел добится в этих 4-х строках.
Цитата
fputs ($u_update_config,$a_update_config);
$update = "okey";
А файл не надо закрывать?
}
Не обзательно, если мне не изменяет склероз..
Цитата
<br><b>Параметры успешно обновленны нажмите на разделе с настройкой <a href=meta_teg>Нажмите СЮДА</a></b>"; А куда эта ссылка ведет? Разве он определит, что это за файл, не имея представления о его раширешении?
Да я тоже незнаю куда эта ссылка. )
Автор: SteAlzzer 20.5.2008, 19:04
спасибо тебе огромное, liw, +1 к репутации и само собой большое уважение)))
Почти все понял)))
А вот тут вот есть недочет отображения форума:
Там, где замена < на < - это ошибка не афтора. Посмотри исходник на предидущей странице, там идет код сиего символа. Правда, не врублюсь, зачем)))
А, кстати, а все жеж ненадо добавлять функцию по принятию формы? ( $_POST; ). Иначе как получаем данные?
Автор: liw 20.5.2008, 19:10
Цитата(SteAlzzer @ 20.5.2008, 20:04)

Там, где замена < на < - это ошибка не афтора. Посмотри исходник на предидущей странице, там идет код сиего символа. Правда, не врублюсь, зачем)))
Да не обратил внимания. Точно, просто там был тег code и видимо там отображает как есть а в остальном заменяет спец коды.
Ну а зачем в файле это заменять, я тоже не знаю )
Цитата
А, кстати, а все жеж ненадо добавлять функцию по принятию формы? ( $_POST; ). Иначе как получаем данные?
Почитай уже про REGISTER_GLOBALS.
Мда все четыре сроки то другие:
Код
$a_update_config = ereg_replace("\\\'",""",$a_update_config);
$a_update_config = ereg_replace('\\\"','"',$a_update_config);
$a_update_config = str_replace('<',"<",$a_update_config);
$a_update_config = str_replace('>',">",$a_update_config);
Так что в итоге тут всё в порядке.
Автор: SteAlzzer 20.5.2008, 19:35
Хм... тоесть он удаляет два слеша и экранированную кавычку (одинразную и двойную)? Или тут она не экранирована, и удаляеться три слеша и кавычка?
Слушай, а не скажешь, зачем это нужно? В каком случае используеться...
Автор: liw 20.5.2008, 19:49
Слеш и кавычка заменяется на код.
Вот как раз в этом случает и нужно, - что бы файл остался работоспособным, - если пользователь передаст в форме текст с кавычками.
Автор: SteAlzzer 20.5.2008, 20:05
Спасибо огромное))) врубился)))
Автор: Сергей777 8.6.2008, 23:03
Цитата(SteAlzzer @ 20.5.2008, 21:05)

Спасибо огромное))) врубился)))
Я очень долго всему этому учился, но помоему так и не врубился до конца. Походу на специальные курсы надо пойтти учиться, блин. Время неохота тратить, черт!
___________________________
http://teens.sexolet.ru/малолетки/ в компьютерном деле
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)