2013-10-10 2 views
1

Я хочу, чтобы перенаправить на страницу после выполнения функции php, а также отправить html-форму с методом POST, сразу.перенаправить на страницу с php, а также отправить данные POST

Я нашел много решений с GET, но я хочу, чтобы обработать это с помощью POST.

+0

перенаправить и отправить сразу? – vbrmnd

ответ

0

Вы можете использовать cUrl для отправки данных POST, которые хотите, а затем сделать перенаправление.

Посмотрите на сеть для: «php curl».

0

Сделайте свой form action пункт документа PHP, где вы хотите, чтобы выполнить вашу функцию, а затем, в конце концов это место header("location: your_location_file.php");

Шаг один - представить форму в functions.php
Шаг два - делать все, что вам нужно делать с занесены данными
Шага три - Перенаправление

Пример:

<form method="post" action="functions.php"> 
... 
</form> 

functions.ph p

<?php 
... 
all your code 
... 
header("location: your_location_file.php"); 
?> 
+0

Это хорошо, но он хочет передать данные сообщения в ваш_location_file.php. – idmean

0

Javascript может помочь, если вы не хотите полагаться на завиток. Если бы это лежало вокруг. Перейдите в $ _POST или массив данных, которые вы хотите опубликовать. Добавить проверку ошибок/параметров.

function http_post_redirect($url='', $data=array(), $doc=true) { 

    $data = json_encode($data); 

    if($doc) { echo "<html><head></head><body>"; } 

    echo " 
    <script type='text/javascript'> 
     var data = eval('(' + '$data' + ')'); 
     var jsForm = document.createElement('form'); 

     jsForm.method = 'post'; 
     jsForm.action = '$url'; 

     for (var name in data) { 
      var jsInput = document.createElement('input'); 
      jsInput.setAttribute('type', 'hidden'); 
      jsInput.setAttribute('name', name); 
      jsInput.setAttribute('value', data[name]); 
      jsForm.appendChild(jsInput); 
     } 
     document.body.appendChild(jsForm); 
     jsForm.submit(); 
    </script>"; 

    if($doc) { echo "</body></html>"; } 
    exit; 
} 
+0

Благодарим вас за ответ. как должен выглядеть массив '$ data'? с этим: '$ data = array ( « год »=>« 2013 », « месяц »=>« 3 » );' он не работает. его перенаправление, но данные POST не отправляются – Mike

+0

Должен был скопировать старый, извините. Ред. – AbraCadaver

0

Вы можете использовать сеанс для хранения данных POST.

В настоящее время я использую код, как показано ниже. При загрузке первой страницы проверяются данные $ _POST. Если он содержит определенные значения уже в базе данных, он перенаправляет страницу на эти значения.

// This could be part of the same script as below, or a different script. 
session_start(); 

if($_POST['my_value'] && valueExistsInMyDb($_POST['my_value'])) { // check my db to see if this is an existing value 

    $id = getIdOfMyValue($_POST['my_value']); // e.g. '4' 

    $_SESSION['POST'] = $_POST; // take ALL post data and save it in the session variable 

    header("location: your.php?myvalue=" . $id); // redirect to bookmarkable target page where $_GET variable matches what was posted. 
    exit(); // ensure no other code is executed in this script after header is issued. 
} 

Тогда ваш другой файл (или, может быть, даже и тот же файл) может это сделать:

// your.php?myvalue=4 

if(isset($_SESSION) && array_key_exists('POST',$_SESSION)) { 
    $_POST = $_SESSION['POST']; // creates or overwrites your $_POST array with data from the session. The rest of your script won't be able to tell that it's not a real $_POST, which may or may not be what you want. 
    unset($_SESSION['POST']); // you probably want to remove the data from the session. 
} 
// now your myvalue=4 is stored in GET, and you can handle the rest of the POST data as you like 

Я не знаю, если это лучшее решение, но до сих пор, кажется, работает для меня до сих пор. Я только что написал код несколько дней назад и еще не тестировал все аспекты.

Другой вариант - использовать HTML5 для изменения адресной строки. Не требуется перенаправление. Но недостатком является то, что, по-видимому, могут использовать только «современные браузеры Webkit».

Смежные вопросы