@ikfah012
Не самый умный парень в этом чате

Как правильно вывести html в php-коде?

Добрый день.
Есть у меня страничка с выбором даты. Дата через post передаётся и делается выборка данных по этой дате.
Пытаюсь всё это дело правильно обернуть в html, чтобы каждая таблица была отдельно, но где-то накосячил. Помогите, пожалуйста.
<div class="main-content-inner">
                <div class="row">
                    <div class="form-group">
                        <form method="post" name="delivery_date" action="">
                        <input class="form-control" type="date" name="delivery_date" value="" id="example-date-input"> <button type="submit" class="btn btn-primary btn-xs mb-3">Найти</button>
                        </form>
                    </div>
                    <!-- table primary start -->
                    <div>
                    <?php
                    ini_set('error_reporting', E_ALL); // Включаем вывод всех ошибок
                    ini_set('display_errors', 1);
                    ini_set('display_startup_errors', 1);
                    require_once('db.php');

                    if(isset($_POST['delivery_date']))
                    {
                        $form_date = $_POST['delivery_date'];
                        $SQL = "SELECT * FROM Users WHERE delivery_date='$form_date' AND delivery=1";
                        $result = mysqli_query($link, $SQL);


                        while ($res = mysqli_fetch_assoc($result)) {
                            echo '<div class="col-md-6 mt-5">
                        <div class="card">
                            <div class="card-body">
                                <h4 class="header-title">Заявка №<?=$res[\'id\']?></h4>
                                <ul class="list-group">
                                    <li class="list-group-item"><?=$res[\'name\']?></li>
                                    <li class="list-group-item"><?=$res[\'surname\']?></li>
                                    <li class="list-group-item"><?=$res[\'second_name\']?></li>
                                    <li class="list-group-item"><?=$res[\'phone\']?></li>
                                    <li class="list-group-item"><?=$res[\'birth_date\']?></li>
                                    <li class="list-group-item"><?=$res[\'birth_place\']?></li>
                                    <li class="list-group-item"><?=$res[\'citizenship\']?></li>
                                    <li class="list-group-item"><?=$res[\'doc\']?></li>
                                    <li class="list-group-item"><?=$res[\'doc_id\']?></li>
                                    <li class="list-group-item"><?=$res[\'doc_publish\']?></li>
                                    <li class="list-group-item"><?=$res[\'doc_date\']?></li>
                                    <li class="list-group-item"><?=$res[\'term\']?></li>
                                </ul>
                            </div>
                        </div>
                    </div>
                    </div> ';


                        }
                    }
                    ?>

Как видите, я пытаюсь заполнить таблицу значениями. Мне нужно, чтобы во-первых: она заполнялась и корректно отображалась на странице, а во-вторых: чтобы за ней строилась вторая таблица с другим id но за ту же дату.
Сейчас это выглядит так :(
5c9f6b12e8fbe361956079.png
  • Вопрос задан
  • 1234 просмотра
Решения вопроса 1
@ikfah012 Автор вопроса
Не самый умный парень в этом чате
Решение радикальное, но лучше я не смог придумать.
Делаем отдельный файл и в нём функцию.
function get_printed_users()
{

    global $link;
    if (isset($_POST['delivery_date'])) {
        $form_date = $_POST['delivery_date'];
        $SQL = "SELECT * FROM Users WHERE delivery_date='$form_date' AND delivery=1";
        $result = mysqli_query($link, $SQL);
        $users = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $users;
    } else {

        $sql = "SELECT * FROM Users WHERE delivery = '1' ORDER BY id DESC LIMIT 25";
        $result = mysqli_query($link, $sql);
        $users = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $users;
    }
}


Затем в изначальном файле, где выбор даты:
<form method="post" name="delivery_date" action="">
<input class="form-control" type="date" name="delivery_date" value="" id="example-date-input"> 
<button type="submit" class="btn btn-primary btn-xs mb-3">Найти</button>
</form>
<?php
$post = get_printed_users();
 ?>
<?php foreach ($post as $users): ?>
<li class="list-group-item">Имя: <?=htmlspecialchars($users['name'], ENT_QUOTES)?></li>
<li class="list-group-item">Фамилия: <?=htmlspecialchars($users['surname'], ENT_QUOTES)?></li>
<li class="list-group-item">Отчество: <?=htmlspecialchars($users['second_name'], ENT_QUOTES)?></li>
<li class="list-group-item">Телефон: <?=htmlspecialchars($users['phone'], ENT_QUOTES)?></li>
<?php endforeach; ?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vldud
Код
<?=$res['name']?>
эквивалентен
<?echo $res['name'];?>
Т.е. у вас получается echo внутри echo.
Можете писать так:
echo '...<li class="list-group-item">' . $res['name'] . '</li>...';

Или так (через двойные кавычки):
echo "...<li class="list-group-item">${res['name']}</li>...";
Ответ написан
Комментировать
@JohnnyMnemonik
Почитайте про конструкцию HEREDOC. С ее помощью выводят большие куски кода html. Если нужно вставить переменную в этот код, обрамляйте ее скобками {$var}. Перед HEREDOC нельзя ставить таб и пробелы, иначе выдаст ошибку в коде

echo <<<HEREDOC
<div class="col-md-6 mt-5">
                        <div class="card">
                            <div class="card-body">
                                <h4 class="header-title">Заявка № {$res['id']}</h4>
                                <ul class="list-group">
                                    <li class="list-group-item">{$res['name']}</li>
                                    ...
                                </ul>
                            </div>
                        </div>
                    </div>
                    </div>
HEREDOC;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы