Следуя моему предыдущий вопрос, я создавал свой веб-сайт, но у меня возникла проблема, когда я добавляю HTML-форму под PHP-кодом (который я ранее создавал как отдельный файл), когда я включаю HTML-код ниже код PHP, код PHP имеет приоритет над кодом HTML, под этим я подразумеваю строку «die ('Пожалуйста, заполните регистрационную форму!');» называется.
<form action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method = "post">
<input type = "text" name = "username" placeholder = "Username">
<input type = "password" name = "password" placeholder = "Password">
<input type = "email" name = "email" placeholder = "Email">
<input type = "submit" value = "Register">
</form>
Вы должны помнить, что страница при первой загрузке не была отправлена, и поэтому данные не будут существовать в полях формы. Так что, если вам нужна помощь, покажите нам все код страницы или хотя бы Минимальный, полный и проверяемый пример
здесь почти нет php. Насчет твоего «у, что я имею в виду строку» die («Пожалуйста, заполните регистрационную форму!»); «вызывается». - это где?
Добро пожаловать, чтобы улучшить ваш опыт работы с SO, прочтите, как задать По теме вопроса, Контрольный список вопросов и идеальный вопрос и как создать Минимальный, полный и проверяемый пример и взять тур
@ Funk Forty Niner: это следующий вопрос, упомянутый в моем сообщении, я не хотел, чтобы у меня возникли проблемы из-за повторной публикации того же кода, предыдущий пост связан с первым постом.
PHP означает «препроцессор гипертекста». Он должен запускаться до HTML. Любой HTML / JS / CSS в сценарии PHP ничего не делает на стороне сервера и просто отправляется в браузер для выполнения. Если вы скажете die() в PHP, это приведет к выходу из сценария на сервере, а остальная часть вашего кода и уценка будут проигнорированы.






Предполагая, что код из вашего предыдущего вопроса все еще актуален. Если вы сделали модификации, вам нужно будет это проверить, так как я не отвечал на вопросы, если вы не сделали именно так, как они предлагали
Вы всегда должны выполнять какой-то тест, чтобы проверить, действительно ли форма была отправлена. Помните, что при первой загрузке страницы при нажатии на ссылку или при вводе URL-адреса непосредственно в браузер форма не была отправлена, и поэтому НИКАКОЕ из полей формы не будет заполнено в массивах $_POST или $_GET, чтобы вы могли их использовать. из.
Теперь я использую $_SERVER['REQUEST_METHOD'], который не будет установлен, если вы только что запустили страницу, но будет содержать либо POST, либо GET, если кнопка отправки формы действительно была нажата. Как только вы узнаете, что можете продолжить проверку того, что все поля были правильно введены, и выполнить любую дезинфекцию, которая может потребоваться в этих полях.
session_start();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// Change this to your connection info.
$DB_HOST = 'localhost';
$DB_USER = '';
$DB_PASS = '';
$DB_NAME = '';
// Try and connect using the info above.
$con = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if (mysqli_connect_errno()) {
// If there is an error with the connection, stop the script and display the error.
die ('Failed to connect to MySQL: ' . mysqli_connect_error());
}
// before doing anything with the posted field value
// check to see if the form was actually posted
// or is this the first time the page has been laoded
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
// Now we check if the data was submitted, isset will check if the data exists.
if ( !isset($_POST['username'], $_POST['password'], $_POST['email'])) {
// Could not get the data that should have been sent.
die ('Please complete the registration form!');
}
// Also check if the submitted values are empty
if ( empty($_POST['username']) || empty($_POST['password']) || empty($_POST['email'])) {
// One or more values are empty...
die ('Please complete the registration form!');
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
die ('Email is not valid!');
}
if (preg_match('^[0-9A-Za-z_]+$^', username) == 0) {
die ('Invalid username!');
}
if (strlen($_POST['password']) > 20 || strlen($_POST['password']) < 5) {
die ('Password must be between 5 and 20 characters long.');
}
// We need to check if the account with that username exists
if ($stmt = $con->prepare('SELECT id, password FROM accounts WHERE username = ?')) {
// Bind parameters (s = string, i = int, b = blob, etc), hash the password using the PHP password_hash function.
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->store_result();
// Store the result so we can check if the account exists in the database.
if ($stmt->num_rows > 0) {
// Username already exists
echo 'Username exists, please choose another!';
} else {
// Username doesnt exists, insert new account
if ($stmt = $con->prepare('INSERT INTO accounts (username, password, email) VALUES (?, ?, ?)')) {
$stmt->bind_param('sss', $_POST['username'], password_hash($_POST['password'], PASSWORD_DEFAULT), $_POST['email']);
$stmt->execute();
echo 'You have successfully registered, you can now login!';
} else {
echo 'Could not prepare statement!';
}
}
$stmt->close();
} else {
echo 'Could not prepare statement!';
}
// HTML CODE TO FOLLOW after the `?>`
?>
Спасибо за ответ на мой пост, я очень ценю это, ваш ответ помогает прояснить, где я ошибся, и я очень ценю это, PHP можно было бы заключить в if ($ _ SERVER ['REQUEST_METHOD'] == 'POST' ).
Ну, это должен быть действительный HTML со всеми тегами '<html> `, <head> и <body> и т. д. И т. Д.
Да, мой плохой, спасибо, он работает, очень признателен.
Это потому, что вы не проверяете, была ли отправлена ваша форма В самом деле.