У меня есть этот код (HTML-форма) и еще один файл (PHP-логика), но при нажатии на кнопку «Отправить» ничего не происходит - ошибок тоже нет. Пожалуйста, помогите в чем дело.
<html>
<head>
<title> Registeration Form</title>
<link rel = "stylesheet" type = "text/css" href = "design.css">
</head>
<body>
<div class = "title"><h1>Register form </h1></div>
<div class = "container">
<div class = "left"></div>
<div class = "right">
<div class = "formBox">
<form action = "" method = "POST">
<input type = "text" id = "fname" name = "firstname" placeholder = "First Name"/>
<input type = "text" id = "lname" name = "lastname" placeholder = "Last Name"/>
<input type = "text" id = "email" name = "email" placeholder = "Email"/>
<input type = "password" name = "password1" placeholder = "Password" />
<input type = "password" name = "password2" placeholder = "Confirm Password" />
<input type = "submit" name = "submit">
</form>
</div>
</div>
</div>
<?php
if (isset($_POST["submit"]))
{
require'dbconnect.php';
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$email = $_POST["email"];
$password = $_POST["password1"];
$confirmPass = $_POST["password2"];
$encryptedPassword = md5($password);
mysqli_query($link,"insert into users(FirstName, LastName, Email, Password)
values ($firstname, $lastname, $email,'$encryptedPassword')");
echo "<br>";
}
?>
</body>
</html>
Вот код PHP, который подключается к SQL ... Я использую бит WAMP64 в Windows 10, но у меня аналогичная установка, у которой нет проблем, но этот код не работает ... Я пробовал все, что мог.
<?php
//Hostname on which MYSQL is stored
$hostname = "localhost";
//MySQL server Username ... which is root
$username = "root";
// MySQL password which by default is empty
$password = "";
//Database name to which we connect...
$dbname = "signup";
// Connection to database;
$link = mysqli_connect ($hostname,$username,$password);
if (!$link){
die ("Could not connect: ".mysql_error());
}
mysqli_select_db($link, $dbname);
?>
Вы не знаете, что не так, потому что не проверяете ошибки в своем коде. Никогда не предполагайте, что код всегда будет работать безупречно. Используйте mysqli_error()
, чтобы получить подробное сообщение об ошибке из базы данных.
md5()
устарел для хеширования паролей и должен не использоваться. PHP предоставляет password_hash () и password_verify (), используйте их. А вот и хорошие идеи о паролях. Если вы используете версию PHP до 5.5, здесь доступен пакет совместимости.
Покажите свой ошибки
Что вы имеете в виду под «не работает»? У вас есть ошибки? Добавьте Отчет об ошибках вверху ваших файлов: ini_set("display_errors", 1); error_reporting(E_ALL);
и расскажите нам, что вы получите.
Обновлено:
Обратитесь к документации Функция mysqli_query
в W3schools. Они описывают правильный подход к реализации вашего сценария. В вашем HTML-коде нет ничего плохого; этот раздел в порядке. Это чисто связано с вашим PHP. PHP не обнаружит никаких ошибок в указанном вами экземпляре; однако вам нужно будет отлавливать ошибки с помощью функции mysqli_error
.
Еще одно замечание: в вашем коде вы не заключаете свои значения в одинарные кавычки '
. Это также может вызвать ошибку MySQL, поскольку я считаю, что это часть синтаксиса (за исключением целых чисел).
Помните, что при написании кода Google - ваш лучший друг наряду с собственно документацией PHP.
Вот как я бы структурировал свой MySQLi:
<?php
if (isset($_POST["submit"]))
{
require('dbconnect.php');
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$email = $_POST["email"];
$password = $_POST["password1"];
$confirmPass = $_POST["password2"];
$encryptedPassword = md5($password);
$sql = "INSERT INTO users(FirstName, LastName, Email, Password)
VALUES ('$firstname', '$lastname', '$email', '$encryptedPassword')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
?>
и файл dbconnect.php
к следующему:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "signup";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
Я установил MySQLi другим способом. Значения в INSERT
я заключил в одинарные кавычки, а также добавил, чтобы вы могли улавливать любые ошибки, производимые MySQL.
Как уже упоминалось выше; md5
не является безопасным способом защиты ваших паролей, и ваш скрипт подвержен риску SQL-инъекция
Надеюсь, это укажет вам правильное направление!
Кто-нибудь хочет объяснить отрицательный голос? Сценарий, который я предоставил, все еще не защищен; отвечает на его вопрос. Он хотел, чтобы сценарий работал. Я отметил, что в этом плане все еще есть проблемы с безопасностью.
Я не голосовал против, но вы фактически не говорите им, как заставить скрипт работать. Вы просто говорите, как его отлаживать, что на самом деле не отвечает на вопрос. Это также не добавляет реальной ценности, поскольку комментарии уже говорят им обо всем этом.
@JohnConde хорошее замечание. Я обновил его, чтобы объяснить свой мыслительный процесс, в чем, по моему мнению, заключается проблема, и что он должен сделать, чтобы обнаружить проблему.
Похоже, это помогло
@JohnConde Идеально: D
Ваш сценарий подвержен риску Атака с использованием SQL-инъекции. Посмотрите, что случилось с Маленькие столики Бобби. Даже если вы избегаете ввода, это небезопасно!. Используйте подготовленные параметризованные операторы.