我有以下代码:
<?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");
?>
我需要在此脚本中设置$ _POST数组并按url加载脚本。但来自url的脚本告诉我$ _POST数组为null。为什么?如何设置$ _POST数组并通过url将其发送到脚本?先感谢您。
更新:
我有一些必须测试的代码,url "http://localhost/index.php/welcome/update_record"
上有一些脚本,它使用$ _POST数组中的值;所以,我无法更改此脚本,我想测试它。我该怎么做?
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);
?>
答案 0 :(得分:4)
你做不到。重定向将始终导致通过GET加载目标页面。
但是,您可以使用会话来存储这些值。在两个页面上调用session_start();
并使用超全局数组$_SESSION
而不是$_POST
。
答案 1 :(得分:1)
我相信这是你需要将POST值从一个PHP脚本发送到另一个PHP脚本而不使用JS,如果你绝对不想使用$_SESSION
,那就是你应该使用的。
$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);
答案 2 :(得分:0)
$_POST
仅在通过POST
方法发送请求时才存在,这意味着已发送表单。
您可以改用$_SESSION
。
答案 3 :(得分:0)
这是应该使用$ _SESSION的主要原因之一。请参阅此其他问题以获得解释:PHP - Pass POST variables with header()?
<?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");
然后在index.php / welcome / update_record
上<?php
session_start();
define('ENVIRONMENT', 'tests');
$id = $_SESSION['id'];
$old_value = $_SESSION['old_value'];
$value = $_SESSION['value'];
//do something
答案 4 :(得分:0)
两个答案。 如果以下情况不起作用:
<?php
define('ENVIRONMENT', 'tests');
$_POST['id']='AccountPagesView.a_book/45';
$_POST['old_value']='1';
$_POST['value']='2';
require("/index.php/welcome/update_record");
?>
(我对页面网址有点惊讶。)
然后:
当你坚持要求POST时(你的要求是正确的),你可以这样做:
<html>
<head>
</head>
<body>
<form action="/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>
环境的定义需要以某种方式解决。
如果目标脚本使用$ _REQUEST,即$ _POST + $ _GET(i.o. $ _POST),那么您将执行HTTP GET URL:...-?id=...&old_value=1&value=2
这将是最简单的解决方案。