陷入(php)foreach mysqli

问题描述 投票:-2回答:3

我正在尝试编写一个php页面来检查$_GET['uuid']是否与数据库中的值匹配,以及当前访问者的ip地址是否与数据库中存储的$_GET['uuid']的ip地址匹配。

这是代码:

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循环。我得到一个带有加载图标的空白页面。

php html mysqli foreach
3个回答
0
投票

$mysqli->query($sql)返回结果集。

尝试替换每个foreach循环(为每个循环修改)

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

这将检索结果集,然后对返回的每一行执行操作。


1
投票

您不需要执行任何循环。正如@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和Prepared Statements。

0
投票

你的代码$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'];
 }
 ?>
© www.soinside.com 2019 - 2024. All rights reserved.