PHP работает раньше HTML

Следуя моему предыдущий вопрос, я создавал свой веб-сайт, но у меня возникла проблема, когда я добавляю 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>

Это потому, что вы не проверяете, была ли отправлена ​​ваша форма В самом деле.

u_mulder 10.09.2018 16:42

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

RiggsFolly 10.09.2018 16:42

здесь почти нет php. Насчет твоего «у, что я имею в виду строку» die («Пожалуйста, заполните регистрационную форму!»); «вызывается». - это где?

Funk Forty Niner 10.09.2018 16:43

Добро пожаловать, чтобы улучшить ваш опыт работы с SO, прочтите, как задать По теме вопроса, Контрольный список вопросов и идеальный вопрос и как создать Минимальный, полный и проверяемый пример и взять тур

RiggsFolly 10.09.2018 16:44

@ Funk Forty Niner: это следующий вопрос, упомянутый в моем сообщении, я не хотел, чтобы у меня возникли проблемы из-за повторной публикации того же кода, предыдущий пост связан с первым постом.

user10329792 10.09.2018 16:50

PHP означает «препроцессор гипертекста». Он должен запускаться до HTML. Любой HTML / JS / CSS в сценарии PHP ничего не делает на стороне сервера и просто отправляется в браузер для выполнения. Если вы скажете die() в PHP, это приведет к выходу из сценария на сервере, а остальная часть вашего кода и уценка будут проигнорированы.

ggorlen 10.09.2018 17:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
6
222
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вы всегда должны выполнять какой-то тест, чтобы проверить, действительно ли форма была отправлена. Помните, что при первой загрузке страницы при нажатии на ссылку или при вводе 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' ).

user10329792 10.09.2018 17:16

Ну, это должен быть действительный HTML со всеми тегами '<html> `, <head> и <body> и т. д. И т. Д.

RiggsFolly 10.09.2018 17:18

Да, мой плохой, спасибо, он работает, очень признателен.

user10329792 10.09.2018 17:28

Другие вопросы по теме