2016-07-07 7 views
-2

OK, ich habe ursprünglich eine Frage über php gepostet, aber seitdem habe ich festgestellt, dass es ein Problem mit der Serverkonfiguration sein kann, von dem ich wenig weiß. Ich habe das PHP-Skript für den Fall verlassen und hoffe, dass jemand einige Hinweise dazu haben könnte - ich habe bereits die Berechtigungen geprüft (755).apache2 und php - bitte rate

"NetworkError: 500 Internal Server Error - http://localhost/register.php?name=uname&password=upassword"

mir jemand hier würde die Hoffnung war in der Lage meine Fehler zu fangen - sorry, wenn dies gehe, wie ich offensichtlich ist das Lernen ich habe.

<?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 

?>

Das hält mir einen 500 Internal Server Error gibt die PHP-Skript angibt, (in Firebug für Firefox), und ich kann wirklich nicht herausfinden, wo ich falsch gehe. Ich kann bei Bedarf auch Ajax veröffentlichen.

+0

nur eine Randnotiz: Niemals Authentifizierungsdaten über $ _GET übergeben. Obwohl $ _POST auch mit einem Mitm-Angriff erfasst werden kann, wird $ _GET in jeder einzelnen Logdatei angezeigt. Außerdem: Speichern Sie Passwörter niemals als Klartext, verwenden Sie bitte [password_hash] (http://php.net/manual/en/function.password-hash.php) –

Antwort

3

Sie verwenden eine Abfragezeichenfolge http://localhost/register.php?name=uname&password=upassword". Es ist eine reine GET-Methode.

Sie müssen überprüfen, ob die GET-Methode vorhanden ist, dann müssen Sie auf die GET-Methodendaten zugreifen.

+0

Es kann eine beliebige (POST/PUT/DELETE) HTTP-Methode sein "REQUEST_URI" wurde jedoch immer in "$ _GET" superglobal geparst. –

+0

Danke für die Info - wenn ich nur alle $ _GET durch $ _POST ersetze und ich werde die POST Methode richtig benutzen? Muss ich etwas ändern, um sicherzustellen, dass POST nicht GET verwendet wird? – user6559071

+0

@ user6559071 Nichts benötigt. Wenn die Antwort erfüllt ist, markieren Sie diese als Antwort, indem Sie auf das Häkchen klicken. –

1

Ich weiß nicht, warum es 500 Fehler wirft, aber Sie haben eindeutig Fehler im Code.

Ihre $query Variable ist eine Zeichenfolge und hat keine $query->bind_param() Methode. Ich nehme an, Sie versuchen, dies zu tun (bind_param MySQLi ist während bindParam ist PDO):

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

Auch da Sie Variablen über URL sind vorbei, als Sie $_GET statt $_POST verwenden. So stellen Sie sicher, dass Sie zuerst überprüfen, ob diese Parameter in $_GET existiert und nur als sie verwenden:

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

HINWEIS?name=uname&password=upassword bedeutet Variablennamen sind name und password. Die Werte sind $_GET['name'] = 'uname'/$_GET['password'] = 'upassword'.

Niemals Benutzername und Passwort mit $ _GET übergeben, da es unsicher ist. Verwenden Sie besser eine sichere Datei, um sie zu speichern.