为什么我的代码没有将用户重定向到所需的页面?

时间:2015-12-30 04:32:50

标签: php pdo header

下面的代码提交了一个帖子并重定向到另一个页面。邮件已提交,行在数据库中生效,但在submiiting post后我无法重定向。

error_reporting('E_ALL ^ E_NOTICE');
if(isset($_POST['submit'])) {
$title=strip_tags($_POST['title']);
$body=($_POST['body']);
$category=$_POST['category'];

if (empty($_POST['category'])) {
$er = "Please select a category from the options";
}
else if($category != "Controversies" && $category != "Entertainment" && $category != "Health" && $category != "Politics" && $category != "Lifestyle" && $category != "Technology" && $category != "Sports" && $category != "Travel"){
$er =  "Please select a valid category";
}
else if (strlen($title) < 5) {
 $er = "Make sure title is more than 5 characters";
}
else if (strlen($title) > 100 ) {
  $er = "Make sure title is not more than 100 characters";
 }  
else {
   $stmt = $db->prepare("INSERT INTO posts (status,userid, title, body,category) VALUES (:status,:userid,:title,:body,:category)");
       $stmt->execute(array(':userid'=>$userid,':status'=>active,':title'=>$title,':body'=>$body,':category'=>$category));

  if ($stmt->rowCount() > 0) {
  header("Location: mains.php");
  exit();
  } 
  else {  
  $er = 'Some error occured please try again!';
  }
} 
} 

如果我使用header("Location: mains.php");代替$er = Post success,我会在提交帖子后看到消息。那么这里的标题有什么问题。为什么代码不会重定向到mains.php

6 个答案:

答案 0 :(得分:1)

关于你的评论:

  

感谢它工作但任何PHP解决方案?用户可以禁用javascript

    echo '<script>';
    echo 'window.location.href="mains.php"'; //Javascript Redirect
    echo '</script>';
    echo '<noscript>';
    echo '<meta http-equiv="refresh" content="0;url=mains.php" />'; //Incase of Javascript disabled
    echo '</noscript>'; 

答案 1 :(得分:0)

你需要在标题之后尽快写死:

header("location: mains.php");
die();

答案 2 :(得分:0)

尝试在代码顶部添加ob_start();,即error_reporting('E_ALL ^ E_NOTICE');语句

之前

答案 3 :(得分:0)

首先回显$stmt->rowCount()以检查它是否返回值。如果它返回大于零的值,则在调用exit;函数后添加header()语句。

if ($stmt->rowCount() > 0) {
   header("Location: mains.php");
   exit;
} 
else {
   $er = "Some error occured please try again!";
}

答案 4 :(得分:0)

//编辑

我刚刚注意到你的标题代码在else语句中,它可以 在真实之前由if语句引起。

你应该把“死();”在您的标题代码之后 所以PHP不会继续运行代码 并可能中断设置标题。 并且请尝试使用绝对URL,因为它有时会导致 PHP的问题。

代码:

header("Location: http://www.website.com/mains.php");
die();

答案 5 :(得分:0)

尝试使用javascript location.href,如下所示:

echo '<script>location.href = "example.com/mains.php";</script>';

而不是

header("Location: mains.php");