Отправка формы HTML POST - это искажение URL - PullRequest
1 голос
/ 06 ноября 2011

Я пытаюсь получить форму HTML / PHP для правильной отправки.Некоторые детали:

базовый URL = http://localhost/directory

page = page/add

полный адрес = http://localhost/directory/page/add

Использование htaccess для перезаписи URL, такhttp://localhost/directory/page/add на самом деле http://localhost/directory/index.php?q=page/add

Мое действие HTML POST - «page / add», так что передний контроллер знает, какую функцию запустить для очистки и отправки данных (он действует как «идентификатор формы»).

Страница прекрасно загружается на http://localhost/directory/page/add, но когда я нажимаю на кнопку отправки, URL перенаправляется на страницу / страницу / добавление.И каждый раз, когда я нажимаю «отправить», я добавляю еще одну «страницу» в URL.Таким образом, за 5 кликов появится «страница / страница / страница / страница / страница / страница / добавление»

Я не могу понять, почему я получаю эту «дополнительную» «страницу».

Фактическая ошибка PHP (page / page / add не существует в $ route, поскольку это недопустимый маршрут):

Примечание: неопределенный индекс: page / page / add в C: \ xampp \htdocs \ script \ includes \ common.inc в строке 92

Вот функция в строке 92:

function route_path($path = NULL) {

    $routes = get_routes(); //Returns array: approved "urls => function callbacks"

    if($path === NULL) {
        $path = get_path(); //Returns $_GET['q'] with trim and strip_tags
    }

    $function = $routes[$path]; <<<<<----This is LINE 92 

    if(isset($function)) {
    $form_name = str_replace('/', '_', $path); // page/add = function page_add()
    }

    if(function_exists($function)) {
        call_user_func($function, $form_name);
    }
    else {
        //TODO: Redirect to Login screen.
    }
}

Основной HTML-код:

<form action="page/add" method="post" />

//Form elements

<input type="submit" value="Submit" />
</form>

Спасибоза помощь.

ОБНОВЛЕНИЕ : Я добавил тег <base> в мои HTML-шаблоны.Это позволяет мне сохранять действие как page / add (так как это также маршрут в моем простом маршрутизаторе / диспетчере).

1 Ответ

2 голосов
/ 06 ноября 2011

Используя относительный путь , вы указываете форму для отправки по существующему пути плюс ваше действие . Поэтому, если вы находитесь на http://example.com/page/add,, форма использует http://example.com/page/ в качестве базы и добавляет действие page/add, приводящее к POST к http://example.com/page/page/add.

Вы все еще можете использовать относительный путь, просто измените действие соответствующим образом:

<form action="add" method="post" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...