Предупреждение: в foreach () указан неверный аргумент - Что я могу решить? - PullRequest
0 голосов
/ 01 февраля 2019

У меня возникла проблема с "foreach" ...

        <?php 

          /***  user ***/
          $sql = "SELECT * FROM user WHERE user_login = '$login' ";
          $users = selecionar($sql);

          foreach($users as $user) {

              $userId = $user['user_id'];
         }   
        ?>

        <?php 

          $sqll = "SELECT * FROM cadastro WHERE user_id = '$userId' ";
          $cadastro = selecionar($sqll);

          foreach($cadastro as $cad) { ?> /* Line 41 */

            ..... HTML


        <?php } ?> 

Если я регистрирую что-то в PhpMyAdmin, этот код показывает регистр.Но если в БД нет регистрации, на странице отобразится предупреждение: неверный аргумент, предоставленный для foreach () в C: \ wamp64 \ www \ banheiromovel \ 02-listagem \ listagem_perfil.php в строке 41

Ответы [ 2 ]

0 голосов
/ 04 августа 2019

Попробуйте следующее

      /***  user ***/
      $sql = "SELECT * FROM user WHERE user_login = '$login' ";
      $users = selecionar($sql);

        if ($users) {
            foreach(array($users) as $user) {
                $userId = $user['user_id'];
            }
        } 
    ?>

У меня была такая же проблема, и я решил, добавив array ().

0 голосов
/ 01 февраля 2019

Похоже, selecionar() возвращает что-то, что не может быть повторено, если нет результатов, например, возможно null или false.(Помните, что если ваша функция не достигнет оператора return, она вернет null.)

Я думаю, что вашими двумя лучшими вариантами являются либо

  1. Оберните foreach в условное выражение, чтобы убедиться, что оно не пустое, прежде чем пытаться повторить его

    if ($users) {
        foreach($users as $user) {
            $userId = $user['user_id'];
        }
    }   
    
  2. Изменить selecionar() так, чтобы он всегда возвращал массив, а просто возвращалпустой массив, если запрос не дает результатов.

Я предпочитаю второй, лично.Вы можете сделать это, инициализируя любую переменную, в которую вы извлекаете результаты запроса в функции, в пустой массив, а затем возвращая эту переменную после того, как вы (возможно) заполнили ее данными.

Вот так:

function selecionar(string $sql): array
{
    $result = [];

    // code that executes a query and fetches results,
    // adding the rows to $result if there are any

    return $result;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...