2016-06-13 2 views
0

Я довольно новичок в PHP. Почему я получаю внутреннюю ошибку на следующий битный коде:Получение HTTP-ошибки 500 по следующему коду

// DB connection (working) 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    $arr = array(); // array for errors later used with http_build_query 

Синтаксического Имя пользователя:

$username = test_input($_POST["myusername"]); 
    if (!preg_match("/^[a-zA-Z ]*$/", $username)) { 
     $arr["userErr"] = "1"; // Invalid username! 
    } else { 
     $sql = "SELECT * FROM $tbl_name WHERE username = '$username';"; 
     $result = $conn->query($sql); 
     if ($result->num_rows > 0) { 
     $arr["userErr"] = "2"; // Username already registered! 
     } else { 
     $arr["userErr"] = "0"; // no problems 
     $ok++; 
     } 
    } 

Синтаксического пароль:

$password = test_input($_POST["mypassword"]); 
    if (strlen($password) < 6) { 
     $arr["passErr"] = "1"; // Password is too short! 
    } else if (strlen($password) > 30) { 
     $arr["passErr"] = "2"; // Password it too long! 
    } else { 
     $arr["passErr"] = "0"; // no problems 
     $ok++; 
    } 

Синтаксические электронная почта:

$email = test_input($_POST["myemail"]); 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $arr["emailErr"] = "1"; // Invalid email format 
    } else { 
     $sql = "SELECT * FROM $tbl_name WHERE email = '$email';"; 
     $result = $conn->query($sql); 
     if ($result->num_rows > 0) { 
     $arr["emailErr"] = "2"; // Email already registered! 
     } else { 
     $arr["emailErr"] = "0"; 
     $ok++; 
     } 
    } 

Если все хорошо, мы отправляем d ата в базу данных (если $ ок == 3) и отправить пользователя обратно в индекс с успешным сообщением (находится в index.php):

if($ok == 3) { 
$sql = "INSERT INTO $tbl_name (username, password, email) 
VALUES ('$username', '$password', '$email');"; 
$conn->query($sql); 
header("location:index.php?" . "good=true");} 

В противном случае, мы отправляем пользователю индексировать с сообщением об ошибке содержащий информацию для предупреждений:

} else { 
    header("location:index.php?" . http_build_query($arr)); 
} 
} 
+1

Добавить '' 'в "месте: index.php?". http_build_query ($ arr)) ':' location: index.php? ' –

+0

Ваш' SELECT * FROM $ tbl_name WHERE email = $ email' и 'SELECT * FROM $ tbl_name WHERE username = $ username;' являются недопустимыми и открываются для SQL инъекции. Строки должны быть кавычками в SQL. «Test_input» бесполезен в предотвращении инъекций SQL. – chris85

+0

в любое время, когда вы получаете ошибку 5xx, ваша первая остановка должна быть журналом ошибок веб-сервера. –

ответ

0

Проблема решена! Благодаря @u_mulder и @ chris85 за то, что он указал на ошибки, также, наконец, понял, что использовал неправильный метод подключения, который был частью проблемы.

$ сопп должен быть mysql_query