Как сказать циклу while, какие данные не повторить? - PullRequest
1 голос
/ 03 апреля 2019

Я печатал данные простым способом, очень трудно поверить, что структура HTML усложняет мне использование loop while: (

Мне нужно иметь возможность добавлять информацию в двух разных контейнерах, контейнере <nav></nav> и контейнере <div id="ocultado" style="display: none"></div>, эти контейнеры не должны повторяться, единственное, что можно повторить, это содержимое, которое находится внутри контейнеры.

URL-адреса видео должны находиться внутри контейнера <nav></nav>

А текстовое содержимое должно идти внутри контейнера <div id="ocultado" style="display: none"></div>

Чтобы получить такой результат:

<nav id="enlaces" class="vids">
    <a class="link" href="https://www.quirksmode.org/html5/videos/big_buck_bunny.mp4">test1</a>
    <a class="link" href="https://www.quirksmode.org/html5/videos/big_buck_bunny.mp4">test5</a>
    <a class="link" href="http://www.html5videoplayer.net/videos/toystory.mp4">test6</a>
    <a class="link" href="#" id="link_1" >test10</a>
</nav>

<div id="ocultado" style="display: none">
    <div class="cuadro" id="c_link_1" >
        <h1>Print data</h1>
    </div>
    <div class="cuadro" id="c_link_2" >
        <h1>Print data</h1>
    </div>
    <div class="cuadro" id="c_link_3" >
        <h1>Print data</h1>
    </div>
    <div class="cuadro" id="c_link_4" >
        <h1>Print data</h1>
    </div>
</div>

Вы можете создать две if проверки в соответствии с типом формата файла:

if($type_format === "video"){ }

И

if($type_format === "text"){ } 

Но опять-таки осложнение исходит от контейнеров, которые не должны повторяться в loop while

Заканчивается так плохо:

<?php
    $stmt = $con->prepare("SELECT type_format, url FROM multimedia");
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows>0) {
        $stmt->bind_result($type_format,$url);
        while ($stmt->fetch()) {
            echo '<nav id="enlaces" class="vids">';
            echo $url;
            echo '</nav>';

            echo '<div id="ocultado" style="display: none">';
            echo $url;
            echo '</div>';
        }

    }
?>

Не могли бы вы объяснить, как предотвратить повторение контейнеров?

1 Ответ

1 голос
/ 03 апреля 2019

Вы можете начать с группировки их в массиве правильного типа:

$data = [
    'text'  => [],
    'video' => [],
];

while ($stmt->fetch()) {
    $data[$type_format][] = $url;
}

Затем вывести их в соответствующие контейнеры:

// Output videos
echo '<nav id="enlaces" class="vids">';
foreach ($data['video'] as $url) {
    echo $url;
}
echo '</nav>';

// Output links
echo '<div id="ocultado" style="display: none">';
foreach ($data['text'] as $url) {
    echo $url;
}
echo '</div>';

Добавить информацию

Если вы хотите добавить больше информации для каждого URL, вы можете просто сделать это в своем цикле:

$data[$type_format][] = [
    'url'   => $url,
    'title' => $title_video,
];

А потом, когда вы хотите вывести данные:

echo '<nav id="enlaces" class="vids">';
foreach ($data['video'] as $info) {
    echo '<a class="link" href="' . $info['url'] . '">' . $info['title'] . '</a>';
}
echo '</nav>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...