【问题标题】:How to check if a $_GET variable exists in database如何检查数据库中是否存在 $_GET 变量
【发布时间】:2017-02-01 10:58:03
【问题描述】:

如果 $_GET 变量不打印错误,如何检查它是否存在于数据库中。 我正在使用此代码:

$connection = mysqli_connect("localhost" , "root" , "" , "test");
$query = "SELECT site_title FROM websites";
$select_all_sites = mysqli_query($connection,$query);
$row_count = mysqli_num_rows($select_all_sites);

for ($i=0; $i < $row_count; $i++){ 
    $row = mysqli_fetch_assoc($select_all_sites);
    if($_GET['website'] == $row['site_title']){
        echo 'Success';
    }else{
        echo 'error';
    }
}

它打印出太多错误或(else 条件始终为真。)帮帮我。

【问题讨论】:

  • 对您有用的链接; How can I prevent SQL injection in PHP?
  • 另外,我建议改用 PDO,它更易读也更容易处理
  • 与 Python 不同,PHP 中没有 for/else 循环之类的东西。您需要在遍历它们之前检查您拥有的行数,如果没有,则会出错。
  • 打印$_GET['website'] 变量,看看它的值是多少。另外$row_count 值可能有太多行,如果条件只有 1 为真

标签: php for-loop


【解决方案1】:

直接将任何 php 数组变量放入查询中是不安全的。你需要清洁它。考虑使用 mysqli_real_escape_string。虽然我建议切换到 PDO。

回到你的问题,你为什么不能使用 while 循环而不是 for 循环。您需要检查变量网站是否实际存在。 php 的 isset 函数会有所帮助。试试这个:

<?php
if(isset($_GET['website'])){
   if($_GET['website'] == $row['site_title']){
#awesome! it matches
  } else{
     #it does not match
    }
} else{
#website $_GET variable does not exist. Handle error
     }
?>

【讨论】:

    【解决方案2】:

    请尝试以下代码,如果您遇到任何错误,请通知我。

    <?php
    $connection = mysqli_connect("localhost" , "root" , "" , "test");
    $query = "SELECT site_title FROM websites";
    $select_all_sites = mysqli_query($connection,$query);
    
    while($row = mysqli_fetch_assoc($select_all_sites))
    {
        if($_GET['website'] == $row['site_title'])
        {
            echo 'Success';
        }
        else
        {
            echo 'error';
        }
    }
    ?>
    

    【讨论】:

    • 您的代码连续打印太多“错误”。在此代码中,else 条件始终为真。
    • 我已经解决了这个问题 :) :) 我们应该在循环之外保留 else 条件或不相等条件。然后它将完美运行。如果我们在循环中保持不相等或其他条件,它会打印很多次。
    • @user617126 我刚刚写了一个 if 条件来比较变量。我在 if 条件下也有临时变量。我不知道哪些是变量来抛出你的代码。您应该在 if 条件下使用正确的变量,然后它会正常工作。
    【解决方案3】:

    您首先必须检查 get 变量是否实际存在。您可以使用 PHP isset 函数 http://php.net/manual/en/function.isset.php 执行此操作,如果它存在,您可以继续查看它是否像现在一样与您的站点标题匹配。

    【讨论】:

      猜你喜欢
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多