【问题标题】:Can't get simple if / else statement to work无法让简单的 if / else 语句起作用
【发布时间】:2024-08-31 08:10:03
【问题描述】:

如果名称与我在 URL 中传递的 $_GET['name'] 变量匹配,我正在我的 DB 中搜索一个表以返回一个勾号。

如果名称存在,我希望显示一个勾号,如果不存在,则显示一个叉号。

目的是填充可用性列表/时间表。

我目前的代码;

<?php foreach($rota_sun as $rota_sunday): ?>
       <?php if(strpos($rota_sunday['person_name'], $_GET['name']) !== false) { ?>
              <span style="color:green; font-size:22px;"><i class="fa fa-check" aria-hidden="true"></i></span>
              <?php } else { ?>
              <span style="color:red; font-size:22px;"><i class="fa fa-times" aria-hidden="true"></i></span>
      <?php } ?>
 <?php endforeach; ?>

我的查询代码是;

$query = "SELECT
                rota_sunday.id AS rota_id,
                rota_sunday.person_id,
                rota_sunday.person_name
            FROM rota_sunday WHERE rota_sunday.person_name = '$_GET['$name']'
        "; 
    try 
    { 
        $stmt = $conn->prepare($query); 
        $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to run query: " . $ex->getMessage()); 
    } 
    $rota_sun = $stmt->fetchAll(PDO::FETCH_ASSOC);

我的表格包含三行;

  1. 身份证
  2. person_id
  3. 人名

我使用的数组是;

Array
(
    [0] => Array
        (
            [rota_id] => 16
            [person_id] => 0
            [person_name] => Gina
        )

)

您会看到 Gina 存在 - 因此,如果 ?name=Gina 在我的 URL 中,应该显示一个勾号,但 ?name=Fred?name=John 等在我的 URL 中应该显示一个叉号。

问题:当名称存在时显示勾号,但当名称不存在时不显示叉号。

【问题讨论】:

  • 目前的问题是什么?是否总是输入if或else?
  • 你检查过 $rota_sunday['person_name'] 和 $_GET['name'] 的值了吗?您应该检查空格和大小写。
  • 名称存在时显示勾号,但名称不存在时不显示叉号。
  • @Anant 这就是我想要的 - 准确地匹配名称并在为真时显示一个勾号。没有匹配显示叉号。
  • @Anant 我已将它添加到我原来的问题中 - 你会看到 Gina 存在 - 所以如果 ?name=Gina 在我的 URL 中应该显示一个勾号,但 ?name=Fred?name=John 等在我的 URL 中应该显示一个叉号。

标签: php mysql variables if-statement


【解决方案1】:

一个工作示例:-

<link rel="stylesheet" href="font-awesome-4.6.3/css/font-awesome.min.css">

<?php
  error_reporting(E_ALL); //check all type of errors
  ini_set('display_errors',1); // display those if any happen
  $_GET['name'] = 'fiksun';
  $rota_sun = Array
(
    '0' => Array
        (
            'rota_id' => 16,
            'person_id' => 0,
            'person_name' => 'Gina'
        ),
    '1' => Array
        (
            'rota_id' => 16,
            'person_id' => 0,
            'person_name' => 'fiksun'
        )

)
?>
<?php foreach($rota_sun as $rota_sunday): ?>
    <?php if($rota_sunday['person_name']== $_GET['name']) { ?>
        <span style="color:green; font-size:22px;"><i class="fa fa-check" aria-hidden="true"></i><?php echo $rota_sunday['person_name'];?></span>
      <?php } else { ?>
        <span style="color:red; font-size:22px;"><i class="fa fa-times" aria-hidden="true"></i><?php echo $rota_sunday['person_name'];?></span>
  <?php } ?>
<?php endforeach; ?>

输出:- http://prntscr.com/cf4ecd

注意:- 从这里下载 font-awesome 库:- http://fontawesome.io/get-started/

将完整的文件夹放在你当前的工作目录中

正确添加css文件。

这是工作目录结构:- http://prntscr.com/cf4fuk

更改您的查询:-

$query = "SELECT rota_sunday.id AS rota_id, rota_sunday.person_id AS person_id, rota_sunday.person_name AS person_name FROM rota_sunday WHERE rota_sunday.person_name Like '%".$_GET['$name']."%'";

【讨论】:

  • 感谢您的回答...我想我通过使用您的示例找到了问题的原因 - 但仍然无法修复它 - 我的数组似乎只从数据库返回一个结果。 Array ( [rota_id] =&gt; 17 [person_id] =&gt; 0 [person_name] =&gt; Gina ) 尽管有两条记录。
  • 由于您的查询,得到 1 个结果。
  • @Ben 检查我在回答中给出的查询。使用它并检查
  • @Anant 谢谢 - 查询确实有效,但它在一个框中返回所有记录 - 只需要打勾或交叉 - prntscr.com/cf4pgn
  • @Anant 当我将 $_GET['$escort'] 更改为 $_GET['name'] 时它可以工作 - 感谢你们的帮助。
【解决方案2】:

此查询将从 DB 中仅选择一个人。

$query = "SELECT
            rota_sunday.id AS rota_id,
            rota_sunday.person_id,
            rota_sunday.person_name
        FROM rota_sunday WHERE rota_sunday.person_name = " . $_GET['name'] . "LIMIT 1"; 
try 
{ 
    $stmt = $conn->prepare($query); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$rota_sun = $stmt->fetch(PDO::FETCH_ASSOC);

如果此人存在,则 $rota_sun 将包含结果,否则将返回 false,您将获得红十字。

   <?php if($rota_sun) { ?>
          <span style="color:green; font-size:22px;"><i class="fa fa-check" aria-hidden="true"></i></span>
   <?php } else { ?>
          <span style="color:red; font-size:22px;"><i class="fa fa-times" aria-hidden="true"></i></span>
   <?php } ?>

【讨论】:

  • 这就是我正在做的,但使用 if / else 语句来显示匹配的一件事,如果不匹配则显示一件事。但我似乎无法让它工作。
  • 问题不在于我的查询 - 它工作正常并将值存储为数组。我可以在垃圾场看到它们。如果我的数据库表中的名称无法匹配,则问题是显示一个叉号。
  • 您需要显示所有人名还是只显示其中一个人名?
  • @Ben 检查此查询$query = "SELECT rota_sunday.id AS rota_id, rota_sunday.person_id AS person_id, rota_sunday.person_name AS person_name FROM rota_sunday WHERE rota_sunday.person_name Like '%".$_GET['$name']."%'";
  • 是的,这个查询似乎合法,但为什么 $_GET['$name'] 不是 $_GET['name'] ?