【问题标题】:Posting data with curl - actually refreshing to the next page使用 curl 发布数据 - 实际上刷新到下一页
【发布时间】:2012-04-03 19:07:55
【问题描述】:

我正在尝试使用 Post 在页面之间发送帖子数据。不是表单 - 就像我可能在页面或其他东西之间传递验证错误(在多个地方使用它)。

cURL 执行良好,但它只是在底部的新页面上添加。如何执行 cURL Post 并加载以下页面?

所以我的目标是在页面之间发送数据。我不想使用 GET 或 cookie,因为我不想依赖用户,而且我不想使用 $_SESSION,因为它与会话无关,而是在页面之间发送私有数据。

谢谢

$ch = curl_init($some_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'myvar=something');
curl_exec($ch);
curl_close($ch);

我怀疑代码是否有任何相关性,因为它是关于执行一项任务而不是代码语法(本示例中可能有一个,但您必须相信我,这不是代码有问题,因为它可以正常检索)。

【问题讨论】:

  • 嗯,这种方法听起来很复杂。是否有强烈反对使用$_SESSION 在页面请求之间存储信息的论据?
  • 在我们了解您的意思/问题所在之前,您必须向我们展示一些代码。
  • @rjz 我觉得 $_SESSION 用于与特定用户“个人资料”相关的事情,我想使用 $_POST 因为我发送的不是特别是个人数据(例如,在提交表单,检查错误,如果有错误,则将其发送回原始页面,该页面检查是否已发送回任何错误,如果有则输出)。 DaveRandom,代码是不必要的;正如我最近了解到的,cURL 用于获取数据; curl_exec($handle) 检索句柄页面,但实际上并没有转到它。但是,如果您愿意,我将代码包含在内。
  • 嘿@Raeki,$_SESSIONs 也是存储您描述的那种“闪存数据”的非常常见的地方。没有任何理由您不能在会话中拥有与用户相对应的密钥和与任何验证错误相对应的密钥
  • @rjz 啊,在搜索了几天无果之后,我想我会选择$_SESSION。我仍然觉得帖子会更“正确”/“定义”,所以如果有人知道解决方法(似乎没有一个干净的解决方法),请告诉我! rjz 如果你想发布一个你最有帮助的答案

标签: php post curl


【解决方案1】:

您可以将您的$_SESSION 超全局分隔成数组,描述当前用户/会话以及您的表单创建的任何错误。例如,

$_SESSION = array(
  'user' => array(), // user data goes here
  'errors' => array() // validation data goes here
);

if (!$_POST['myvar'] == 'something') {
  $_SESSION['errors']['myvar'] = 'You must specify a value for <code>myvar</code>';
}

然后您就可以使用如下调用在后续页面上输出错误:

if (isset($_SESSION['errors'])) {
  foreach($_SESSION['errors'] as $error) {
    echo '<li>' . $error . '</li>';
  }
}

【讨论】:

    【解决方案2】:

    你为什么使用 cURL?为什么不直接使用AJAX

    $(function() {
    
       // Send data asynchronously
       $.ajax({
          url: '/path/to/your/script.php',
          type: 'POST',
          data: 'var1=value1&var2'=$('input.some_class').val(),
          success: function(data) {
             // Send the user to another page
             window.location.href = '/to/infinity/and/beyond';
          }
       });
    
    });
    

    【讨论】:

    • 我正在使用 PHP,并且希望远离 Javascript(因为依赖于用户 - 例如,无论他们是否启用它,我只想保持尽可能多的性能由我自己控制并隐藏不必要的信息)
    【解决方案3】:

    使用 ajax 进行执行

    $(function() {
    
       /
          data: 'var1=value1&/ Send data asynchronously
       $.ajax({
          url: '/path/to/your/script.php',
          type: 'POST',var2'=$('input.some_class').val(),
          success: function(data) {
             // Send the user to another page
             window.location.href = '/to/infinity/and/beyond';
          }
       });
    
    });
    

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多