apache2 和 php - 请指教
apache2 and php - please advise
好的,我最初 post 提出了一个关于 php 的问题,但后来意识到这可能是服务器配置问题,对此我知之甚少。我留下了 php 脚本以防万一,希望有人对此有一些指示 - 我已经检查了权限 (755)。
"NetworkError: 500 Internal Server Error - http://localhost/register.php?name=uname&password=upassword"
我希望这里有人能够发现我的错误 - 如果这是显而易见的,我很抱歉我一直在学习。
<?php
define('USER', 'root');
define('PASS', 'password');
$dbh = new PDO('mysql:host=localhost;dbname=users', USER, PASS);
$uname = $_POST['uname'];
$upassword = password_hash($_POST['upassword'], PASSWORD_DEFAULT);
$query = 'INSERT INTO `users` (`name`, `password`) VALUES (?,?)';
$query->bind_param($uname, $upassword);
$queryResults = $dbh->prepare($query);
$queryResults->execute();
$queryResults = null;
$dbh = null; // close the connection
?>
这一直给我一个 500 内部服务器错误,指示 php 脚本(在 firebug for firefox 中),我真的不知道哪里出错了。如果需要,我也可以 post ajax。
您正在使用查询字符串 http://localhost/register.php?name=uname&password=upassword"
。它纯粹是一个 GET 方法。
您必须检查是否存在 GET 方法,然后您需要访问 GET 方法数据。
$uname = "";
if(isset($_GET['uname'])) {
$uname = $_GET['uname'];
}
$upassword = "";
if(isset($_GET['password'])) {
$upassword = $_GET['password'];
}
if(($uname != "") && ($upassword != "")) {
$upassword = password_hash($upassword, PASSWORD_DEFAULT)
$query = sprintf("INSERT INTO `users` (`name`, `password`) VALUES (%s, %s)", $uname, $upassword);
----- Statements ------
}
我不知道它为什么会抛出 500 错误,但您的代码显然有错误。
您的 $query
变量是字符串,它没有 $query->bind_param()
方法。我假设您正在尝试这样做(bind_param
是 MySqli 而 bindParam
是 PDO):
$dbh->prepare($query);
$sth->bindParam($uname, $upassword);
此外,由于您是通过 URL 传递变量,因此您必须使用 $_GET
而不是 $_POST
。只要确保您首先检查这些参数是否存在于 $_GET
中并且只使用它们:
if (!empty($_GET['name'])) {
$uname = $_GET['name'];
}
NOTE ?name=uname&password=upassword
表示变量名是name
和password
。它的值是 $_GET['name'] = 'uname'
/ $_GET['password'] = 'upassword'
.
切勿使用 $_GET 传递用户名和密码,因为它不安全。最好使用一些安全文件来保存它们。
好的,我最初 post 提出了一个关于 php 的问题,但后来意识到这可能是服务器配置问题,对此我知之甚少。我留下了 php 脚本以防万一,希望有人对此有一些指示 - 我已经检查了权限 (755)。
"NetworkError: 500 Internal Server Error - http://localhost/register.php?name=uname&password=upassword"
我希望这里有人能够发现我的错误 - 如果这是显而易见的,我很抱歉我一直在学习。
<?php
define('USER', 'root');
define('PASS', 'password');
$dbh = new PDO('mysql:host=localhost;dbname=users', USER, PASS);
$uname = $_POST['uname'];
$upassword = password_hash($_POST['upassword'], PASSWORD_DEFAULT);
$query = 'INSERT INTO `users` (`name`, `password`) VALUES (?,?)';
$query->bind_param($uname, $upassword);
$queryResults = $dbh->prepare($query);
$queryResults->execute();
$queryResults = null;
$dbh = null; // close the connection
?>
这一直给我一个 500 内部服务器错误,指示 php 脚本(在 firebug for firefox 中),我真的不知道哪里出错了。如果需要,我也可以 post ajax。
您正在使用查询字符串 http://localhost/register.php?name=uname&password=upassword"
。它纯粹是一个 GET 方法。
您必须检查是否存在 GET 方法,然后您需要访问 GET 方法数据。
$uname = "";
if(isset($_GET['uname'])) {
$uname = $_GET['uname'];
}
$upassword = "";
if(isset($_GET['password'])) {
$upassword = $_GET['password'];
}
if(($uname != "") && ($upassword != "")) {
$upassword = password_hash($upassword, PASSWORD_DEFAULT)
$query = sprintf("INSERT INTO `users` (`name`, `password`) VALUES (%s, %s)", $uname, $upassword);
----- Statements ------
}
我不知道它为什么会抛出 500 错误,但您的代码显然有错误。
您的 $query
变量是字符串,它没有 $query->bind_param()
方法。我假设您正在尝试这样做(bind_param
是 MySqli 而 bindParam
是 PDO):
$dbh->prepare($query);
$sth->bindParam($uname, $upassword);
此外,由于您是通过 URL 传递变量,因此您必须使用 $_GET
而不是 $_POST
。只要确保您首先检查这些参数是否存在于 $_GET
中并且只使用它们:
if (!empty($_GET['name'])) {
$uname = $_GET['name'];
}
NOTE ?name=uname&password=upassword
表示变量名是name
和password
。它的值是 $_GET['name'] = 'uname'
/ $_GET['password'] = 'upassword'
.
切勿使用 $_GET 传递用户名和密码,因为它不安全。最好使用一些安全文件来保存它们。