簡體   English   中英

為什么我的頁面在添加 IF 語句時出錯?

[英]Why does my page error when I add an IF statement?

我是編碼新手,也是 Bootstrap 新手。 我遇到了 Bootstrap Navbar 的問題,一切順利,直到我嘗試使用連續的 IF 語句來檢查 Session 並顯示或不顯示特定的菜單項。

我在大多數頁面上都有一個function drawTopMenu() PHP function。 這個 header 正在使用 YUI,我正在將其更改為 Bootstrap。 這是代碼的第一部分,沒有給出任何問題。 這是一個測試文件,因為我在試圖找出原因時遇到了很多麻煩。

我試圖刪除 IF 語句,這解決了“HTTP 500 服務器錯誤”,但我確實需要向特定用戶顯示特定項目。 我還嘗試恢復到 YUI 菜單欄 cade,它可以很好地處理更多 IF 語句。

編輯:

  • 我已將IF {}中的代碼替換為“...”,這當然不會導致問題。 這是 IF 語句,只要我添加額外的 IF 語句,代碼就會中斷。 即使我的primaryGroupId = 2和第三個 IF 也應該被跳過。
  • 我已將 Bootstrap 版本從 4.0.0 更改為 5.0.2,並相應地更改了代碼,但 IF 語句的問題仍然存在。
  • 另外,服務器使用的是 php 5.6.40,我也想把 go 升級到最新版本。

代碼現在看起來像這樣“//BREAKS THE CODE”是導致問題的 IF 語句:

function drawTopMenu () {
    
 $session_int = $_SESSION['primaryGroupId'];
    
 //Bootsrap menubar
 $html = <<<EOS
    
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
    
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">   
<a class="navbar-brand" href="/home.php">
<img src="http://192.168.42.30:8080/lqcadjust/logo-grey.png" alt="Home" width="153" height="34"></a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav me-auto mb-2 mb-lg-0">
EOS;

//Approval List
if (($session_int == 1) || ($session_int == 2)) {
$html .= <<<EOS
        <li class="nav-item"><a class="nav-link" href="/home/event/approval_status.php">Approval List</a></li>
EOS;
}

//File Maintenance
if (($session_int == 1) || ($session_int == 2)) {
...
}

if (($session_int == 2)){
...
}

//BREAKS THE CODE
if (($session_int == 3)){
...
}
//BREAKS THE CODE
}

我通過使用switch而不是if找到了解決方法,這更優雅並且有效。 我不知道為什么會這樣!

編輯:我使用 IF 語句來解釋不同的用戶權限。 為此,我需要覆蓋每個菜單項的許多 IF 語句,現在我制作了 1 個 switch 語句,它覆蓋了整個菜單項。

從:

//File Maintenance item
IF ($session_int == 1){
...
}

IF ($session_int == 2){
...
}

IF ($session_int == 9){
...
}

IF ($session_int == 11){
...
}

TO (這里是關於如何使用switch的解釋,由 w3 提供)

//File Maintenance item
switch ($session_int){
    case 1:
…
    break;
    case 2:
…
    break;
    case 9:
…
    break;
    case 11:
…
    break;
}

我知道這不是解決方案,所以我不會將其標記為這樣,只是另一種方法。

如果有人對解決方案有建議,請分享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM