40

我可以在不使用表单的情况下将例如字符串或另一条信息发送到另一个 .php 文件而不暴露[因此不是通过 GET 而是通过 POST 符合我所知道的]?

4

6 回答 6

26

如果您不希望用户看到您的数据,请使用 PHP 会话。

用户仍然可以访问(和操作)发布请求中的数据。

查看有关 PHP 会话的本教程。

于 2010-09-23T17:24:44.720 回答
19

如果您不想要表单,可以使用 AJAX 发送 POST 请求。

使用 jquery $.post方法非常简单:

$.post('/foo.php', { key1: 'value1', key2: 'value2' }, function(result) {
    alert('successfully posted key1=value1&key2=value2 to foo.php');
});
于 2010-09-23T17:22:45.617 回答
11

使用 SESSION 发送您的数据,而不是发布。

session_start();
$_SESSION['foo'] = "bar";

在您收到请求的页面上,如果您绝对需要 POST 数据(一些奇怪的逻辑),您可以在开头的某个地方执行此操作:

$_POST['foo'] = $_SESSION['foo'];

发布数据将与使用 POST 发送一样有效。

然后销毁会话(或者如果您需要会话用于其他目的,则只需取消设置字段)。

销毁会话或取消设置字段很重要,因为与 POST 不同,SESSION 将保持有效,直到您明确销毁它或浏览器会话结束。如果你不这样做,你会观察到一些奇怪的结果。例如:您使用 sesson 过滤一些数据。用户打开过滤器并获取过滤后的数据。过了一会儿,他返回页面并期望过滤器被重置,但事实并非如此:他仍然看到过滤后的数据。

于 2011-04-26T20:03:18.577 回答
8

只需使用:file_get_contents()

// building array of variables
$content = http_build_query(array(
            'username' => 'value',
            'password' => 'value'
            ));
// creating the context change POST to GET if that is relevant 
$context = stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'content' => $content, )));

$result = file_get_contents('http://www.example.com/page.php', null, $context);
//dumping the reuslt
var_dump($result);

参考:我对类似问题的回答:

于 2017-10-27T18:53:17.530 回答
5

查看这些函数的 php 文档,您可以使用它们发送 post reqeust。

fsockopen()
fputs()

或者简单地使用类似Zend_Http_Client的类,它也基于套接字连接。

还使用谷歌找到了一个简洁的例子......

于 2010-09-23T18:16:01.797 回答
1

function redir(data) {
  document.getElementById('redirect').innerHTML = '<form style="display:none;" position="absolute" method="post" action="location.php"><input id="redirbtn" type="submit" name="value" value=' + data + '></form>';
  document.getElementById('redirbtn').click();
}
<button onclick="redir('dataToBeSent');">Next Page</button>
<div id="redirect"></div>

您可以使用此方法创建一个新的隐藏表单,当单击按钮[Next Page] 时,其“数据”通过“post”发送到“location.php”。

于 2019-06-28T12:52:28.870 回答