Javascript 在 XAMPP 上的 PHP 中不起作用

Posted

技术标签:

【中文标题】Javascript 在 XAMPP 上的 PHP 中不起作用【英文标题】:Javascript not working in PHP on XAMPP 【发布时间】:2015-02-27 22:03:22 【问题描述】:

我一直在尝试让它工作,当我在一个或两个字段上单击少于 3 个字符的注册时,它不会弹出一个框来说明它应该说什么,当我单击上面的注册时3 两者都不会给出确认或错误,更不用说将信息插入数据库了。

<?php

    $sqlHost = 'localhost';
    $sqlUser = 'root';
    $sqlPass = 'hidthepassword';
    $sqlDatabase = 'RPG';

    $connection = new PDO('mysql:host='.$sqlHost.';dbname='.$sqlDatabase.';charset=utf8', $sqlUser, $sqlPass);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


    $username = null;
    $password = null;

    if(isset($_GET['user'])) 
        $username = $_GET['user'];
    

    if(isset($_GET['pass'])) 
        $pass = $_GET['pass'];
    

    if((isset($username)) && (isset($password))) 
        // TODO SQL
        $salt = genSalt(40);
        $passHash = md5(md5($salt) . md5($password));
        $statement = $connection->prepare("INSERT INTO `rpg`.`accounts` (`id`, `username`, `password`, `salt`) VALUES (:user, :pass, :salt);");
        $statement->bindParam(":user", $username);
        $statement->bindParam(":pass", $passHash);
        $statement->bindParam(":salt", $salt);
        if($statement->execute()) 
            echo "Thank-you for your registration, " . $username;
         else 
            echo "Sorry, your registration failed.";
        

     else 
        // DISPLAY

            echo '<input type="text" id="user" placeholder="username"/>
        <input type="text" id="pass" placeholder="password"/>
        <button id="button">Register</button>

        <script>
            var r = document.getElementById("button");
            button.addEventListener("click", function() 
                var user = document.getElementById("user");
                var pass = document.getElementById("pass");
                if(user.value.length < 3 || pass.value.length < 3) 
                    alert("Please enter a valid username or password");
                 else 
                    window.location = "index.php?user="user.value+"&pass="+pass.value;
                
            ));     
        </script>
        ';
    

    function genSalt($length) 
        $variables = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789";
        $charLength = strlen($variables);
        $returned = "";
        for($i = 0; $i < $length; $i++) 
            $returned .= $variables[rand(0, ($charLength - 1))];
        
        return $returned;
    
?>

【问题讨论】:

【参考方案1】:

这里有几个错误:

首先,在 PHP 中,您从 $password 切换到 $pass。所以修复它:

if (isset($_GET['pass'])) 
    $password = $_GET['pass']; // was $pass = $_GET['pass'];

javascript 中,我发现您的 addEventListener 代码有 3 个错误:

正如其他人所提到的,您从 r 切换到 button 您打算使用相同的参考。 您在尝试将 user.value 连接到位置字符串时缺少一个加号 (+)。 您使用“));”关闭事件监听器而不是“);”,这是一个语法错误。

最终结果:

// was var r = ...
var button = document.getElementById("button");
button.addEventListener("click", function () 
    var user = document.getElementById("user");
    var pass = document.getElementById("pass");
    if (user.value.length < 3 || pass.value.length < 3) 
        alert("Please enter a valid username or password");
     else 
        // was "index.php?"user.value ...
        window.location = "index.php?user="+user.value+"&pass="+pass.value;
    
); // was ));

【讨论】:

修复了大部分,非常感谢!现在它只是不将信息插入数据库。 @TylerJamesTurton:大概“id”是一个自动递增的主键,所以你不应该将它包含在你的插入列中:“INSERT INTO `rpg`.`accounts` (`username` , `password`, `salt`) ... 删除了,还是什么都没有。 @TylerJamesTurton:您需要打开 PHP 错误报告并找出具体问题是什么 (php.net/manual/en/function.error-reporting.php)。 已修复,功能齐全。是一个人告诉我将 $_GET 转换为 $_POST。我扭转了这一点,它奏效了 A+【参考方案2】:

您将按钮定义为r

var r = document.getElementById("button");

然后将事件侦听器绑定到名为button 的变量:

button.addEventListener("click", function()

在你的情况下应该是r

此外,您应该为此使用 POST 而不是 GET(或任何对您的应用程序/数据库/等进行更改的东西)

【讨论】:

将 var 更改为按钮并将 GET 更改为 POST,但仍然不是雪茄。 您还需要更改 window.location 部分,而不仅仅是 PHP 代码。 window.location 将浏览器重定向到新 URL,但浏览器仍会发送 GET 请求。如果你使用 jQuery 检查:api.jquery.com/jquery.post 即使我更改它也没有任何反应。就像,该框仍然没有弹出,当两个字段都在 3 个字符以下时它应该弹出。

以上是关于Javascript 在 XAMPP 上的 PHP 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac 上的 XAMPP 上安装 PHP 国际化扩展 (Intl)

表单到电子邮件 - Xampp、PHP、Javascript、MAC OS

如何在 Mac 上的 XAMPP 上运行 PHP 文件

XAMPP 在 Windows 上的 PHP 运行速度太慢了 100 倍

如何在 Ubuntu 16.04 上的 XAMPP 中安装较旧的 PHP 版本?

PHP 在 Windows 上的 Xampp 中正确获取“应用程序根目录”