Застревание в (php) foreach mysqli - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь закодировать страницу php, которая проверяет, совпадает ли $_GET['uuid'] со значением в базе данных и совпадает ли ip-адрес текущего посетителя с ip-адресом $_GET['uuid'], хранящимся в базе данных.

Вот код:

if(isset($_GET['uuid'])){
    $uuid = $_GET['uuid'];
    include('database.php');
    $sql = "SELECT * FROM `ips`"; 
    $sql2 =  "SELECT * FROM `ips` WHERE `uuid` =  '". $uuid ."'";
    foreach($mysqli->query($sql) as $row){
        $ipss = $row;
    }
    foreach($mysqli->query($sql2) as $ipsrrr){
        $ipsr = $ipsrrr;
    }
    if($ipss['uuid'] == $uuid && $ipsr['ip'] == $gip){
            $allowed = 1;
    }else{
        header('Location: index.php');
        exit(0);
    }
}else{
    header('Location: index.php');
    exit(0);
}

Я не знаю почему, но я застрял в цикле foreach.Я получаю пустую страницу со значком загрузки.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вам не нужно выполнять никаких циклов.Как сказал @deceze, вы можете просто запросить uuid и ip, если есть результат, пользователю «разрешено».Будьте осторожны с SQL-инъекциями.

  if(!empty($_GET['uuid'])){

    // Evaluate IP and UUID.

    require_once 'database.php';

    if($mysqli->query("SELECT * FROM ips WHERE uuid = $uuid AND ip = $ip")){

      $allowed = 1;

    } else {

      header('Location: index.php');

    }

  } else {

    header('Location: index.php');

  }

Не проверял, но он должен работать.

Несколько вещей относительно вашего кода:

  1. Вместо этого, если вы включите его, вам потребуется файл вашей базы данных.
  2. Вы можете взглянуть на PDO и подготовленные отчеты.
0 голосов
/ 27 сентября 2018

Ваш код $mysqli->query($sql) возвращает объект , а не итеративный массив.Для получения массива полей вам нужно будет использовать метод fetch_all(MYSQLI_ASSOC).Посмотрите на пример ниже:

    <?php
 $host = "localhost";
 $mysql = mysqli_connect($host, "root", "", "database");
 $result = $mysql->query("SELECT * FROM table");
 $result = $result->fetch_all(MYSQLI_ASSOC);
 //parameter `MYSQLI_ASSOC` means to return associated array, 
 //(without it you will get a numeric keys for array)
 //$result[0] contains your array.
 //Now you can manipulate data:
 foreach ($result[0] as $field) {
     $get_data = $field['some_col_name'];
 }
 ?>
0 голосов
/ 27 сентября 2018

$mysqli->query($sql) возвращает набор результатов.

Попробуйте заменить каждый из циклов foreach на (измененный для каждого цикла)

$resultSet = $mysqli->query($sql);
while($row = $resultSet->fetch_row())
{
    $ipss = $row;
}

Это позволит получить набор результатов, а затем выполнитьдействие для каждой возвращенной строки.

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