У меня есть один запрос, который берет данные о пользователях.
Мне нужно сделать второй запрос для каждого из этих пользователей.
Я получаю данные только для первого пользователя. (со вторым запросом)
Первый запрос:
$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 }?>
@MasivuyeCokile извините, я сказал неправильно, я просто не получаю данные из второго запроса для остальных пользователей.
Проверьте, что такое $firstname
и $lastname
, а затем попробуйте тот же запрос в чем-то вроде phpmyadmin.
Ваш код уязвим для внедрения SQL. Вы должны использовать подготовленные операторы.
@NigelRen работает в phpmyadmin.
Вам придется показать нам больше PHP-кода, чтобы мы могли видеть, что вы делаете, и иметь возможность помочь вам.
Если в значениях $firstname или $lastname есть апостроф, это испортит строку запроса.
@RiggsFolly хорошо, я все добавил.
@MER Я не использую апостроф
Примечания: 1. Пожалуйста, используйте английские имена для столбцов и имен таблиц. Вы никогда не знаете, кто будет работать с вашим кодом в будущем. 2. Не рекомендуется искать zapasy
по имени komentator1
и komentator2
. В этих столбцах должны быть идентификаторы пользователей из tipuser
. 3. Было бы неплохо объединить еще одну таблицу zapasy
и tipuser
, чтобы у вас могло быть любое количество komentator
.
Хотя это не совсем ясно из вашего вопроса, я думаю, что вы получаете несколько строк из своего первого запроса и хотите запустить второй запрос для каждой строки, возвращаемой первым запросом.
Это один из способов, я взял на себя смелость использовать подготовленный запрос для второго, это должно устранить любые проблемы с 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
}
да, я хочу этого, но когда я заменяю свой код этим и переименовываю переменные, это не работает. у меня просто белый экран без контента
Белый экран? Попробуйте включить все отчеты об ошибках, чтобы увидеть, в чем может быть взрыв синтаксиса. Добавьте ini_set('display_startup_errors', true); ini_set('display_errors', true); error_reporting(E_ALL);
вверху.
@RiggsFolly - я думаю, вы имели в виду, что $q2
var должна быть установлена в строку SQL - в настоящее время она установлена на результат запроса (2-я строка кода). То есть: $q2 = "SELECT DATE_FORMAT..."
вместо $q2 = mysqli_query(...
Марек, извините, у меня была глупая опечатка в исходном коде. Теперь это исправлено.
Какую ошибку вы получаете?