Есть ли способ создать foreach для кода sql с данными массива

У меня есть один запрос, который берет данные о пользователях.

Мне нужно сделать второй запрос для каждого из этих пользователей.

Я получаю данные только для первого пользователя. (со вторым запросом)

Первый запрос:

$query = mysqli_query($conn, "SELECT * FROM tipuser WHERE permissions = '0'");
$ah = mysqli_fetch_array($query);

Также, когда я делаю для каждого ($ query as $ x) и внутри этого я повторяю имя и фамилию, он показывает все, когда я делаю то же самое с $ah, он ничего не показывает.

Затем я получил эти переменные:

$firstname = $ah['firstname'];
$lastname = $ah['lastname'];

Второй запрос:

$sqlwork = mysqli_query($conn, 
        "SELECT DATE_FORMAT(datum, '%b %Y') AS Monthyear, 
                count(projekt) AS celkem, 
                SUM(projekt = 0) AS tipsport,  
                SUM(projekt = 1) AS slavia, 
                SUM(projekt = 2) AS bet 
        FROM zapasy 
        WHERE komentator1 = '$firstname $lastname' 
           OR komentator2 = '$firstname $lastname' 
        GROUP BY Monthyear");

Я думаю, что проблема где-то в массиве, но я не могу ее найти. Я благодарен за любую помощь.

ОБНОВИТЬ: вот как это отображать на сайте:

         <?php foreach($query AS $usersall) {?>
           <table id = "tablePreview" class = "table table-hover table-sm table-bordered" style = "border-top: 0px solid hsl(0, 0%, 87%);">


    <thead style = "color:black; background-color: hsla(0,0%,71%,1.00); border-top: 0px solid hsl(0, 0%, 87%);">
        <tr>
            <th scope = "col">Měsíc</th>
            <th scope = "col">Zápasů</th>
            <th scope = "col">BET</th>
            <th scope = "col">TipSport</th>
            <th scope = "col">Slavia</th>
            <th scope = "col">Brutto</th>
            <th scope = "col">Daň</th>
            <th scope = "col">Netto</th>
            <th scope = "col">Zaplaceno</th>
        </tr>
    </thead>
    <tbody>
        <?php while ($tip = mysqli_fetch_assoc($sqlwork)) {?>
        <tr>
            <td>
                <?=$tip['Monthyear'] ?>
            </td>
            <td>
              <?=$tip['celkem']?>
            </td>
            <td>
                <?=$tip['bet']?>
            </td>
            <td>
                <?=$tip['tipsport']?>
            </td>
            <td>
                <?=$tip['slavia']?>
            </td>
            <td>
                <?php 
                        $betx = $tip['bet']*$bet1cena['cena'];
                        $tipx = $tip['tipsport']*$tipcena['cena']; 
                        $slax = $tip['slavia']*$slaviacena['cena']; 
                        $celkem = $betx+$tipx+$slax;
                        echo "$celkem Kč";
                ?>
            </td>
            <td>
                <?php
                        if ($user['fakturuje'] == 0){
                            $dan = $celkem*0.15;
                            echo "$dan Kč";

                        }else{
                            echo "0 Kč";
                        }                                   
                ?>
            </td>
            <td>
                <?php
                   $netto = $celkem-$dan;
                   echo "$netto Kč"; 
                ?>
            </td>
            <td>
                <input type = "checkbox">
            </td>
        </tr>

        <?php } ?>
    </tbody>
</table>
<?php }?>

Какую ошибку вы получаете?

Masivuye Cokile 29.05.2019 13:37

@MasivuyeCokile извините, я сказал неправильно, я просто не получаю данные из второго запроса для остальных пользователей.

Marek Langer 29.05.2019 13:38

Проверьте, что такое $firstname и $lastname, а затем попробуйте тот же запрос в чем-то вроде phpmyadmin.

Nigel Ren 29.05.2019 13:40

Ваш код уязвим для внедрения SQL. Вы должны использовать подготовленные операторы.

Dharman 29.05.2019 13:41

@NigelRen работает в phpmyadmin.

Marek Langer 29.05.2019 13:43

Вам придется показать нам больше PHP-кода, чтобы мы могли видеть, что вы делаете, и иметь возможность помочь вам.

RiggsFolly 29.05.2019 13:48

Если в значениях $firstname или $lastname есть апостроф, это испортит строку запроса.

MER 29.05.2019 13:49

@RiggsFolly хорошо, я все добавил.

Marek Langer 29.05.2019 14:33

@MER Я не использую апостроф

Marek Langer 29.05.2019 14:34

Примечания: 1. Пожалуйста, используйте английские имена для столбцов и имен таблиц. Вы никогда не знаете, кто будет работать с вашим кодом в будущем. 2. Не рекомендуется искать zapasy по имени komentator1 и komentator2. В этих столбцах должны быть идентификаторы пользователей из tipuser. 3. Было бы неплохо объединить еще одну таблицу zapasy и tipuser, чтобы у вас могло быть любое количество komentator.

Volvox 30.05.2019 11:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
10
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя это не совсем ясно из вашего вопроса, я думаю, что вы получаете несколько строк из своего первого запроса и хотите запустить второй запрос для каждой строки, возвращаемой первым запросом.

Это один из способов, я взял на себя смелость использовать подготовленный запрос для второго, это должно устранить любые проблемы с SQL-инъекциями, а также любые проблемы с фамилиями, такими как O'Toole (проблема с апострофом). Это также означает, что вам нужно скомпилировать запрос только один раз, но вы можете запускать его с новыми параметрами столько раз, сколько вам нужно.

$q1 = mysqli_query($conn, "SELECT * FROM tipuser WHERE permissions = '0'");

$q2 = "SELECT DATE_FORMAT(datum, '%b %Y') AS Monthyear, 
                count(projekt) AS celkem, 
                SUM(projekt = 0) AS tipsport,  
                SUM(projekt = 1) AS slavia, 
                SUM(projekt = 2) AS bet 
        FROM zapasy 
        WHERE komentator1 = ? 
           OR komentator2 = ? 
        GROUP BY Monthyear");

$stmt2 = $conn->prepare($q2);

while ($ah = mysqli_fetch_array($q1) ) {

    // make the full name field
    $name = $ah['firstname'] . ' ' . $ah['lastname'];

    // bind those values to the prepared query
    $stmt2->bind_param('ss', $name, $name );
    $stmt2->execute();

    // present the results of this query
    // however you like
}

да, я хочу этого, но когда я заменяю свой код этим и переименовываю переменные, это не работает. у меня просто белый экран без контента

Marek Langer 29.05.2019 14:30

Белый экран? Попробуйте включить все отчеты об ошибках, чтобы увидеть, в чем может быть взрыв синтаксиса. Добавьте ini_set('display_startup_errors', true); ini_set('display_errors', true); error_reporting(E_ALL); вверху.

IncredibleHat 29.05.2019 15:33

@RiggsFolly - я думаю, вы имели в виду, что $q2 var должна быть установлена ​​​​в строку SQL - в настоящее время она установлена ​​​​на результат запроса (2-я строка кода). То есть: $q2 = "SELECT DATE_FORMAT..." вместо $q2 = mysqli_query(...

MER 29.05.2019 18:51

Марек, извините, у меня была глупая опечатка в исходном коде. Теперь это исправлено.

RiggsFolly 30.05.2019 10:06

Другие вопросы по теме