Php If语句在函数中不起作用

Php If语句在函数中不起作用,php,html,mysql,if-statement,pdo,Php,Html,Mysql,If Statement,Pdo,不确定这是否是一个常见问题,但我偶然发现了它。当尝试将if/else语句放入函数中时,simple不起作用。但是如果不使用该函数执行if/else,它确实可以工作,我知道if/else是正确的 我有两个单独的文档,Home.php和Functions.php,这是我在这些文件中的内容 php中的Home.php 不知道为什么这不起作用。您不允许在PHP函数中使用if/else语句吗?实际上,您可以确定如果。。。else语句在函数范围内工作 因此,问题在别处。。。但你还应该做另一件事: // Re

不确定这是否是一个常见问题,但我偶然发现了它。当尝试将if/else语句放入函数中时,simple不起作用。但是如果不使用该函数执行if/else,它确实可以工作,我知道if/else是正确的

我有两个单独的文档,Home.php和Functions.php,这是我在这些文件中的内容

php中的Home.php


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

实际上,您可以确定如果。。。else语句在函数范围内工作

因此,问题在别处。。。但你还应该做另一件事:

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

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

因为当你说如果$something=$something时,你会按照特定的顺序告诉PHP不同的事情:

1st=>将$somethingElse的当前值分配给$something

第二个=>测试$something和$somethingles是否共享相同的值

因为第一,第二变得明显真实


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

实际上,您可以确定如果。。。else语句在函数范围内工作

因此,问题在别处。。。但你还应该做另一件事:

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

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

因为当你说如果$something=$something时,你会按照特定的顺序告诉PHP不同的事情:

1st=>将$somethingElse的当前值分配给$something

第二个=>测试$something和$somethingles是否共享相同的值

因为第一,第二变得明显真实

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

$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>';
}
$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>';
}

我看不到函数哦,哎呀,让我更新一下。也许是关于=而不是==?或者这只是一个打字错误$autoUser=$getAutoUser可能不认为该语言存在一些复杂的问题,只需仔细看看您编写的内容。是的,我的语法失败。需要注意两件事:1您不需要在functions.php中重新连接到数据库。如果将functions.php包含到已建立连接的php文件中,则可以重用该连接。2$db变量不在菜单函数的范围内。您需要在函数的作用域中包含$db变量,方法是在函数中使用全局$db,或者将$db作为参数传递给menu,如menu$db。我没有看到函数哦,哎呀,让我更新一下。可能与=而不是==有关?或者这只是一个打字错误$autoUser=$getAutoUser可能不认为该语言存在一些复杂的问题,只需仔细看看您编写的内容。是的,我的语法失败。需要注意两件事:1您不需要在functions.php中重新连接到数据库。如果将functions.php包含到已建立连接的php文件中,则可以重用该连接。2$db变量不在菜单函数的范围内。您需要在函数的作用域中包含$db变量,方法是在函数中使用全局$db,或者将$db作为参数传递给menu,如menu$db。好的,谢谢,如果可以,我会接受。每天学习新的东西。你应该接受@PHPGlue的答案,因为他指出了正确的东西。我刚才提到了一些你会发现有用的东西,但这并不是你现在面临的问题的直接原因。但这确实解决了我的问题。PHPGlue只是增加了一点。好的,谢谢,我会尽可能接受的。每天学习新的东西。你应该接受@PHPGlue的答案,因为他指出了正确的东西。我刚才提到了一些你会发现有用的东西,但这并不是你现在面临的问题的直接原因。但这确实解决了我的问题。PHPGlue只是增加了一点。你是对的,但它并没有真正回答我的问题,尽管这是我解释得不够好的过错。但是,谢谢。你是对的,但这并不能真正回答我的问题,尽管这是我解释得不够好的过错。但是,谢谢你。