Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 917
от 10.03.2008, 13:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 472, Экспертов: 47
В номере:Вопросов: 5, Ответов: 9

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 125920: Здравствуйте, уважаемые участники форума! Я хотел сделать многоязыковый сайт но пока не знаю полностью суть дела "значение=параметр" после index.php. Как можно сделать так чтобы при нажатии на определенную ссылку приведенного ниже код...
Вопрос № 125938: Здравствуйте дорогие Эксперты вопрос такой, я делаю скрипт авторизации: Как сделать, чтобы после проверки, пользователя автоматически перекидывало на другую страницу? И что Вы можете посоветовать добавить в код? Как грамотнее организ...
Вопрос № 125941: Здравствуйте уважаемые эксперты! У меня к Вам следующий вопрос. У меня на моем хостинге есть директория images. Как мне средствами PHP изъять от туда последовательно все имена файлов с расширением *.jpg и *.jpeg. А если точнее то как сделать так чтоб...
Вопрос № 125959: Здравствуйте эксперты! Помогите разобратся! На главной странице сайта запустил session_start(); потом присваивал значение $_SESSION['referrer']=$referrer; потом на другой странице тоже написал session_start(); на начале кода. Этот $_SESSIO...
Вопрос № 125962: Здравствуйте, уважаемые участники! Как можно перейти на предыдущую страницу сайта прямо из сайта а не от браузера? ...

Вопрос № 125.920
Здравствуйте, уважаемые участники форума! Я хотел сделать многоязыковый сайт но пока не знаю полностью суть дела "значение=параметр" после index.php.
Как можно сделать так чтобы при нажатии на определенную ссылку приведенного ниже кода, загрузилась соответствующая страница, т.е. например при нажатии на

<a href="http://mysite.com/index.php?lang=en"><img src="us1.gif" width="20" height="12" border="0"></a>
нужно перейти на страницу indexen.php и так далее.

Заранее благодарен!!!

Приложение:

Отправлен: 04.03.2008, 14:29
Вопрос задал: Sherland (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Товарищ Бородин / Borodul
Здравствуйте, Sherland!
То, что Вы хотите сделать, выполняется с помощью модуля Apache mod_rewrite (если я, конечно, правильно понял, что Вы хотите).
Поместите в корневую директорию сайта файл .htaccess следующего содержания:

RewriteEngine On
RewriteRule index.php?lang=(en|ru|it|de) index$1.php

Поясню смысл сего... Поставьте в скобки любое обозначение языка - en, ru, it, de(соответственно, английский, русский, итальянский, немецкий), и открываться будут страницы indexen.php, indexru.php, indexit.php, indexde.php. Вы можете поставить в скобки любое обозначение, главное, чтобы был соответствующий файл в каталоге.
С уважением, Товарищ Бородин
---------
- Я вчера коньяк пил, 25 лет выдержки, вот это выдержка! - Ерунда! Вот я вчера выпил 5 литров пива и поехал на автобусе до Иваново без остановок. Вот это выдержка...
Ответ отправил: Товарищ Бородин / Borodul (статус: Профессионал)
Россия, Новосибирск
Тел.: +7-923-245-3366
ICQ: 346988855
----
Ответ отправлен: 04.03.2008, 14:39
Оценка за ответ: 5
Комментарий оценки:
Спасибо Вам Товарищ Бородин! Ваши ответы всегда очень помогают мне!
Если можно еще вопрос: что означает index$1.php Мне надо писать что нибудь место $1 или еще что-то?

Еще раз спасибо!

Отвечает: Иван Сергеевич
Здравствуйте, Sherland!

1. Суть передачи параметров через URL (т.н. GET-строка) такова:
После знака вопроса передаются значения переменных в виде ИМЯ=ЗНАЧЕНИЕ&...
Переменные автоматически записываются в глобальный массив $_GET, откуда мы их и будем использовать.

2. Если Вы планируете отдельные страницы для каждого языка, то можно использовать следующий вариант:

<?
switch ($_GET["lang"]) {
case "en": $new_path = "indexen.php"; break;
case "ru": $new_path = "indexru.php"; break;
case "ua": $new_path = "indexua.php"; break;
default: $new_path = "indexru.php";
}
header("Location: http://mysite.com/".$new_path); // без передачи параметров скрипту
header("Location: http://mysite.com/".$new_path."?".$_SERVER["QUERY_STRING"]); // с передачей параметров
?>
Данный скрипт делает перенаправление на вычисленный адрес. С помощью глобальной переменной $_SERVER["QUERY_STRING"] мы передаем GET-строку с полученными скриптом параметрами (в нашем примере это lang=en, но могут также быть данные о пользователе или еще что-нибудь).

ВНИМАНИЕ! Функция header должна быть вызвана ДО любого вывода на экран (будь то текст страницы или ошибка/предупреждение интерпретатора php). Поэтому она должна быть как можно раньше в теле скрипта. Также проследите, чтоб перед открывающей скобкой <? не было пробелов или тэгов HTML - иначе браузер может воспринять это как начало вывода на экран. Возможность избежать предварительного вывода на экран - использование буферизации (функции ob_start() и ob_end_flush() в php4+).

3. Еще один способ - просто включать тело выбранного скрипта в Ваш index.php:

include_once($new_path); // если не надо передавать параметры в скрипт
include_once("http://mysite.com/".$new_path."?".$_SERVER["QUERY_STRING"]); // с передачей параметров

Однако в таком случае могут возникнуть проблемы с передачей параметров в данный скрипт (для этого должна быть включена опция php allow_url_fopen).

Наверное запутал Вас разными способами... ИМХО наиболее простой способ - это заранее использовать ссылку на скрипт, подставляя ее в тэг <A>, ведь перечень адресов наверняка заранее известен. Использовать передачу параметра языка имеет смысл, если Вы используете шаблон страницы, заполняемый различными строками, в зависимости от выбранного языка. Например, так сделан форум phpBB (все строки форума вынесены в отдельную папку Laguage и доступны различные их переводы)

PS. Приведенный выше Товарищем Бородиным способ работает с модулем mod_rewrite веб-сервера Apache. Если у Вас надо анализировать только передачу параметра в index.php, то решение удобно. Однако тогда следите, чтоб параметр lang всегда шел сразу после вопросительного знака, иначе правило замены не сработает
Ответ отправил: Иван Сергеевич (статус: 2-ой класс)
Ответ отправлен: 04.03.2008, 15:06
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Ваш ответ очень польный :) Спасибо за ответ и затраченное время!

Отвечает: magnifiko
Здравствуйте, Sherland!

Единственное изменение - прийдётся рисунки переименовать под стать языкам.

Приложение:

Ответ отправил: magnifiko (статус: 1-ый класс)
Ответ отправлен: 04.03.2008, 16:07
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ!


Вопрос № 125.938
Здравствуйте дорогие Эксперты вопрос такой, я делаю скрипт авторизации:

Как сделать, чтобы после проверки, пользователя автоматически перекидывало на другую страницу?
И что Вы можете посоветовать добавить в код?
Как грамотнее организовать авторизацию, без базы данных, я пока только учусь…
Заранее всем благодарен!!!

Приложение:

Отправлен: 04.03.2008, 16:32
Вопрос задал: Сурыев Назар (статус: 6-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Иван Сергеевич
Здравствуйте, Сурыев Назар !

1. Только что отвечал на вопрос №125920 - там рекомендовал такие же механизмы, что и Вам сейчас приведу:

a) Перенаправление с помощью http-заголовка:
header("Location: http://mysite.com/script.php"); // без передачи параметров скрипту
header("Location: http://mysite.com/script.php?".$_SERVER["QUERY_STRING"]); // с передачей параметров

Данный скрипт делает перенаправление на вычисленный адрес. С помощью глобальной переменной $_SERVER["QUERY_STRING"] мы передаем GET-строку с полученными скриптом параметрами (например, идентификатор сессии).

ВНИМАНИЕ! Функция header должна быть вызвана ДО любого вывода на экран (будь то текст страницы или ошибка/предупреждение интерпретатора php). Поэтому она должна быть как можно раньше в теле скрипта. Также проследите, чтоб перед открывающей скобкой
b) Еще один способ - просто включать тело выбранного скрипта в Ваш скрипт:

include_once("script.php"); // если не надо передавать параметры в скрипт
include_once("http://mysite.com/script.php?".$_SERVER["QUERY_STRING"]); // с передачей параметров

Однако в таком случае могут возникнуть проблемы с передачей параметров в данный скрипт (для этого должна быть включена опция php allow_url_fopen).

2. По поводу логирования: не делайте один лог-файл на все действия. Лучше сделать по файлу на каждый день
$day = date("d.m.Y");
$f = fopen("logs/".$day."-"login.log","a");
В данном примере в имени лога также хранится информация о типе действия (login) - Вы можете сразу отделить ошибки работы с БД от входов/выходов поль зователей и тд.
Насколько я понял, Вы храните пароль в открытом виде в текстовом файле. Это недопустимо. Используйте шифрование. К примеру, функцию md5() php.
Общий алгоритм такой:
- Пользователь вводит логин/пароль при регистрации. В файл/базу данных заносится информация вида логин=md5(пароль).
- При повторном логине пользователь опять вводит свои данные, но сравниваются не сами пароли, а их ХЭШи (т.е. значения, полученные после md5($password))
Таким образом, даже в случае похищения у Вас файла паролей (или взлома базы данных) никто не узнает сами пароли.

3. В дальнейшем для получения Вашими страницами информации об авторизованном пользователе (чтобы ему не приходилось каждый раз заново вводить свои данные) рекомендуется использовать механизм сессий.

Про безопасную авторизацию можно почитать, например тут

Оформлены ссылки.
-----
∙ Отредактировал: Николай Владимирович / Н.В. (Профессионал)
∙ Дата редактирования: 04.03.2008, 21:06

Ответ отправил: Иван Сергеевич (статус: 2-ой класс)
Ответ отправлен: 04.03.2008, 17:04
Оценка за ответ: 5
Комментарий оценки:
За такой расказ однозначно положительная оценка..... Мне понравилось насчет каждодневного логирования...........


Вопрос № 125.941
Здравствуйте уважаемые эксперты! У меня к Вам следующий вопрос. У меня на моем хостинге есть директория images. Как мне средствами PHP изъять от туда последовательно все имена файлов с расширением *.jpg и *.jpeg. А если точнее то как сделать так чтобы заработал такого типа скрипт:

Приложение:

Отправлен: 04.03.2008, 16:36
Вопрос задал: Sanek (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Иван Сергеевич
Здравствуйте, Sanek!

Для получения всех подходящих шаблону файлов из директории рекомендую функцию glob(string pattern [, int flags])
pattern - шаблон, по которому Вы ищете файлы.
flags - дополнительные параметры (флаги), вот некоторые полезные:

GLOB_NOSORT - Возвращает файлы в таком виде, в котором они содержатся в директории (без сортировки)
GLOB_NOESCAPE - Обратные слеши не экранируют метасимволы
GLOB_ONLYDIR - Возвращает только директории, совпадающие с шаблоном

В вашем случае получим:
$all_file = glob("img/*.jp*g");
$KOL = count($all_file);
foreach($all_file as $image)
{
$file_name = basename($image);
echo "....";
}

Примечание.
Функция возвращает полные имена файлов, поэтому необходимо их очищать с помощью функции basename(). В качестве шаблона мы используем *.jp*g, чтобы получить и jpg, и jpeg-файлы. При работе с большими массивами лучше использовать функцию foreach, а не for(...), так как не происходит потери времени на индексацию массива

Приложение:

Ответ отправил: Иван Сергеевич (статус: 2-ой класс)
Ответ отправлен: 04.03.2008, 17:27
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!! не могли б Вы еще подсказать где об этом всем можно былобы почитать?


Вопрос № 125.959
Здравствуйте эксперты! Помогите разобратся!
На главной странице сайта запустил session_start(); потом присваивал значение $_SESSION['referrer']=$referrer; потом на другой странице тоже написал session_start(); на начале кода.
Этот $_SESSION['referrer']=$referrer; работает на главной странице сайта. А на другом странице писал ниже переведенной код но не работает. Там отображается такое сообщение об ошибке

"Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/.../public_html/another.php on line 241"

Приложение:

Отправлен: 04.03.2008, 17:54
Вопрос задал: Sherland (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Иван Сергеевич
Здравствуйте, Sherland!

Попробуйте так:
<?
if isset($_SESSION["referrer"])
{
?>
<input name='userReferrerForm' value='<?=$_SESSION["referrer"]?>' class='forma' disabled='disabled' type='text' style='width: 98%;'>
<?
}
else echo "referrer не указан!";
?>

Проблема в кавычках, если я не ошибаюсь. И вообще, если вы собираетесь выводить 90% HTML, не используйте для этого оператор echo, а делайте как я привел выше. Для вывода отдельных значений php удобно использовать конструкцию <?=$some_var?>

Если переменная в сессии не передалась, проверьте, существует ли указанный в настройках php каталог сессий (обычно это бывает на локальных машинах)
Ответ отправил: Иван Сергеевич (статус: 2-ой класс)
Ответ отправлен: 04.03.2008, 18:07
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ!

Отвечает: magnifiko
Здравствуйте, Sherland!

В приложении, возможно, ошибка:
<?php
echo "<input name='userReferrerForm' value='".$_SESSION['referrer']".' class='forma' disabled='disabled' type='text' style='width: 98%;'>";
?>
Ответ отправил: magnifiko (статус: 1-ый класс)
Ответ отправлен: 04.03.2008, 18:11


Вопрос № 125.962
Здравствуйте, уважаемые участники!
Как можно перейти на предыдущую страницу сайта прямо из сайта а не от браузера?
Отправлен: 04.03.2008, 18:03
Вопрос задал: Sherland (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Иван Сергеевич
Здравствуйте, Sherland!

Обычно это реализуется гиперссылками с таким кодом javascript:
<a href='javascript: history.go(-1)'>Назад</a>

Можно применять возвраты к отдельным фреймам:
var frame = document.getElementById('myframe');
frame.history.back();
Ответ отправил: Иван Сергеевич (статус: 2-ой класс)
Ответ отправлен: 04.03.2008, 18:17
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: M@gi$†e®
Здравствуйте, Sherland!
На JavaScript
history.go(-1) - возвратит на 1 позицию назад
history.back() возвратит на предыдущую страницу
---------
Aquila non Capta Muscas
Ответ отправил: M@gi$†e® (статус: 9-ый класс)
Ответ отправлен: 04.03.2008, 21:47
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.72.2 от 06.03.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное