Php, js注册成功后重定向,它插入用户但不重定向


Php, js redirecting after successful registering, It inserts the user but won't redirect

<?php
    $con = mysqli_connect("localhost", "root", "", "" ) or die("Neuspjelo spajanje");
        function InsertUser(){  global $con;
            if(isset($_POST['sign_up'])){   
        $name = mysqli_real_escape_string($con, $_POST['u_name']);
        $pass = mysqli_real_escape_string($con,$_POST['u_pass']);
        $email = mysqli_real_escape_string($con,$_POST['u_email']);
        $country = mysqli_real_escape_string($con,$_POST['u_country']);
        $gender = mysqli_real_escape_string($con,$_POST['u_gender']);
        $b_day = mysqli_real_escape_string($con,$_POST['u_birthday']);      
        $date = date("m-d-Y");
        $status = "unverified";
        $posts = "No";
        $get_email = "select * from users where user_email='$email'";
        $run_email = mysqli_query($con, $get_email);
        $check = mysqli_num_rows($run_email);

$insert = "insert into users (user_name, user_pass, user_email, user_country, user_gender, user_b_day, 
            user_image, register_date, last_login, status, posts) values 
            ('$name','$pass', '$email', '$country', '$gender', '$b_day', 'default.jpg',
             '$date', '$date', '$status', '$posts')";
                $run_insert = mysqli_query($con, $insert);
        $result = mysql_query($insert);
        if($result){
            echo "<script>alert ('You're successfully registered!')</script>";
            echo "<script>window.open('home.php', '_self')</script>";
        }



            }
}
?>

你不能回显javascript并在已经加载的页面中运行它。这需要是客户端ajax调用的结果,重定向来自ajax回调。如果您不介意放弃警告,您可以从php:

发出重定向。
header('Location: home.php');

:

$.ajax({
   type: "GET",
   url: "your_insert_user.php"
}).success(function(xhr) {
   alert ("You're successfully registered!");
   window.open('home.php', '_self');
}).fail(function (jqXHR, status, errorThrown) {
   //something else here
});

但是,为什么要发出一个ajax调用只是为了重定向?此外,您需要从插入脚本发出适当的响应:

if ($result) { echo ""; } //issues a "200 OK"
else { header("HTTP/1.1 422 Unprocessable Entity"); } //fires the failure callback in ajax

我将传递一个条件GET或POST参数到home.php与一些值标志,并在那里显示您的消息

根据你上面的帖子,你在这里处理两个独立的问题。

你说"它插入",所以我假设这意味着mysql查询插入新行到你的数据库成功完成。然后你发送一些HTML代码,包含一个(有点混乱的)Javascript片段,到浏览器,它应该发出一个重定向请求到客户端的web浏览器,这没有期望的结果,看到你写它"不会重定向"。

请记住,重定向是由浏览器执行的,依赖于浏览器的功能和/或设置,并且首先需要适当的javascript。

如何正确地从浏览器请求重定向已经讨论过了。

首先,删除这一行$result = mysql_query($insert);然后修改你的代码并添加这个,希望它能工作:

$run_insert = mysqli_query($con, $insert);
if($run_insert){
  echo "<script>alert ('You''re successfully registered!')</script>";
  echo "<script>window.open('home.php', '_self')</script>";
}