Как получить данные sql в массив php

Я напортачил с названием, но постараюсь объяснить свою проблему. У меня есть html-страница leden.html и на ней есть PHP-скрипт, который получает данные из моей базы данных и создает таблицу на html-странице. Теперь часть, в которой я застреваю, показывает, находится ли участник в сети, а если кто-то в сети, $ sql1 = "ja" else $ sql1 = "nee", но я где-то напортачил, потому что, когда два человека в сети, последний человек, который пришел онлайн показывает онлайн и первый чувак возвращается к "урожденной". Вот код, я думаю, что что-то пошло не так с частью массива.

    <?php
    $conn = mysqli_connect("******", "******", "******", "******");
     // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $sql = "SELECT id, username, email FROM register";
    $sessie_username = "SELECT username FROM sessie";   
    $result = $conn->query($sql);
    $result1 = $conn->query($sessie_username);
    $row1 = $result1->fetch_assoc();
    $nameninsessie = array($row1["username"]);

    if ($result->num_rows > 0) {
       // output data of each row
       while($row = $result->fetch_assoc()) {
          if (in_array($row["username"], $nameninsessie)) {
             $sql1 = "Ja";
          } else {
             $sql1 = "Nee";
          }
          echo "<tr><td>" . $row["id"]. "</td><td>" . $row["username"] . "</td> 
                <td>". $row["email"]. "</td><td>" . $sql1 . "</td></tr>";
       }
       echo "</table>";

    } else { echo "0 resultaten"; }

    $conn->close();
    ?>         

вы получаете только один ряд сесси для nameninsessie

Jeff 13.09.2018 21:37

правильно ли я понимаю, что вы держите всех онлайн-пользователей в таблице «сэсси»?

Jeff 13.09.2018 21:38

Я полагаю, вы этого хотите: while( $row1 = $result1->fetch_assoc()) { $nameninsessie[] = $row1["username"]; }

Jeff 13.09.2018 21:39

Да, все онлайн-пользователи находятся в таблице "sessions", и могу ли я заменить этот код while ($ row = $ result-> fetch_assoc ()) {if (in_array ($ row ["username"], $ nameninsessie)) на hile ($ row1 = $ result1-> fetch_assoc ()) {$ nameninsessie [] = $ row1 ["имя пользователя"]; }?

Gerrit 13.09.2018 21:44
0
4
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы получаете только ОДНОГО из вошедших в систему пользователей из запроса sessie_username. А также неправильное построение массива авторизованных пользователей. См. ниже

<?php
    $conn = mysqli_connect("******", "******", "******", "******");
     // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $sql = "SELECT id, username, email FROM register";
    $sessie_username = "SELECT username FROM sessie";   
    $result = $conn->query($sql);
    $result1 = $conn->query($sessie_username);

    // initialise the array 
    $nameninsessie = array();

    // loop over all logged in users
    while ( $row1 = $result1->fetch_assoc() ) {
        // add thir names to an array
        $nameninsessie[] = $row1["username"];
    }

    if ($result->num_rows > 0) {
       // output data of each row
       while($row = $result->fetch_assoc()) {
          if (in_array($row["username"], $nameninsessie)) {
             $sql1 = "Ja";
          } else {
             $sql1 = "Nee";
          }
          echo "<tr><td>" . $row["id"]. "</td><td>" . $row["username"] . "</td> 
                <td>". $row["email"]. "</td><td>" . $sql1 . "</td></tr>";
       }
       echo "</table>";

    } else { echo "0 resultaten"; }

    $conn->close();
    ?>    

Причина в том, что fetch_assoc() выбирает только ОДНУ строку за раз. В качестве альтернативы fetch_all() может вернуть все записи сразу.

Justin Pearce 13.09.2018 21:47

@JustinPearce Да, это тоже был бы вариант, о котором я не сразу подумал

RiggsFolly 13.09.2018 21:48

Я люблю вас, это работает, и теперь я понимаю проблему, но теперь, когда никто не вошел в систему, и я перехожу к leden.html, есть 7 из этих ошибок: "Предупреждение: in_array () ожидает, что параметр 2 будет массивом, значение null задано на строка 98 "" после входа в систему они исчезнут. ИЗМЕНИТЬ $ nameninsessie = array (); это исправило это

Gerrit 13.09.2018 21:53

Вам необходимо инициализировать массив. Если нет, то будет ошибка.

de_billa_ 13.09.2018 22:01

Как говорит @Credoz, сначала инициализируйте массив перед запуском цикла. Я соответственно изменил ответ

RiggsFolly 13.09.2018 22:15

Проблема с получением данных. См. Возвращаемый массив с помощью команды print_r. Вы получаете только первое значение запроса sql. Так что попробуйте это. Кроме того, вы должны инициализировать массив, если нет, когда есть 0 результатов для запроса mysql, он выдаст ошибку.

<?php
$conn = mysqli_connect("localhost", "root", "*****", "*****");
 // Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$sql = "SELECT id, username, email FROM register";
$sessie_username = "SELECT username FROM sessie";   
$result = $conn->query($sql);
$result1 = $conn->query($sessie_username);
$nameninsessie = array();
$i=0;
while($row1 = $result1->fetch_assoc()) {
  $nameninsessie[$i] = $row1["username"];
  $i++;
}
print_r($nameninsessie); //thi is to chek the array when problem solved please comment this line
if ($result->num_rows > 0) {
   // output data of each row
   while($row = $result->fetch_assoc()) {
      if (in_array($row["username"], $nameninsessie)) {
         $sql1 = "Ja";
      } else {
         $sql1 = "Nee";
      }
      echo "<tr><td>" . $row["id"]. "</td><td> " . $row["username"] . "</td> 
            <td>". $row["email"]. "</td><td> " . $sql1 . "<br></td></tr>";
   }
   echo "</table>";

} else { echo "0 resultaten"; }

$conn->close();
?>      

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