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
XAMPP 在 Windows 上的 PHP 运行速度太慢了 100 倍