不确定这是否是一个常见问题,但我继续讨论。当尝试将if / else语句放入函数时,它很简单无效。但是当没有函数的if / else时,它确实有效(所以,我知道if / else是正确的)。
我有2个单独的文档,Home.php
和Functions.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语句吗?
答案 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>';
}