Продолжаем работать с ЧПУ

Итак, продолжаем беседу о работе с ЧПУ.
Если вам не помог предыдущий способ, я предлагаю ещё один - обработка данных POST при ЧПУ через вспомогательную страницу.

Итак, пусть у нас есть некая страница на которой есть форма:
<!--c1-->

CODE
<!--ec1-->
session_id("test_session");
session_start();

$content .= "<form action = 'action.php' method = 'POST'>";
$content .= "<input type = 'hidden' name = 'per_href' value = '/news/16.08.2006/'>";
$content .= "<tr><td>Имя:</td><td><input type = 'text' name = 'author'></td></tr>";
$content .= "<tr><td>Текст:</td><td><textarea name = 'comment></textarea></td></tr>";
$content .= "<tr><td colspan = '2' align = 'center'><input type = 'sibmit' value = 'Отправить'></td></tr>";
$content .= "</form>
<!--c2-->
<!--ec2-->

Итак, форма простая - два поля - первоя для ввода имени, второе для ввода комментария. Кроме того есть скрытое поле per_href - после того как наш action.php выполнит свою работу он должен венуть пользователя на нужную старницу - вот это и есть адрес этой нужной страницы.

Теперь текст action.php
<!--c1-->
CODE
<!--ec1-->
<?
    session_id("test_session");
    session_start();
    
    foreach($_POST as $key=>$value)
        $_SESSION['_test_'.$key] = $value;

    echo "<script>document.location.href = \"{$_POST['per_href']}\";</script>";    
?>
<!--c2-->
<!--ec2-->

значит что в этом файле происходит - во-первых - открывается сессия, в которую мы сохраним все значения полей. Затем идёт цикл который значение каждой формы, запишет в переменную сессии. И на последок переадресуем пользователя на нужную страницу.

Всё замечательно! Теперь для полной отчистки совести покажу как при таком способе обрабатывать загрузку файлов.
Ненмого дополним форму полем для загрузки файла:

<!--c1-->
CODE
<!--ec1-->
session_id("test_session");
session_start();

$content .= "<form action = 'action.php' method = 'POST' ENCTYPE = 'multipart/form-data'>";
$content .= "<input type = 'hidden' name = 'MAX_FILE_SIZE' value = '1000000'>";
$content .= "<input type = 'hidden' name = 'extra' value = 'news'>";
$content .= "<input type = 'hidden' name = 'per_href' value = '/news/16.08.2006/'>";
$content .= "<tr><td>Имя:</td><td><input type = 'text' name = 'author'></td></tr>";
$content .= "<tr><td>Текст:</td><td><textarea name = 'comment></textarea></td></tr>";
$content .= "<tr><td>Файл:</td><td><<input type = 'file' name = 'icon'></td></tr>";
$content .= "<tr><td colspan = '2' align = 'center'><input type = 'sibmit' value = 'Отправить'></td></tr>";
$content .= "</form>
<!--c2-->
<!--ec2-->

Значит что здесь добавилось:
1) появилось поля для файла и связанное этим скрытое поле MAX_FILE_SIZE
2) появилось скрытое поле extra - оно нужно для обработки файла в нашем обработчикеsmile.gif

Теперь займёмся обработчиком:
<!--c1-->
CODE
<!--ec1-->
<?
    session_id("test_session");
    session_start();
    
    foreach($_POST as $key=>$value)
        $_SESSION['_test_'.$key] = $value;

         switch($_POST['extra'])
         {
                 case "news":
                           if(is_uploaded_file($_FILES['icon']['tmp_name']))
                move_uploaded_file($_FILES['icon']['tmp_name'], "uploads/".$_FILES['icon']['name']));
        break;    
         }

    echo "<script>document.location.href = \"{$_POST['per_href']}\";</script>";    
?>
<!--c2-->
<!--ec2-->

вот вроде и всё... Немного не красиво но другого варианта я не нашёл...

Источник: PHP things ( Блоги на Realcoding.NET )



Опубликовал admin
29 Сен, Пятница 2006г.
изделия из алюминия на заказ продаются тут


Программирование для чайников.