XMLHttpRequest не перенаправляет на URL после выполнения запроса PHP PDO, когда пользователь нажимает на уведомление - PullRequest
0 голосов
/ 16 апреля 2019

У меня проблема с тем, что XMLHttpRequest не перенаправляет пользователя на URL-адрес, который я указал, когда пользователь нажимал на уведомление.Когда я использую MySQLi, XMLHttpRequest работает нормально.Но мне нужно использовать PHP PDO вместо MySQLi, поэтому я попытался преобразовать код MySQLi в PHP PDO.База данных обновляется, когда я использую код PDO, но пользователь не перенаправляется на URL.Кроме того, появилось предупреждение, но он говорит только об успехе, например ниже.

enter image description here

Вот код XMLHttpRequest.

<?php
    $sql = "SELECT COUNT(*) AS notificationCount FROM appointment
                    LEFT JOIN users AS lecturer ON appointment.lecturer_id = lecturer.username
                    LEFT JOIN course AS course ON appointment.course = course.course_id
                    WHERE appointment.lecturer_id = :user AND appointment_status='Pending';
                    ";

            $notificationURL = '../lecturer/lecturer-view-pending-appointment.php';

            $stmt = $db->prepare($sql);
            $stmt->execute(array('user' => $user));

            $row = $stmt->fetch();

            $notificationCount = $row [ 'notificationCount' ];

            echo 
            "
                <script type='text/javascript'>
                function HandleNotificationsLecturer()
                {
                    // AJAX codes
                    var xmlhttp

                    if ( window.XMLHttpRequest )
                        xmlhttp = new XMLHttpRequest()
                    else
                    {
                        // code for IE6, IE5
                        xmlhttp = new ActiveXObject ( 'Microsoft.XMLHTTP' )
                    }

                    xmlhttp.onreadystatechange = function()
                    {
                        if ( this.readyState == 4 && this.status == 200 )
                        {
                            if ( xmlhttp.responseText === 'Success' )
                            {
                                location.href = '$notificationURL'
                            }
                            else
                                alert ( xmlhttp.responseText )
                        }
                    }

                    xmlhttp.open ( 'POST', '../ajax/ajax-remove-notification-lecturer.php', true )
                    xmlhttp.setRequestHeader ( 'Content-type', 'application/x-www-form-urlencoded' )
                    xmlhttp.send ( 'lecturer_id=$user' )
                }
                </script>
            ";
?>

Вот код при использовании MySQLi:

<?php
        $lecturer_id = $_POST['lecturer_id'];
        require_once ( '../database.php' );
        $connection = OpenDatabase();
        QueryDatabase ( $connection, "UPDATE appointment SET appointment_status='Notified' WHERE lecturer_id='$lecturer_id' AND appointment_status='Pending'" );
        CloseDatabase ( $connection );
        die ( 'Success' );
?>

А вот код для PHP PDO:

<?php
require ("../global-include.php");

    if (isset($_POST['lecturer_id']))
    {
        $remove_notification_query = "UPDATE appointment SET appointment_status='Notified' WHERE lecturer_id=:lecturer_id AND appointment_status='Pending'";
        $remove_statement= $db->prepare($remove_notification_query);
        $remove_statement->bindParam(':lecturer_id', $_POST['lecturer_id']);
        $remove_statement->execute();
        die ( 'Success' );
    }
?>

Соединение с базой данных для MySQLi и для PDO также отличается,Вот соединение с базой данных для MySQLi:

<?php
    function OpenDatabase()
    {
        $dbhost = 'localhost';
        $dbuser = 'root';
        $dbpassword = '';
        $database = 'stulec';

        // open a connection to the database server
        $connection = new mysqli ( $dbhost, $dbuser, $dbpassword, $database );

        if ( $connection->connect_errno )
        {
            die ( 'Connect failed: ' . $connection->connect_error );
        }

        return $connection;
    }

    function QueryDatabase ( $connection, $query )
    {
        $query = str_replace ( '"', '`', $query );

        $result = $connection->query ( $query );

        if ( !$result )
        {
            die ( 'Error in query: ' . $connection->error );
        }

        return $result;
    }

    function GetNumRows ( $result )
    {
        return $result->num_rows;
    }

    function ReadField ( $result, $row, $field )
    {
        $result->data_seek ( $row );
        $row = $result->fetch_assoc();

        return $row [ $field ];
    }

    function GetLastInsertedID ( $connection )
    {
        return $connection->insert_id;
    }

    function CloseDatabase ( $connection )
    {
        $connection->close();
    }
?>

А вот соединение с базой данных для PDO:

<?php
    class PDOConnection 
    {
        private static $dbConnection = null; //static variables - doesn't change, when update, update for everyone

        /** 
         *Return DB connection or create initial connection
        *@return object (PDO connection)
        *@access public
        */

        public static function getConnection()
        {
            //create connection
            if (!self::$dbConnection) 
            {
                try
                {
                        self::$dbConnection = new PDO ('mysql:host=localhost; dbname=stulec','root','');
                        self::$dbConnection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
                }

                catch(PDOException $e) 
                {
                    echo $e->getMessage();
                }
            }

            return self::$dbConnection; //return the connection
        }
    } //end of class
?>

Я проверил и проверил свой сетевой ответ, но ничего не вышло,

1 Ответ

0 голосов
/ 16 апреля 2019

ОБНОВЛЕНИЕ:

Я наконец получил ответ от помощи друга.Он сказал мне, что это из-за смерти («Успех»);У кубика («Успех») появилось лишнее пространствоПоэтому он посоветовал использовать

if ( xmlhttp.responseText.indexOf('Success') >= 0)

вместо

if ( xmlhttp.responseText == 'Success' )

indexof проверит, содержит ли строка слово Success независимо от чего-либо еще.

Кредит этому другуи любой другой, кто думает о том, как мне помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...