apache2和php - 请指教

时间:2016-07-07 05:30:58

标签: php mysql apache2

好吧,我最初发布了一个关于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

&GT;

这一直给我一个500内部服务器错误,指示php脚本,(在firefox的firebug中),我无法弄清楚我哪里出错了。如果需要,我也可以发布ajax。

2 个答案:

答案 0 :(得分:3)

您正在使用查询字符串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 ------
}

答案 1 :(得分:1)

我不知道为什么它会抛出500错误,但你的代码显然有错误。

您的$query变量是字符串,但没有$query->bind_param()方法。我假设您正在尝试这样做(bind_param是MySqli而bindParam是PDO):

$dbh->prepare($query);
$sth->bindParam($uname, $upassword);

此外,由于您通过网址传递变量,因此您必须使用$_GET而不是$_POST。只需确保首先检查$_GET中是否存在这些参数,然后再使用它们:

if (!empty($_GET['name'])) {
    $uname = $_GET['name'];
}

注意 ?name=uname&password=upassword表示变量名称为namepassword。它的值为$_GET['name'] = 'uname' / $_GET['password'] = 'upassword'

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