¿Por qué la matriz $_POST es nula?

Tengo el siguiente código:

<?php
    define('ENVIRONMENT', 'tests');
    $_POST['id']='AccountPagesView.a_book/45';
    $_POST['old_value']='1';
    $_POST['value']='2';
    header("Location: http://localhost/index.php/welcome/update_record");
?>

Necesito configurar la matriz $_POST en este script y cargar el script por url. Pero el script de url me dice que la matriz $_POST es nula. ¿Por qué? ¿Cómo puedo configurar la matriz $_POST y enviarla al script por url? Gracias de antemano.

ACTUALIZACIÓN: tengo un código que debe probarse y hay un script en la URL "http://localhost/index.php/welcome/update_record", y usa valores de la matriz $_POST; entonces, no puedo cambiar este script y quiero probarlo. ¿Cómo puedo hacerlo?

UPDATE2:

<?php
    //include ('\application\controllers\welcome.php');
    define('ENVIRONMENT', 'tests');
    $_POST_DATA=array();
    $_POST_DATA['id']='AccountPagesView.a_book/45';
    $_POST_DATA['old_value']='1';
    $_POST_DATA['value']='2';
    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://localhost/index.php/welcome/update_record');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST_DATA);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_exec($ch);
?>

preguntado el 01 de julio de 12 a las 15:07

¿Quería anular los parámetros, y en su lugar include() el script de actualización del servidor web actual? Entonces no use la URL, use la ruta del sistema de archivos para hacerlo. -

Por favor, ¿hay alguna forma de enviar la matriz $_POST a otro script sin formularios? ¿Puede ser JS, u otro medio? -

Sí hay. Sin embargo, absténgase de enviar comentarios no deseados. -

Está bien, lo siento, pero estoy confundido. ¿Podría describir este significado, por favor? -

No, primero tienes que mejorar tu pregunta. Explique por qué necesita esa transferencia de datos específica, no puede usar las respuestas dadas hasta ahora y cómo se conectarán las dos partes de la aplicación. De lo contrario, su pregunta es demasiado amplia. -- Utilice el enlace de edición. -- Para obtener respuestas de mayor calidad, escriba un pregunta de mayor calidad incluyendo Código de muestra que sea completo pero conciso, etc. -

5 Respuestas

No se puede. Una redirección siempre dará como resultado que la página de destino se cargue a través de GET.

Sin embargo, puede usar la sesión para almacenar estos valores. Llamada session_start(); en ambas páginas y use la matriz superglobal $_SESSION en lugar de $_POST.

Respondido 01 Jul 12, 15:07

Por favor, ¿hay alguna forma de enviar la matriz $_POST a otro script sin formularios? ¿Puede ser JS, u otro medio? - user1477886

Si desea que sea redirigido, debe crear un formulario (posiblemente con solo campos ocultos) y luego enviarlo a través de JavaScript. - ladrónmaestro

Creo que esto es lo que necesita para enviar valores POST de un script PHP a otro, sin usar JS, si absolutamente no quiere usar $_SESSION aunque eso es lo que deberías estar usando.

$ch = curl_init();
$data = array('id' => 'AccountPagesView.a_book/45', 'old_value' => '1', 'value' => '2',);

curl_setopt($ch, CURLOPT_URL, 'http://path-to/other.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);

Respondido 01 Jul 12, 17:07

$_POST sólo existe si la solicitud se envió a través del POST método, lo que significa que se envió un formulario.

Podrías usar $_SESSION preferiblemente.

Respondido 01 Jul 12, 15:07

Por favor, ¿hay alguna forma de enviar la matriz $_POST a otro script sin formularios? ¿Puede ser JS, u otro medio? - user1477886

Esta es una de las principales razones por las que se debe usar $_SESSION. Vea esta otra pregunta para una explicación: PHP - ¿Pasar variables POST con encabezado ()?

<?php
session_start();
define('ENVIRONMENT', 'tests');
$_SESSION['id']='AccountPagesView.a_book/45';
$_SESSION['old_value']='1';
$_SESSION['value']='2';
header("Location: http://localhost/index.php/welcome/update_record");

Luego en index.php/welcome/update_record

<?php
session_start();
define('ENVIRONMENT', 'tests');
$id = $_SESSION['id'];
$old_value =  $_SESSION['old_value'];
$value = $_SESSION['value'];

//do something

contestado el 23 de mayo de 17 a las 13:05

Por favor, ¿hay alguna forma de enviar la matriz $_POST a otro script sin formularios? ¿Puede ser JS, u otro medio? - user1477886

Dos respuestas. Si lo siguiente no funciona:

<?php
    define('ENVIRONMENT', 'tests');
    $_POST['id']='AccountPagesView.a_book/45';
    $_POST['old_value']='1';
    $_POST['value']='2';
    require("/index.php/welcome/update_record");
?>

(Estoy un poco asombrado por la URL de la página).

Entonces:

Como insiste en POST (como es su derecho al preguntar), puede hacer:

<html>
  <head>
  </head>
  <body>
    <form action="/es/index.php/welcome/update_record" method="post">
      <input type="hidden" name="id" value="AccountPagesView.a_book/45">
      <input type="hidden" name="old_value" value="1">
      <input type="hidden" name="value" value="2">
      <input type="hidden" name="ENVIRONMENT" value="tests">
    </form>
    <script type="text/javascript">
       document.forms[0].submit();
    </script>
  </body>
</html>

Donde esa definición de MEDIO AMBIENTE necesita ser resuelta de alguna manera.

Si el script de destino usa $_REQUEST, que es $_POST + $_GET (io $_POST), entonces realiza una URL HTTP GET: ...-?id=...&old_value=1&value=2 cuál sería la solución más sencilla.

Respondido 01 Jul 12, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.