Страница таблицы MySQL не загружает правильные данные

0

Я создаю таблицу, использующую PHP для вывода из базы данных MySQL, которая у меня есть. Я думаю, что у меня есть все, где я хочу, но единственная проблема, с которой я столкнулась, состоит в том, что результаты, кажется, (из-за отсутствия лучшего слова) "позади". Я имею в виду, что моя первая страница index.php - это то, где я принимаю изменения пользователя в базе данных. Как только они нажмут " Update он отправит их в файл results.php который должен фактически выполнить SQL UPDATE, а затем отобразить обновленную таблицу.

Он отлично обновляет таблицу в соответствии с редактором базы данных XAMPP. Однако, когда я сказал "позади", я имею в виду, что страница загружается, обновляется, но не отображает обновленные данные, пока пользователь не обновит страницу или не вернется на первую страницу. Затем возвращается. Я не уверен, что может быть причиной этого, поэтому я надеюсь, что кто-то здесь может мне помочь. Я чувствую, что причина - это просто так, как будто я просто запускаю код в неправильном порядке, но я не знаю точно. Мой код ниже:

index.php

<html>
    <body>
        <?php
        include('dbconnect.php');
        $query = "SELECT * FROM vw_events";
        $result = mysqli_query($conn, $query);
        $count = mysqli_num_rows($result);
        ?>

        <form name="form1" method="post" action="results.php">
            <table width="auto" border="1" cellspacing="1" cellpadding="5">
                <tr>
                    <td align="center"><strong>Event ID</strong></td>
                    <td align="center"><strong>Title</strong></td>
                    <td align="center"><strong>Topic</strong></td>
                    <td align="center"><strong>Description</strong></td>
                    <td align="center"><strong>Event Date</strong></td>
                    <td align="center"><strong>Speaker</strong></td>
                    <td align="center"><strong>Building</strong></td>
                    <td align="center"><strong>Room</strong></td>
                </tr>

                <?php                    
                    while($rows=mysqli_fetch_array($result)) {
                ?>

                <tr>
                    <input name="event_id[]" type="hidden" id="event_id" value="<?php echo $rows['event_id']; ?>">
                    <td align="center">
                        <?php echo $rows['event_id'];?>
                    </td>
                    <td align="center">
                        <input name="title[]" type="text" id="title">
                    </td>
                    <td align="center">
                        <?php echo $rows['topic_name']; ?>
                    </td>
                    <td align="center">
                        <?php echo $rows['topic_description']; ?>
                    </td>
                    <td align="center">
                        <input name="date[]" type="date" id="date">
                    </td>
                    <td align="center">
                        <input title="Use reference tables below to enter speaker ID" name="speaker[]" type="text" id="speaker">
                    </td>

                    <td align="center">
                        <input title="Use reference tables below to enter building ID" name="building[]" type="text" id="building">
                    </td>


                    <td align="center">
                        <input title="Use reference tables below to enter Room ID" name="room[]" type="text" id="room">
                    </td>
                </tr>

                <?php
                    }
                ?>

                <tr>
                    <td colspan="8" align="center"><input type="submit" name="Update" value="UPDATE"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

results.php

<html>
    <body>

        <?php
        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        error_reporting(E_ALL);
        ini_set('display_errors',1);

        require_once('dbconnect.php');
        $query = "SELECT * FROM vw_events";
        $result = mysqli_query($conn, $query);
        $count = mysqli_num_rows($result);

        if ($_SERVER["REQUEST_METHOD"] == "POST")
        {
            $id = $_POST['event_id'];
            $title2 = $_POST['title'];
            $date2 = $_POST['date'];
            $speaker2 = $_POST['speaker'];
            $building2 = $_POST['building'];
            $room2 = $_POST['room'];

            for($i=0;$i<$count;$i++) {
                $sql="UPDATE events SET title='$title2[$i]', event_date='$date2[$i]', speaker='$speaker2[$i]', building='$building2[$i]', room='$room2[$i]' WHERE event_id='$id[$i]'";
                $result1=mysqli_query($conn, $sql);
            }
        }
        ?>
        <form name="form1" method="post" action="index.php">
            <table width="auto" border="1" cellspacing="1" cellpadding="5">
                <tr>
                    <td align="center"><strong>Event ID</strong></td>
                    <td align="center"><strong>Title</strong></td>
                    <td align="center"><strong>Topic</strong></td>
                    <td align="center"><strong>Description</strong></td>
                    <td align="center"><strong>Event Date</strong></td>
                    <td align="center"><strong>Speaker</strong></td>
                    <td align="center"><strong>Building</strong></td>
                    <td align="center"><strong>Room</strong></td>
                </tr>

                <?php                    
                    while($rows=mysqli_fetch_array($result)) {
                ?>

                <tr>
                    <td align="center">
                        <?php echo $rows['event_id'];?>
                    </td>
                    <td align="center">
                        <?php echo $rows['title']; ?>
                    </td>
                    <td align="center">
                        <?php echo $rows['topic_name']; ?>
                    </td>
                    <td align="center">
                        <?php echo $rows['topic_description']; ?>
                    </td>
                    <td align="center">
                        <?php echo $rows['event_date']; ?>
                    </td>
                    <td align="center">
                        <?php echo $rows['speaker_name']; ?>
                    </td>
                    <td align="center">
                        <?php echo $rows['building_name']; ?>
                    </td>
                    <td align="center">
                        <?php echo $rows['room_name']; ?>
                    </td>
                </tr>

                <?php
                    }
                ?>

                <tr>
                    <td colspan="8" align="center"><input type="submit" name="Return" value="Return"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

Кроме того, если кто-то может дать мне несколько htmlspecialchars о том, как запустить функцию htmlspecialchars на моих массивах в htmlspecialchars results.php я бы очень признателен. Я уже пытался создать цикл for для буквально каждого массива, но это не сработало. Я пробовал использовать ->

<?php 
function htmlspecial_array(&$variable) {
    foreach ($variable as &$value) {
        if (!is_array($value)) { $value = htmlspecialchars($value);  }
        else { htmlspecial_array($value); }
    }
}

но это также не сработало, и я попытался использовать array_walk_recursive но безрезультатно. Я хочу попытаться сделать что-то вроде примера W3Schools здесь. Валидация формы W3Schools в нижней части страницы, где говорится: " Validate Form Data With PHP а затем привести пример.

Теги:
forms

1 ответ

1
Лучший ответ

Результатом запроса UPDATE является количество затронутых строк в вашей базе данных. Чтобы правильно отображать обновленные данные, вам нужно повторно извлечь из базы данных, прежде чем создавать HTML. Вы должны изменить свой код в файле results.php следующим образом:

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    error_reporting(E_ALL);
    ini_set('display_errors',1);
    require_once('dbconnect.php');

    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
        $id = $_POST['event_id'];
        $title2 = $_POST['title'];
        $date2 = $_POST['date'];
        $speaker2 = $_POST['speaker'];
        $building2 = $_POST['building'];
        $room2 = $_POST['room'];

        $query = "SELECT * FROM vw_events";
        $result = mysqli_query($conn, $query);
        $count = mysqli_num_rows($result);

        for($i=0;$i<$count;$i++) {
            $sql="UPDATE events SET title='$title2[$i]', event_date='$date2[$i]', speaker='$speaker2[$i]', building='$building2[$i]', room='$room2[$i]' WHERE event_id='$id[$i]'";
            $result1=mysqli_query($conn, $sql);
        }
    }

    $query = "SELECT * FROM vw_events";
    $result = mysqli_query($conn, $query);

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

Что касается вашего вопроса о htmlspecialchars, см. Stackoverflow "Выполнить htmlspecialchars в многоуровневом массиве".

  • 0
    Я ценю вашу помощь. Когда я переставляю код предложенным вами способом, он говорит мне, что count - это неопределенная переменная, что имеет смысл, потому что я в основном говорю циклу for перейти к значению переменной, которая еще не существует. Есть что-нибудь еще, о чем ты можешь подумать? Также я ценю ваши предложения и обязательно рассмотрю как подготовленные mysqli операторы, так и Stackoverflow «Выполнение htmlspecialchars в многоуровневом массиве»
  • 0
    Я получил это на работу. Вы были правы, мне просто нужно было заново извлечь базу данных перед тем, как приступить к выполнению HTML. Я закончил тем, что добавил второй запрос после ОБНОВЛЕНИЯ. Я в основном добавил второй $query = "SELECT * FROM vw_events"; $result = mysqli_query($conn, $query); $count = mysqli_num_rows($result); прежде чем я сделаю while($rows=mysqli_fetch_array($result) {
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню