如果语句在函数中不起作用

时间:2014-02-01 00:16:58

标签: php html mysql if-statement pdo

不确定这是否是一个常见问题,但我继续讨论。当尝试将if / else语句放入函数时,它很简单无效。但是当没有函数的if / else时,它确实有效(所以,我知道if / else是正确的)。

我有2个单独的文档,Home.phpFunctions.php这里是我在这些文件中的内容“

Home.php(PHP)

<?php
$db = new PDO("mysql:host=localhost;dbname=TEST;charset=utf8","Xero",""); 
include("Functions.php");

menu();
?>

然后我们有Functions.php(PHP)

<?php 
$db = new PDO("mysql:host=localhost;dbname=TEST;charset=utf8","Xero",""); 

function menu() {
    echo "
    <div id='menu'>
        <div id='user-menu'>
    ";
        // Check AutoLogin-User then :
        $getAutoUser = $db->prepare("SELECT * FROM `users-PHP_FNC` WHERE `ip`='" . $_SERVER['REMOTE_ADDR'] . "'");
        $getAutoUser->execute();
        if ($autoUser = $getAutoUser->fetch(PDO::FETCH_ASSOC)) {
            echo "
            " . $autoUser['user'] . "
            ";
        } 
        // If no AutoLogin-User was found:
        else {
            echo "
            Test
            ";
        }
    echo "
        </div>
    </div>
    ";
}
?>

不确定为什么这不起作用。你不允许在PHP函数中使用if / else语句吗?

2 个答案:

答案 0 :(得分:3)

实际上,您可以确保if ... else语句工作在函数范围内。

因此,问题出在其他地方......但是你应该做另外一件事:

// Replace this
if ($autoUser = $getAutoUser->fetch(PDO::FETCH_ASSOC))

// By this
if ($autoUser == $getAutoUser->fetch(PDO::FETCH_ASSOC))

为什么?

因为当你说if ($something = $somethingElse)时,你会按特定的顺序告诉PHP不同的东西:

  

第一 =&gt;将$ somethingElse的当前值分配给$ something

     

第二次 =&gt;测试$ something和$ somethingElse是否共享相同的值

第二名因为第一名而变得显而易见。

要绕过第1步,只需使用==代替=

答案 1 :(得分:1)

$db不在函数的范围内。你必须传入它。我会使我的代码更像:

// connect.php - should be in a separate secure folder I'll call restricted
<?php
function db(){
  return new PDO('mysql:host=localhost;dbname=TEST;charset=utf8', 'Xero', '');
}
?>

// index.php
<?php
include_once 'restricted/connect.php';
function menu(){
  $db = db();
  echo "<div id='menu'><div id='user-menu'>";
  // Check AutoLogin-User then :
  $getAutoUser = $db->prepare("SELECT * FROM `users-PHP_FNC` WHERE ip='{$_SERVER['REMOTE_ADDR']}'");
  $getAutoUser->execute();
  if($autoUser = $getAutoUser->fetch(PDO::FETCH_ASSOC)) {
    echo $autoUser['user'];
  } 
  else{
    // If no AutoLogin-User was found:
    echo 'Test';
  }
  echo '</div></div>';
}