【问题标题】:How to prevent php submission of sms text message on page refresh?如何防止php在页面刷新时提交短信?
【发布时间】:2012-08-01 07:38:32
【问题描述】:

当潜在客户在其网页上提交查询表单时,我正在使用第 3 方短信网关向客户发送短信。我将 Aweber 用于自动回复系统,它发送一个包含潜在客户数据的查询字符串,我收集这些数据并将其发送给客户,同时向他的手机发送一条短信。

我一切正常。但是,我需要防止客户端在同一会话中接收来自同一潜在客户的多条短信,这是由于刷新或点击浏览器上的 BACK 按钮造成的。

这是我正在使用的代码,除了这个问题之外,它正在工作:

   $name      = $_GET['name'];
   $email     = $_GET['email'];
   $address   = $_GET['address'];
   $phone     = $_GET['phone'];
   $phone_sms = preg_replace('/^1|\D/', "", $phone);

   $message   = "$name, $email, just submitted an inquiry for $address";

   $from      = "1212121212";   // Ph# txt message is received from
   $to        = "$phone_sms";   // Ph# txt message is sent to

   $url       = 'http://domain.com/of/api';

   $fields = array(
     'from'     =>urlencode($from),
     'to'       =>urlencode($to),
     'message'  =>urlencode($message),
   );

   foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
   rtrim($fields_string,'&');

   $ch = curl_init();

   curl_setopt($ch,CURLOPT_URL,$url);
   curl_setopt($ch,CURLOPT_POST,count($fields));
   curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

   $result = curl_exec($ch);

   curl_close($ch);

非常感谢您的帮助。

【问题讨论】:

  • 只是想知道您使用的是哪个第三方短信网关?
  • @MuhammadAhmadZafar 以上代码适用于 Sourcesms(英国以外),运行良好。但是我发现了一个更强大的网关 (Twilio),它具有更高的可靠性、支持和大量资源,而且在美国的成本要低得多。我现在正在测试他们的系统,它似乎工作得很好。

标签: php sms page-refresh


【解决方案1】:

如果您在发布的脚本末尾发送Location 标头以重定向到“成功”页面,则后退按钮将不会加载该页面两次。

试试:

// ... your code from the question
curl_close($ch);

header('Location: /sent.php');
exit;

然后让sent.php 显示确认页面,让他们知道他们的消息已发送。如果您需要从他们的请求中发送特定数据,请在重定向之前将其添加到会话中,并从sent.php 上的会话中读取该数据。

通过发送重定向,当使用后退按钮导航时,浏览器将不会再次尝试重新发布相同的数据。它还将阻止刷新页面(在发送表单后)再次尝试重新发布数据。

【讨论】:

  • @user1322707 我建议对所有表单提交使用这种方法。它将stupid 带离用户并阻止他们破坏您的网站功能。 +1(当我很快收到我的选票时)
  • @draw010 呵呵!我不知道我在想什么 ;) 感谢 PHP 101 指令从我身边飞过:-/
  • IRT Fluffeh 的评论,我同意并且我对所有表单提交也使用相同的方法。当涉及到表单帖子时,使用它可以解决很多后退按钮问题。
【解决方案2】:

你可以让它基于 cookie 吗?

基本上是这样

if(cookie =='') { /*do the stuff - AND set the cookie*/}

if(cookie !=='') { /* don't do the stuff */ }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 2016-01-18
    • 2021-07-02
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多