Как сделать внутренний цикл записей в php

Ясно, что это не идеальное решение, но оно РАБОТАЕТ. Я добавил это в начало моего файла route.php:

header('Access-Control-Allow-Origin: *');
header( 'Access-Control-Allow-Headers: Authorization, Content-Type' );

Было бы неплохо получить эту работу без взлома ... alas.

UPDATE: Оказалось, что это связано с ИИС. Я закончил настройку заголовков в файле web.config, и теперь CORS работает без взлома файла route.php.

<httpProtocol>
    <customHeaders>
       <add name="Access-Control-Allow-Headers" value="Origin, Authorization, X-Requested-With, Content-Type, Accept" />
       <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" />
    </customHeaders>
</httpProtocol>

Если вы хотите ограничить доступ, вы можете добавить исходящие правила:

      <outboundRules>
          <clear />
                <rule name="AddCrossDomainHeader">
                    <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                        <add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?somesite\.com|(.+\.)?anothersite\.org))" />
                    </conditions>
                    <action type="Rewrite" value="{C:0}" />
                </rule>
      </outboundRules>
0
задан Polonio 15 January 2019 в 18:24
поделиться

1 ответ

Чистый / прямой подход должен выглядеть примерно так:

SELECT Client, Option, GROUP_CONCAT(Dish SEPARATOR ', ')
FROM table_name
GROUP BY Client, Option

Затем, когда ваши данные уже сгруппированы и склеены, просто напечатайте свои строки в одном цикле набора результатов.

Использование do {} while () здесь бесполезно.

Вот непроверенный фрагмент ...

if ($conmenu) {
    echo '<table>';
        echo '<tr><td>Client</td><td>Option</td><td>Dishes</td></tr>';
        while ($row = mysqli_fetch_assoc($conmenu)) {
            echo '<tr><td>' , implode('</td><td>', $row) , '</td></tr>';
        }
    echo '</table>';
}

Для записи:

Максимально допустимая длина результата в байтах для функции GROUP_CONCAT (). По умолчанию установлено значение 1024.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

Также [116 ] является итеративным, поэтому вы можете использовать foreach вместо цикла while.

foreach ($conmenu as $row) { ...

Если вы хотите сделать это трудным путем ...

SELECT Client, Option, Dish
FROM table_name
ORDER BY Client, Option

Тогда ... (не проверено)

if ($conmenu) {
    echo '<table>';
        echo '<tr><td>Client</td><td>Option</td><td>Dishes</td></tr>';

        $group = null;
        foreach ($conmenu as $row) {
            if ($group !== $row['Client'] . '_' . $row['Option']) {
                if ($group !== null) {
                    echo '</td></tr>';
                }
                echo '<tr><td>' , implode('</td><td>', $row);
            } else {
                echo ", " , $row['Dish'];
            }
            $group = $row['Client'] . '_' . $row['Option'];  // update group
        }
        echo '</td></tr>';  // close final iteration
    echo '</table>';
}
0
ответ дан mickmackusa 15 January 2019 в 18:24
поделиться
Другие вопросы по тегам:

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