【问题标题】:PHP in JavaScript brokes all scriptsJavaScript 中的 PHP 破坏了所有脚本
【发布时间】:2019-02-24 15:51:12
【问题描述】:

当我在 JavaScript 中使用 PHP 时,所有脚本都不起作用... 即使我在评论中使用 php。

<script> 
//var variable = <?php echo json_encode($_SESSION['abc']); ?>; 
</script>

上面的这条评论破坏了&lt;script&gt;&lt;/script&gt;标签中的所有脚本。 当我用评论删除这一行时,每个脚本都会起作用。 同样的事情是当我只想在 JavaScript 中使用 PHP(不加注释)。 你能帮帮我吗?

这是我剪掉的代码(只给你必要的部分代码),请帮忙:) :

<?php
    session_start();

    if (isset($_POST['login']) && isset($_POST['password']) && isset($_POST['email']))
    {
        $validation = true;

        $firstName = $_SESSION['firstName'];
        $lastName = $_SESSION['lastName'];
        $street = $_SESSION['street'];
        $phone = $_SESSION['phone'];
        $login = $_POST['login'];
        $password = $_POST['password'];
        $email = $_POST['email'];


        require_once "connect.php"; 

        mysqli_report(MYSQLI_REPORT_STRICT); 

        try
        {
            $connection = new mysqli($host, $db_user, $db_password, $db_name);
            if($connection->connect_errno!=0)
            {
                throw new Exception(mysqli_connect_errno());
            }
            else
            {
                if ($validation == true) // when validation process will be successfuly done - i cut validation process
                {
                    if($connection->query("INSERT INTO users values (NULL, '$firstName', '$lastName', '$street', '$phone', '$login', '$password', '$email')"))
                    {
                        $_SESSION['abc'] = "done";
                        //here is also header(location) to login page
                    }
                    else
                    {
                        throw new Exception($connection->error);
                    }
                }
                $connection->close();
            }
        }
        catch(Exception $e)
        {
            echo '<div class="error">error. sorry, please to register in other term</div>';
        }
    }
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script>
//there are other functions for local/session storage

function deleteSessionData()
{
        var variable = "<?php echo $_SESSION['abc']; ?>";

            if(variable == "done")
            {
                sessionStorage.removeItem('firstName');
                sessionStorage.removeItem('lastName');
                sessionStorage.removeItem('street');
                sessionStorage.removeItem('phone');
                sessionStorage.removeItem('login');
                sessionStorage.removeItem('password');
                sessionStorage.removeItem('email');
            }

}
</script>
</head>
<body>
        <form id="myForm" method="post">
                    <label for="login">Login: </label>
                        <input type="text" id="login" name="login">
                    <label for="password">Password: </label>
                        <input type="text" id="password" name="password">
                    <label for="email">E-mail:</label>
                        <input type="email" id="email" name="email">
                    <button onclick="java script: document.getElementById('myForm').submit();deleteSessionData();">Register</button>
        </form>
</div>
</body>
</html>

【问题讨论】:

  • //var variable = "";
  • 我看不出这最终会如何创建无效的 JS。您无法向json_encode 提供任何输入,这会导致输出中出现换行符(不使用漂亮打印),因此这应该始终作为 JS 源代码中的单行注释结束。 $_SESSION['abc'] 中的实际内容是什么?
  • 其实我不想评论这一行。我只是想知道为什么即使有评论它仍然会“破坏”我的脚本。我在第一个问题下写了另一个答案:P
  • 你打开display_errors了吗?如果$_SESSION['abc'] 未定义,那么它会发出通知,如果您将其回显到页面,那么它会破坏您的脚本。无论如何,除非您向我们展示此代码实际生成的源代码,否则我们很难为您提供帮助。
  • 我想我没有打开这个选项。好的,我将删除代码中不必要的部分并将其发送到这里。谢谢

标签: javascript php comments


【解决方案1】:

你也需要注释php

//var variable = <?php // echo json_encode($_SESSION['abc']); ?>;

我不会在没有卫生条件的情况下将 PHP 注入到 javascript 中。

【讨论】:

  • json_encode 已经在字符串变量周围加上引号,添加额外的会产生语法错误(假设该行在某些时候未注释)
猜你喜欢
  • 2013-11-27
  • 2016-11-13
  • 2013-01-17
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多