Ошибка 500 при выполнении запросов Mysqli

Я работаю над выборкой крошечной формы и вставкой в ​​​​систему базы данных MySQL с помощью PHP. Я заставлял этот тип кода работать раньше на локальном сервере WAMP, и теперь я пытаюсь сделать это по-настоящему на своем хостинге, но я продолжаю получать ошибку 500 Error Internal Server со следующим кодом.

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="Main_Stylesheet.css">
    <script   src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <title>Contact</title>
</head>
<body>
    <nav class="navbar navbar-default" id="Body_Nav" style="margin-bottom: none;">
        <div class="container-fluid">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php">Filosofie in Amsterdam</a>
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#myNavbar">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span> 
                </button>
            </div>
            <div class="collapse navbar-collapse" id="myNavbar" >
            <ul class="nav navbar-nav">
                <li><a href="index.php">Home</a></li>
                <li><a href="bestel.php">Bestel</a></li>
                <li><a href="preview.php">Preview</a></li>
                <li class="active"><a href="contact.php">Contact</a></li>
                <li><a href="us.php">Over Ons</a></li>
                <li><a href="donate.php">Doneren</a></li>
            </ul>
            </div>
        </div>
    </nav>
    <div class="container-fluid" id="Contact_Main_Header">
        <div class="row">
            <div class="col-lg-12">
                <h1 class="text-center" id="Contact_Main_Header_H1">Contact</h1>
            </div>
        </div>    
    </div>
    <div class="container">
        <div class="row">
            <div class="col-lg-6">
                <h2 class="text-center">Informatie</h2>
            </div>
            <div class="col-lg-6">
                <h2 class="text-center">Nieuwsbrief</h2>
                <p class="text-justify">Op de hoogte zijn van voortgang of het laatste nieuws? Geef je dan op via de nieuwsbrief hieronder:</p>
                <form method="post" action="formvalid.php">
                    <div class="form-group">
                        <label for="Contact_Form_Email">Email Adres:</label>
                        <input type="email" name="Contact_Form_Email" class="form-control" id="Contact_Form_Email" placeholder="Plaats hier je email adres" required>
                    </div>    
                    <div class="form-group">
                        <label for="Contact_Form_First_Name">Voornaam:</label>
                        <input type="text" name="Contact_Form_First_Name" class="form-control" id="Contact_Form_First_Name" placeholder="Plaats hier je voornaam" required>   
                    </div>
                    <div class="form-group">
                        <label for="Contact_Form_Last_Name">Achternaam:</label>
                        <input type="text" name="Contact_Form_Last_Name" class="form-control" id="Contact_Form_Last_Name" placeholder="Plaats hier je voornaam" required>
                    </div>    
                    <button type="submit" class="btn btn-default">Verzenden</button>
                </form>
            </div>
        </div>
    </div>
</body>
</html>

И PHP:

 <?php
 $Server = "localhost";
 $Username = "filoso1q_admin";
 $PW = "Foxtrot15";
 $DB = "filoso1q_nieuwsbrief";
 $connection = mysqli_connect($Server, $Username, $PW, $DB);

 if($connection = false) {
     die("Error: " . mysqli_error_connect());
 }  

 $Email = $_POST("Contact_Form_Email");
 $First_Name = $_POST("Contact_Form_First_Name");
 $Last_Name = $_POST("Contact_Form_Last_Name");

 $sql = "INSERT INTO `Users` ('User_ID', 'Email', 'First_Name', 'Last_Name')  VALUES (NULL, '$Email', '$First_Name',  '$Last_Name');";

 mysqli_query($sql);

 mysqli_close($connection);
 ?>

Я почти уверен, что кое-что из этого должно работать, но по какой-то причине я могу выполнять запросы только в самом PHPmyadmin. Хост, который у меня есть, использует веб-админку Cpanel для веб-сервера.


person Bo Kamphues    schedule 19.02.2016    source источник
comment
Помимо обмана, вам нужно подключить mysqli_query($connection, $sql); теперь у вас есть все ответы.   -  person Funk Forty Niner    schedule 20.02.2016
comment
$Email = $_POST("Contact_Form_Email"); должно быть $Email = $_POST["Contact_Form_Email"];, а для всех остальных $_POST   -  person Matt    schedule 20.02.2016
comment
^ и это тоже. От таких вопросов голова идет кругом.   -  person Funk Forty Niner    schedule 20.02.2016
comment
Хорошо, сделал это, но по-прежнему не выполняет фактический запрос. Никаких ошибок, ничего просто пустого.   -  person Bo Kamphues    schedule 20.02.2016
comment
if($connection = false) это задание. Вам нужно if($connection == false) для сравнения. Я просто открою вопрос и позволю кому-нибудь другому исправить все эти ошибки. Ничего, что не было рассмотрено в комментариях и thttp://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks   -  person Funk Forty Niner    schedule 20.02.2016


Ответы (1)


Я передумал и все-таки решил опубликовать ответ.

Вы присваиваете if($connection = false) один знак равенства, а не сравниваете с двумя if($connection == false).

Или обратитесь к руководству по mysqli_connect() за дополнительными параметрами:

Вы используете неправильные квалификаторы идентификаторов для столбцов в запросе. Это должны быть тики, а не обычные кавычки.

Примечание о галочках: они вам даже не нужны, поскольку вы не используете ни один из зарезервированные слова MySQL, а также они не содержат пробелов, дефисов или любых других символов, на которые MySQL будет жаловаться, поэтому вы можете безопасно удалить их из имен столбцов.

Затем вы использовали неправильный тип скобок для ваших массивов POST. Вы использовали (...), а не квадратные [...].

Вы также не передали соединение с вашим запросом, который должен быть первым параметром.

Перепишите с проверкой ошибок в запросе:

<?php
 $Server = "localhost";
 $Username = "filoso1q_admin";
 $PW = "Foxtrot15";
 $DB = "filoso1q_nieuwsbrief";
 $connection = mysqli_connect($Server, $Username, $PW, $DB);

 if($connection == false) {
     die("Error: " . mysqli_error_connect());
 }  

 $Email = $_POST["Contact_Form_Email"];
 $First_Name = $_POST["Contact_Form_First_Name"];
 $Last_Name = $_POST["Contact_Form_Last_Name"];

 $sql = "INSERT INTO `Users` (`User_ID`, `Email`, `First_Name`, `Last_Name`)  VALUES (NULL, '$Email', '$First_Name',  '$Last_Name');";

 mysqli_query($connection, $sql) or die(mysqli_error($connection));

 mysqli_close($connection);
 ?>

Добавьте отчеты об ошибках вверху ваш файл(ы), которые помогут найти ошибки.

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

Примечание. Отображение ошибок должно выполняться только на стадии подготовки, а не в рабочей среде.

и с or die(mysqli_error($con)) по mysqli_query() для отладки.

Также убедитесь, что для ваших столбцов выбраны правильные типы и что их длина достаточна для размещения данных.

Кроме того, убедитесь, что ваш столбец User_ID принимает значения NULL и не является AUTO_INCREMENT. В противном случае использование NULL не удастся.

Вам нужно будет изменить свой запрос на VALUES ('', '$Email', ...


Ваш существующий код открыт для инъекций SQL. Используйте mysqli_* с подготовленными операторами или PDO с подготовленные заявления.


Ошибка 500 является ошибкой сервера и может быть просмотрена в ваших журналах. Либо проверьте их, либо используйте отчеты об ошибках, как указано выше, чтобы их можно было просмотреть на экране.

person Funk Forty Niner    schedule 19.02.2016
comment
Спасибо, отчет об ошибке действительно спас меня. Оказалось, что имя пользователя было просто отказано в доступе из-за того, как веб-хостинг изначально настроил его! - person Bo Kamphues; 20.02.2016
comment
@BoKamphues Добро пожаловать, Бо, рад узнать, что проблема решена. Однако после того, как вы прошли через все это, ваш код действительно содержал много синтаксических ошибок и отсутствующих параметров, и это является причиной того, что я публикую этот ответ. - person Funk Forty Niner; 20.02.2016
comment
@BoKamphues Вопрос также должен быть помечен как решенный. Вот как meta.stackexchange.com/ вопросов/5234/, затем вернитесь сюда и сделайте то же самое с галочкой/галочкой, пока она не станет зеленой. Это информирует сообщество о том, что решение найдено. В противном случае другие могут подумать, что вопрос все еще открыт, и могут захотеть опубликовать (больше) ответов. И добро пожаловать в Стек. Ура! - person Funk Forty Niner; 20.02.2016
comment
Да, это действительно был очень грязный код. Сейчас займусь маркировкой! - person Bo Kamphues; 20.02.2016
comment
@BoKamphues Привет Бо. Прочитайте об использовании подготовленного оператора. В моем ответе есть ссылки, на которые можно посмотреть. Если и когда (или уже работаете с вашим проектом), вы должны их использовать. В противном случае ваш сервер/база данных может быть скомпрометирована. Береги себя. ;-) - person Funk Forty Niner; 20.02.2016