Переработанный код PHP / MySQL CRUD, который раньше работал, больше не работает - PullRequest
0 голосов
/ 27 марта 2020

Я случайный любитель PHP / MySQL, то есть каждые пару лет я получаю идею простого проекта CRUD и пытаюсь его выполнить. Последнее произошло в октябре 2018 года. Вчера я запустил еще один проект CRUD, надеясь переназначить старый код. Но мои команды INSERT не работают. Код буквально взят со старого живого сайта, который у меня был, который отлично работал.

Я провел целый день, гугляя, и там есть много старых вещей. Я сделал как обычно, включив PHP ошибок и выводя мои переменные (которые оказываются пустыми). Я знаю, что подключаюсь к своей базе данных, потому что я повторил сообщение об успехе. На самом деле я не ищу кого-нибудь, кто решит мою проблему, а скорее скажет мне, что все изменилось, и вам нужно проверить исходники X.

Вот урезанная версия моего кода. Изменился ли синтаксис PHP / MySQL CRUD с 2018 года?

    // Connect to database
    require_once "mysqli-connect.php";
    $mysqli = dbConnect('dbname');

    // Define variables and initialize with empty values
    $fname = $lname = "";

    // Process the form
    if(isset($_POST['submit'])) {

        // Set first name
        $fname = trim($_POST['fname']);

        // Set last name
        $lname = trim($_POST['lname']);

        // Prepare an insert statement
        $query = "INSERT INTO test_table (fname, lname) VALUES (?, ?)";

        if ($stmt = $mysqli->prepare($query)) {
            // Bind variables to the prepared statement as parameters
            $stmt->bind_param("ss", $param_fname, $param_lname);

            // Set parameters
            $param_fname = $fname;
            $param_lname = $lname;

            // Attempt to execute the prepared statement
            if($stmt->execute()){

                // Get last inserted id
                $last_id = mysqli_insert_id($mysqli);

                // Redirect to photo upload page

            ?>
                <script type="text/javascript">
                    window.location = 'upload_image.php'; // This does NOT redirect like it should
                </script>

            <?php
                exit;
            } // End execute

        } // End prepare

        // Close statement
        $stmt->close();

    } // End process form

    // Close connection
    $mysqli->close(); 

?>

            <form class="needs-validation" novalidate action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">

                    <label for="fname">*First name</label>
                    <input type="text" class="form-control" name="fname" value="<?php echo $fname; ?>" maxlength="20" autofocus required>
                    <div class="invalid-feedback">
                      Valid first name is required.
                    </div>

                    <label for="lname">*Last name</label>
                    <input type="text" class="form-control" name="lname" value="<?php echo $lname; ?>" maxlength="20" required>
                    <div class="invalid-feedback">
                      Valid last name is required.
                    </div>

                    <input type="submit" class="btn btn-submit btn-block" value="Continue">
            </form>

1 Ответ

0 голосов
/ 27 марта 2020

Я буквально вставил "$ _POST ['submit']" в поиск Google, и первый результат сказал

isset ($ _POST ['submit']): эта строка проверяет, есть ли форма отправляется с использованием функции isset (), но работает только в том случае, если тип ввода формы submit имеет атрибут name (name = "submit")

Все, что нужно для исправления, это добавление name = "submit "к моему типу ввода. У меня не было этого в исходном файле 2018 года. Странно.

РЕДАКТИРОВАТЬ: Это работало в моей тестовой таблице, но не моей реальной таблице. Оказывается, MySQL не любит имена таблиц с подчеркиванием. Хотя они и являются абсолютно действительными персонажами, очевидно, нет гарантии, что они всегда будут работать. После того как я снял подчеркивания, все работало нормально. Потребовалось много времени, просто добавляя, удаляя и меняя вещи по одному.

...