在PHP中的标题位置

时间:2014-12-17 07:04:44

标签: php http-headers

<?php
  require ('db_connect.php');

  $Name = $_POST["name"]; $Email = $_POST["email"]; $Message = $_POST["message"];

  if( isset($_POST["submit2"]) ) {
    $insertString2 = "INSERT INTO Messages(Name,Email,Message)      
      VALUES('$Name','$Email','$Message')";

    mysql_query($insertString2);
    header("Location:register.php?msg=Successfully Send Message! You will get reply soon...");
  }

?>

这是我的代码。 MySQL部分正在运行。但这不会重定向到register.php。为什么呢?

2 个答案:

答案 0 :(得分:3)

您可以在其他代码之前的if条件中添加标题调用,只要您遵循手册建议的内容:

You can use output buffering ... by calling ob_start() and ob_end_flush() in your
script, or setting the output_buffering configuration directive on in your php.ini
or server configuration files.  

如果您希望更改PHP.INI文件,可以打开输出缓冲,如下所示:

output_buffering = On

打开输出缓冲后,此代码结构应该起作用:

尝试使用此标题:

// setting variables here, then:
if (condition) {

  // other code here, then:

  $location = "http://yourdomain.whatever/register.php";
  $encoded = urlencode("Successfully Send Message! You will get reply soon...");
  header("Location: $location?msg=$encoded");         
  exit;
}

注意:当您使用header()时如果您对保持与http1.0的向后兼容性有任何顾虑,那么您应该提供一个完整的URL,包括协议是否为&#39; http&#39;,&# 39; HTTPS&#39;或者是其他东西。您的查询字符串还包含需要进行urlencoded的字符。将要编码的值传递给urlencode()后,字符串如下所示:

Successfully+Send+Message%21+You+will+get+reply+soon...

使用PHP的部分乐趣在于它可以很好地解码编码的URL。所以你只需要向用户显示一条消息就是在register.php上写下类似下面的代码:

<?php echo htmlentities($_GET['msg']); 

如果您希望使用JavaScript解码$ _GET变量,请注意PHP和JavaScript不会以相同的方式对空间进行urlencode,因此您需要自己手动解码$ _GET变量的值而不是完全依赖在JavaScript的decodeURIComponent()上。以下JavaScript将对&#34; msg&#34;的值进行urldecode,包括转换任何&#39; +&#39;字符到空格中:

var str=location.search.substring(5);
str = decodeURIComponent( str );
str=str.replace(/\+/g, ' ');
alert(str); //Successfully Send Message! You will get reply soon... 

答案 1 :(得分:0)

&#34; header()必须是重要的 在发送任何实际输出之前调用&#34; - 您可能会错过这一点。

也许你犯了这样的错误。你可以分享原始的完整源代码吗?