2016-07-07 20 views
-2

OK、私はもともとこのことについてphpについて投稿しましたが、それ以来、私は少し知っているサーバ設定の問題であるかもしれないことに気がつきました。私は、PHPスクリプトを残して、誰かがこれについていくつかのポインタを持っていることを望んでいます - 私はすでにパーミッションをチェックしました(755)。apache2とphp - 助けてください

"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 

?>

これは(Firefox用放火魔に)、私のPHPスクリプトを示す500内部サーバーエラーを与え続け、と私は本当に私が間違っているつもりだところを見つけ出すことはできません。必要に応じて、私はajaxを投稿することもできます。

+0

ちょっとした注意:$ _GET経由で認証データを決して渡さないでください。 $ _POSTもmitm攻撃でスニッフィングできますが、$ _GETはすべての単一ログファイルに表示されます。またパスワードを平文で保存することは絶対に避けてください。[password_hash](http://php.net/manual/en/function.password-hash.php) –

答えて

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 ------ 
} 
+0

http(POST/PUT/DELETE)HTTPメソッドしかし、 'REQUEST_URI'は常に' $ _GET'のスーパーグローバルに解析されます。 –

+0

情報をありがとう - すべての$ _GETを$ _POSTに置き換えて、私はPOSTメソッドを正しく使用していますか? POSTでGETを使用しないように変更する必要がありますか? – user6559071

+0

@ user6559071何も必要ありません。答えが満たされている場合は、「Tick」をクリックしてこれを「Answer」とマークします。 –

1

私はなぜそれが500のエラーを投げているのか分かりませんが、明らかにコードに誤りがあります。

$query変数は文字列であり、$query->bind_param()メソッドはありません。あなたが$_GET代わりの$_POSTを使用しなければならないよりも、あなたは、URL経由で変数を渡しているので、

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

:私はあなたがこれを(bindParamはPDOている間bind_paramはmysqliのである)やろうとしていると仮定します。ちょうどあなたが最初のチェックを行い、これらのパラメータは$_GETにのみそれらを使用するよりも、存在している場合:

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

NOTE?name=uname&password=upasswordは、変数名がnamepasswordであることを意味します。値は$_GET['name'] = 'uname'/$_GET['password'] = 'upassword'です。

安全でないため、$ _GETを使用して決してユーザー名とパスワードを渡しません。安全なファイルを使用して保存してください。

関連する問題