2014-02-01 3 views
1

Не уверен, что это распространенная проблема или нет, но я столкнулся с ней. При попытке поместить оператор if/else в функцию, он просто не работает. Но когда do/else без функции, он работает (Итак, я знаю, что if/else верен).Если оператор не работает в функции

У меня есть 2 отдельные документы, Home.php и Functions.php вот что у меня внутри этих файлов»

Home.php (РНР)

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

menu(); 
?> 

И тогда мы имеем Functions.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?

+3

Я не вижу, функция –

+0

О, возгласы, позвольте мне обновлять это. – user3186208

+0

Может быть, что-то делать с '=' вместо '=='? Или это просто опечатка? '$ autoUser = $ getAutoUser' Может быть, не предполагайте сложной проблемы с языком, просто взгляните на то, что вы написали. – csmckelvey

ответ

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 разные вещи в определенном порядке:

первый => присвоить текущее значение $ somethingElse до $ что-то

второй => тест если $ something и $ somethingElse имеют одинаковое значение

2-й становится очевидно истинным из-за 1-го.

Чтобы обойти 1-й шаг, просто используйте == вместо =.

+0

Хорошо, спасибо, я соглашусь, когда смогу. Узнавайте что-то новое каждый день. – user3186208

+0

Вы должны принять ответ @ PHPGlue, потому что он указал правильную вещь.Я только что упомянул то, что вы найдете полезным, но которое напрямую не вызывает проблему, с которой вы столкнулись сейчас. – Jivan

+0

но это сделал исправление проблем. PHPGlue просто добавлен. – user3186208

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>'; 
} 
+0

Вы правы, но на самом деле я не отвечаю на мою проблему, хотя это моя ошибка, потому что я недостаточно объясняю. Но спасибо. – user3186208

Смежные вопросы