Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| Smoke |
6.5.2008, 16:01
Сообщение
#1
|
![]() Турист ![]() Группа: Пользователи Сообщений: 16 Регистрация: 14.9.2006 Пользователь №: 1 126 Репутация: 0 |
Всем привет!
Помогите пожалуйста перевести кусок кода из 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
Сообщение
#2
|
|
Житель ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Регистрация: 2.11.2007 Пользователь №: 6 760 Репутация: 20 |
а с чего вы взяли что дело в версии PHP ?
просто у вас в PHP5 REGISTER_GLOBALS = Off обращатся надо так $_GET['pg'] а не просто $pg или включить REGISTER_GLOBALS/ хотя просто так использовать то что пришло в URL, ничего не проверяя, я вам как бы сказать.. , - не советую. |
| SteAlzzer |
6.5.2008, 17:04
Сообщение
#3
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
Код ----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
Сообщение
#4
|
|
Житель ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Регистрация: 2.11.2007 Пользователь №: 6 760 Репутация: 20 |
Да, а теперь ждём автора что бы понять что значили слова:
Цитата При таком коде на PHP5 не срабатывает ссылка. Цитата И, если не ошибаюсь, в 8 строчке знак $ не нужен и будет катигорически всему мешать. Ну или будет все путем, если в папке pg есть файл с именем $pg.php, что, как я понимаю, маловероятно)) Ну почему же, - там же двойные кавычки. |
| SteAlzzer |
6.5.2008, 17:06
Сообщение
#5
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
Ну или в первом я ошибаюсь... Но что-либо должно сработать.
К томуже, эту операцию можно сделать качественно через case, а не через if-else |
| liw |
6.5.2008, 17:07
Сообщение
#6
|
|
Житель ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Регистрация: 2.11.2007 Пользователь №: 6 760 Репутация: 20 |
|
| SteAlzzer |
6.5.2008, 17:13
Сообщение
#7
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
Растолкуй, пожалуйста, почему бует правильно постановка $ перед именем файла? Я просто не такой уж и большой опыт имею в том или ином языке програмирования, начал с PHP, да и не все еще понимаю.
Но, насколько далеки мои догадки, то винда не разрешает использование знака $ в имени файла - раз. Если стоит $, значит последующее название есть ни что иное, как переменная. Но в этой строчке... Ну язык не поймет нужную переменную, так как она ничем не выделена. Тобишь, получается переменная $pg.php. Насколько понимаю, переменные так не задаются, да и в путях они наврядтли присутствуют - два. Мои аспекты ошибочны? |
| liw |
6.5.2008, 17:22
Сообщение
#8
|
|
Житель ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Регистрация: 2.11.2007 Пользователь №: 6 760 Репутация: 20 |
Так как двойные кавычки то 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
Сообщение
#9
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
Хм... Спасибо. На досуге как-нить поэксперементирую...
|
| Smoke |
7.5.2008, 6:27
Сообщение
#10
|
![]() Турист ![]() Группа: Пользователи Сообщений: 16 Регистрация: 14.9.2006 Пользователь №: 1 126 Репутация: 0 |
Всем спасибо, особенно liw! Я разобрался в своей ошибке.
А как бы теперь его организовать через case? -------------------- |
| SteAlzzer |
7.5.2008, 13:50
Сообщение
#11
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
Код <? 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
Сообщение
#12
|
![]() Турист ![]() Группа: Пользователи Сообщений: 16 Регистрация: 14.9.2006 Пользователь №: 1 126 Репутация: 0 |
Вот что получилось
<?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
Сообщение
#13
|
|
Житель ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Регистрация: 2.11.2007 Пользователь №: 6 760 Репутация: 20 |
какой смысл обращатся к массиву постоянно ?
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
Сообщение
#14
|
![]() Турист ![]() Группа: Пользователи Сообщений: 16 Регистрация: 14.9.2006 Пользователь №: 1 126 Репутация: 0 |
Привет! Еще один вопрос:
На 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
Сообщение
#15
|
|
Житель ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Регистрация: 2.11.2007 Пользователь №: 6 760 Репутация: 20 |
Что значит не работает?
Выше сто раз сказали что дело не в версии php. |
| SteAlzzer |
19.5.2008, 19:47
Сообщение
#16
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
liw, позволь я сам найду ошибку, чисто для повышения практики, а ты скажешь, прав я или нет)) Просто чутук попозже, через минут 15-20.
Smoke, а че пишет, когда откурываешь страницу? |
| Smoke |
19.5.2008, 20:35
Сообщение
#17
|
![]() Турист ![]() Группа: Пользователи Сообщений: 16 Регистрация: 14.9.2006 Пользователь №: 1 126 Репутация: 0 |
Что значит не работает? Выше сто раз сказали что дело не в версии php. Да я понимаю, что дело не в версии. Просто в php4 он работает, а в php5 нет. Поэтому я и уточняю, что мне надо для php5. liw, позволь я сам найду ошибку, чисто для повышения практики, а ты скажешь, прав я или нет)) Просто чутук попозже, через минут 15-20. Smoke, а че пишет, когда откурываешь страницу? Страница просто перезагружается, и параметры $author и $keyworlds остаются неизменными. -------------------- |
| SteAlzzer |
19.5.2008, 20:50
Сообщение
#18
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
Если так говорить, то ты их просто не получаешь)))
Используй $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
Сообщение
#19
|
|
Поселенец ![]() ![]() Группа: Пользователи Сообщений: 107 Регистрация: 4.4.2008 Пользователь №: 12 943 Репутация: 1 |
Ну и где то сообщение, которое я так усердно писал, а мне высвеилась табличка "Ждите проверки и утвержения модератором"?
|
| liw |
20.5.2008, 16:03
Сообщение
#20
|
|
Житель ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Регистрация: 2.11.2007 Пользователь №: 6 760 Репутация: 20 |
Цитата <form action='?adm=meta_teg ' method=post> liw, а здесь можно указывать такой файл в атрибуте action? Да, - указывать можно, просто тот же файл и параметры. |
![]() ![]() |
|
Текстовая версия | Сейчас: 2.12.2008, 23:13 |
|