Я работал над крошечной выборкой формы и вставкой в систему базы данных 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 webadmin для веб-сервера.
Я передумал и решил опубликовать ответ в конце концов.
Вы назначаете if($connection = false)
с одним знаком равенства, а не с двумя if($connection == false)
,
Или обратитесь к руководству по mysqli_connect()
для больше вариантов:
Вы используете неправильные идентификаторы идентификаторов для столбцов в вашем запросе. Это должны быть галочки, а не обычные кавычки.
Sidenote о клещах: Вы даже не нуждаетесь в них, так как вы не используете какой-либо из Зарезервированные слова 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 является ошибкой сервера и может быть просмотрена в ваших журналах. Либо проверьте их, либо используйте отчеты об ошибках, как указано выше, для просмотра на экране.
Других решений пока нет …