Я начал изучать PHP, и мне нужна ваша помощь, потому что я пытаюсь написать в моей базе данных MySQL. Сценарий кажется прекрасным (для меня: D), и он не дает мне ошибок. Но когда я отправляю запрос, данные не отображаются в моей базе данных MySQL. Не могли бы вы мне помочь, пожалуйста?
Это мой код HTML/PHP:
<?php
session_start();
$_SESSION['message'] = '';
//connection variables
$host = '127.0.0.1';
$user = 'root';
$password = 'MyPassword';
$database= 'test';
$port= '3306';
//create mysql connection
$mysqli = new mysqli($host, $user, $password,$database,$port);
if ($mysqli->connect_errno) {
printf("Connection failed: %s\n", $mysqli->connect_error);
die();
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = $mysqli->real_escape_string($_POST['name']);
$email = $mysqli->real_escape_string($_POST['email']);
if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ('$name','$email')") == true) {
$_SESSION['message'] = "registration succesfull! Added $name to the database";
} else {
$_SESSION['message'] = "User can't be added to the database";
}
}
?>
<!DOCTYPE html>
<html>
<center>
<h1>Inputs</h1>
<form class="form" action="welcome.php" method="post" autocomplete="off">
<div class="alert alert-error"><?= $_SESSION['message'] ?></div>
<input type="text" name="name" placeholder="Insert your name" /> <br>
<input type="email" name="email" placeholder="Insert your email"/><br>
<input type="submit" name="submit" placeholder="Submit"/>
</form>
</center>
</html>
Это база данных: [Структура таблицы] [ ] 1 [Информация о базе данных]
У вас есть синтаксическая ошибка в вашем запросе, попробуйте изменить запрос INSERT
в условии if здесь:
if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ('$name','$email')") == true) {
$_SESSION['message'] = "registration succesfull! Added $name to the database";
} else {
$_SESSION['message'] = "User can't be added to the database";
}
Чтобы это было так:
if ($mysqli->query("INSERT INTO contatti (name, email)
VALUES('$name', '$email')") == true) {
$_SESSION['message'] = "registration succesfull! Added $name to the database";
} else {
$_SESSION['message'] = "User can't be added to the database";
}
Вы должны использовать подготовленные инструкции для MYSQL и PHP, если это возможно, по крайней мере, чтобы защитить себя от SQL-инъекции (SO Ref).
Тем не менее, когда вы читаете эту строку:
if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ($name,$email)") == true)
Вы объединяете строки в свой SQL-запрос без кавычек, и строка запроса выглядит так: ($ name = 'test', $ email = 'test @test':
INSERT INTO 'contatti' ('name', 'email') VALUES (test,test@test)
: неправильный синтаксис
Вы должны избегать строк на SQL:
if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ('$name', '$email' )") == true)
Результирующий запрос должен выглядеть так: INSERT INTO 'contatti' ('name', 'email') VALUES ('test','test@test')
Изменить: обратите внимание, что таблица (contatti) и имя поля (имя, адрес электронной почты) должны быть окружены обратными окнами, а не одинарные кавычки (я не могу избежать обратных ссылок в цитате), а переменные $ name и $ email по одинарным кавычкам
Вместо этого используйте предварительные инструкции и параметры привязки: http://php.net/manual/en/mysqli-stmt.bind-param.php
Вы также можете отладить ответ сервера mysql с помощью error_list
:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$stmt = $mysqli->prepare("INSERT INTO 'contatti' ('name', 'email') VALUES (?,?)");
$stmt->bind_param('ss', $name, $email);
if ($stmt->execute()) {
/* ... */
}
else {
$errors = $stmt->error_list;
/* ... */
}
}