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表示变量名是namepassword。它的值是 $_GET['name'] = 'uname' / $_GET['password'] = 'upassword'.

切勿使用 $_GET 传递用户名和密码,因为它不安全。最好使用一些安全文件来保存它们。