PHP header 调用后 JavaScript 不运行

标签 javascript php

我正在尝试使用 PHP header /甚至是围绕 php 内部调用的 JavaScript 解决方案重定向到我的clients.php 网页。

问题是 PHP header /解决方法可以完美地加载网页,但 Javascript 仍然没有运行。

附加说明是,在 header 甚至 Javascript 重定向到页面后,尝试刷新页面将不会加载 Javascript。只有在网页之间切换并返回clients.php Javascript 才会真正运行。

我也尝试过这个:JavaScript not loading after PHP header() redirect

但没有效果。

这是我的部分代码分段,只是因为它相当长。

clients.php

<!-- Bootstrap core JavaScript-->
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="vendor/jquery-easing/jquery.easing.min.js"></script>
<!-- Page level plugin JavaScript-->
<script src="vendor/chart.js/Chart.min.js"></script>
<script src="vendor/datatables/jquery.dataTables.js"></script>
<script src="vendor/datatables/dataTables.bootstrap4.js"></script>
<!-- Custom scripts for all pages-->
<script src="js/sb-admin.min.js"></script>
<!-- Custom scripts for this page-->
<script src="js/sb-admin-datatables.min.js"></script>
<script src="js/sb-admin-charts.min.js"></script>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" ty    pe="text/javascript"></script>
    <link href="../../css/toastr.css" rel="stylesheet"/>
    <script src="../../js/toastr.js"></script>
    <script type="text/javascript">
            var tmp = "<?php $tmp = $_SESSION['message_success']; echo "$tmp"; ?>";
            alert(tmp + " h");
            $( document ).ready(function() {
                    <?php
                        if($_SESSION['sysLogin'] == "success") {
                            $_SESSION['sysLogin'] = "";
                            $user = $_SESSION['user'];
                            echo "toastr.success('Welcome $user', 'User has logged in');";
                        }
                        if($_SESSION['message_success'] != "") {
                            $msg = $_SESSION['message_success'];
                            $_SESSION['message_success'] = "";
                            echo "toastr.success('$msg', 'Success!');";
                        }
                        if($_SESSION['message_error'] != "") {
                            $msg = $_SESSION['message_error'];
                            $_SESSION['message_error'] = "";
                            echo "toastr.error('$msg', 'Error!');";
                        }
                        if($_SESSION['message_warning'] != "") {
                            $msg = $_SESSION['message_warning'];
                            $_SESSION['message_warning'] = "";
                            echo "toastr.warning('$msg', 'Warning!');";
                        }
                     ?>
            });
    </script>
    </div>
    </body>

    </html>

脚本.php

  if($update_statement) {
      $_SESSION['message_success'] = "$_membername's Careplan has been successfully updated.";
      echo "<script type='text/javascript'>window.location.href = '../clients.php';</script>";
      //header("Location:". $redirect);
      //exit();
    }

请注意,clients.php 和 script.php 不在同一个文件中。

根据 Riggs 请求

<?php
session_start();
$message="";
if(isset($_POST["login"])) {
    $redirect = NULL;
    if($_POST['redirect'] != '') {
        $redirect = $_POST['redirect'];
    }
    if(empty($_POST['username']) || empty($_POST['password'])) {
        $message = "Both fields must be filled out.";
        $_SESSION['sysLogin'] = "$message";
        header("location: ../login.php?redirect=" . urlencode($redirect));
    } else {

        require('server_connection.inc');
        $connection = connect_to_db(DB_SERVER, DB_UN, DB_PWD, DB_NAME);

        $user=mysqli_real_escape_string($connection, $_POST['username']);
        $pass=mysqli_real_escape_string($connection, $_POST['password']);
        $statement = "select * from Credentials where UserName='$user' AND Password='$pass';";
        $result = $connection->query($statement);

        if($result->num_rows == 1) {
            // lets determine the type of user that logged in
            // if not employee but CEO, Manager, ETC, its an Admin
            $employeeid = ($result->fetch_assoc())["EmployeeID"];
            $check = "select Employees.Position, Employees.Name, Employees.ID from Credentials, Employees where (Credentials.EmployeeID = Employees.ID) AND Employees.ID = '$employeeid';";
            $result_two = $connection->query($check);
            if($result->num_rows == 1) {
                $the_row = $result_two->fetch_assoc();
                if($the_row["Position"] == "Employee") {
                    $name = $the_row["Name"];
                    $the_id = $the_row['ID'];
                    $_SESSION['logon'] = true;
                    $_SESSION['user'] = "$name";
                    $_SESSION['type'] = "employee";
                    $_SESSION['sysLogin'] = "success";
                    $_SESSION['user_id'] = $the_id;
                    mysqli_close($conection);
                    if($redirect) {
                          header("Location:". $redirect);
                    } else {
                        header("location: ../index.php");
                    }
                    exit();
                } else if($the_row["Position"] == "CEO" || $the_row["Position"] == "Manager") {
                    $name = $the_row["Name"];
                    $the_id = $the_row['ID'];
                    $_SESSION['logon'] = true;
                    $_SESSION['user'] = "$name";
                    $_SESSION['type'] = "admin";
                    $_SESSION['sysLogin'] = "success";
                    $_SESSION['user_id'] = $the_id;
                    mysqli_close($conection);
                    if($redirect) {
                            header("Location:". $redirect);
                    } else {
                        header("location: ../index.php");
                    }
                    exit();
                }
            } else {
                $message = "Unable to Parse Employee. Please contact your sites Administrator.";
                $_SESSION['sysLogin'] = "$message";
                mysqli_close($conection);
                header("location: ../login.php?redirect=" . urlencode($redirect));
            }
        } else if($result->num_rows == 0){
            $message = "Incorrect username or password";
            $_SESSION['sysLogin'] = "$message";
            mysqli_close($conection);
            header("location: ../login.php?redirect=" . urlencode($redirect));
        } else {
            $message = "Database Login Error. Too many retrieved accounts. Please contact your sites Administrator.";
            $_SESSION['sysLogin'] = "$message";
            mysqli_close($conection);
            header("location: ../login.php?redirect=" . urlencode($redirect));
        }
    }
}

function write_to_log($message) {
    $file = fopen("logfile.txt", "w") or die("Unable to open file!");
    fwrite($file, "$message\n");
    fclose($file);
}

function connect_to_db($server, $username, $pwd, $dbname) {
    $conn = mysqli_connect($server, $username, $pwd);
    if(!$conn) {
            echo "" . mysqli_error($conn);
            exit;
    }
    $dbh = mysqli_select_db($conn, $dbname);
    if(!$dbh) {
        echo "" . mysqli_error($conn);
        exit;
    }
    return $conn;
}
?>

该脚本仅链接 session ,同时还检查用户的登录有效性

消息传递确实可以与另一个文件“dashboard.php”的 header 一起使用,但从 script.php 重定向到dashboard.php 不会产生消息,因此仍然存在暗示。

最佳答案

由于您尚未启动 session ,因此未定义 tmp JavaScript 变量。在代码顶部包含 session_start();

<?php session_start(); ?>
<!-- Bootstrap core JavaScript-->
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="vendor/jquery-easing/jquery.easing.min.js"></script>
<!-- Page level plugin JavaScript-->
<script src="vendor/chart.js/Chart.min.js"></script>
<script src="vendor/datatables/jquery.dataTables.js"></script>
<script src="vendor/datatables/dataTables.bootstrap4.js"></script>
<!-- Custom scripts for all pages-->
<script src="js/sb-admin.min.js"></script>
<!-- Custom scripts for this page-->
<script src="js/sb-admin-datatables.min.js"></script>
<script src="js/sb-admin-charts.min.js"></script>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" ty    pe="text/javascript"></script>
    <link href="../../css/toastr.css" rel="stylesheet"/>
    <script src="../../js/toastr.js"></script>
    <script type="text/javascript">
            var tmp = "<?php $tmp = $_SESSION['message_success']; echo "$tmp"; ?>";
            alert(tmp + " h");
            $( document ).ready(function() {
                    <?php
                        if($_SESSION['sysLogin'] == "success") {
                            $_SESSION['sysLogin'] = "";
                            $user = $_SESSION['user'];
                            echo "toastr.success('Welcome $user', 'User has logged in');";
                        }
                        if($_SESSION['message_success'] != "") {
                            $msg = $_SESSION['message_success'];
                            $_SESSION['message_success'] = "";
                            echo "toastr.success('$msg', 'Success!');";
                        }
                        if($_SESSION['message_error'] != "") {
                            $msg = $_SESSION['message_error'];
                            $_SESSION['message_error'] = "";
                            echo "toastr.error('$msg', 'Error!');";
                        }
                        if($_SESSION['message_warning'] != "") {
                            $msg = $_SESSION['message_warning'];
                            $_SESSION['message_warning'] = "";
                            echo "toastr.warning('$msg', 'Warning!');";
                        }
                     ?>
            });
    </script>
    </div>
    </body>

    </html>

关于PHP header 调用后 JavaScript 不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136625/

相关文章:

javascript - 将消息复制到另一个 channel

javascript - 如何避免 "this"引用DOM元素,引用对象

javascript - PHP数组转JS数组并重构

php - 如何在平面索引数组中复制值? (按顺序将所有元素追加到数组末尾)

javascript - 为什么我在访问由 getElementsByTagName 生成的节点列表的数字属性时得到 0(零)?

javascript - javascript 如何在 chrome 和 IE 上按预期工作,但在 FF 上却不行

javascript - 确认对话框多次触发

php - 将相同的数组键推到它旁边

javascript - 隐藏输入最大值大小

php - 如何实现类型化/类型安全的迭代器?