【问题标题】:How to get clickable list item with php switch to work如何使用 php 开关让可点击的列表项工作
【发布时间】:2021-03-25 19:28:17
【问题描述】:

我为我的网站构建了一个非常基本的开关,它运行良好。 我遇到的问题是可点击的列表项。背后的想法是当我点击任何列表项时 - 切换显示适当的问候语(无论我点击晚上还是下午)。出于某种原因,它仅适用于“test.php?timeNow=Night” 请帮忙

<!DOCTYPE html>
<html>
<body>
<?php

date_default_timezone_set('America/Los_Angeles');
if(isset($_GET['timeNow'])) {
    $timeNow = $_GET['timeNow'];
} else {
    $timeNow = date('H:i a');
}

if ($timeNow < 4) {
    $timeNow = 'Night';
} elseif ($timeNow < 12) {
    $timeNow = 'Morning';
} elseif($timeNow < 18) {
    $timeNow = 'Afternoon';
} else {
    $timeNow = 'Evening';
}

switch($timeNow) {
    case 'Night' : 
        $greeting = 'Good night!';
        break;

    case 'Morning' : 
        $greeting = 'Good morning!';
        break;

    case 'Afternoon' : 
        $greeting = 'Good afternoon!';
        break;

    case 'Evening' : 
        $greeting = 'Good evening!';
        break;

}
?> 
        <blockquote>
            <?php echo $greeting; ?> Welcome to this website!
        </blockquote>
         <p><?php echo $timeNow; ?></p> 

        <ul> 
            <li><a href="test.php?timeNow=Night">Night</a></li>
            <li><a href="test.php?timeNow=Morning">Morning</a></li>
            <li><a href="test.php?timeNow=Afternoon">Afternoon</a></li>
            <li><a href="test.php?timeNow=Evening">Evening</a></li>
        </ul>
        
        
</body>
</html>

【问题讨论】:

    标签: php html switch-statement


    【解决方案1】:

    问题出在 if 语句中,您将 stringinteger 类型值进行比较并且它返回 true

    $timeNow = 'Night';
    if ($timeNow < 4) return true;
    else return false;
    

    此语句将始终返回 true,因为在这种情况下 $timeNow &lt; 4true

    【讨论】:

    • 是的,这正是原因,但问题在于错误的列表 href 而不是 if 语句本身 :) ? 感谢您的贡献!!!
    【解决方案2】:

    请添加中断(and move the if-then-else block to the correct place)。请将你的代码修改为以下,试试效果。

    <!DOCTYPE html>
    <html>
    <body>
    <?php
    
    date_default_timezone_set('America/Los_Angeles');
    
    if(isset($_GET['timeNow'])) {
        $timeNow = $_GET['timeNow'];
    } else {
        $timeNow = date('H:i a');
    
    if ($timeNow < 4) {
        $timeNow = 'Night';
    } elseif ($timeNow < 12) {
        $timeNow = 'Morning';
    } elseif($timeNow < 18) {
        $timeNow = 'Afternoon';
    } else {
        $timeNow = 'Evening';
    }
    
        
        }
    
    
    
    switch($timeNow) {
        case 'Night' : 
            $greeting = 'Good night!';
            break;
    
        case 'Morning' : 
            $greeting = 'Good morning!';
            break;
    
        case 'Afternoon' : 
            $greeting = 'Good afternoon!';
            break;
    
        case 'Evening' : 
            $greeting = 'Good evening!';
            break;
    
    }
    ?> 
            <blockquote>
                <?php echo $greeting; ?> Welcome to this website!
            </blockquote>
             <p><?php echo $timeNow; ?></p> 
    
            <ul> 
                <li><a href="test.php?timeNow=Night">Night</a></li>
                <li><a href="test.php?timeNow=Morning">Morning</a></li>
                <li><a href="test.php?timeNow=Afternoon">Afternoon</a></li>
                <li><a href="test.php?timeNow=Evening">Evening</a></li>
            </ul>
            
            
    </body>
    </html>
    
    

    【讨论】:

    • 实际上,在我发帖之前,我已经休息了。我从帖子中删除了许多代码行,希望让它更短哈哈。但是,是的,可点击的列表项仍然只选择晚上,但 switch 本身工作得很好,并且根据 if 语句
    • 缺少中断会导致始终应用 last 值,而不是第一个值。
    • @El_Vanja,是的,如上所述,我只是偶然删除了帖子中的中断,以使帖子更短:) 我最初的代码中有中断。我的开关工作正常,列表项有问题,人们可以手动选择开关盒,它会出现在地址行中,如 test.php?timeNow=Morning
    • 嗨@holycanoly,我已经进一步修改了答案中的代码。请看现在是否有人可以手动选择switch case。
    【解决方案3】:

    我和我的朋友发现了问题。 问题是下面的列表项返回一个字符串(即 pagename.php?timeNow = 字符串值)

    <ul> 
        <li><a href="test.php?timeNow=Night">Night</a></li>
        <li><a href="test.php?timeNow=Morning">Morning</a></li>
        <li><a href="test.php?timeNow=Afternoon">Afternoon</a></li>
        <li><a href="test.php?timeNow=Evening">Evening</a></li>
    </ul>
    

    因此,为了使其正常工作,我们需要使用数值(一天中的某个时间),因此它可以应用于以下 if 语句,并在 - 之后应用于 switch 案例

    if ($timeNow < 4) {
        $timeNow = 'Night';
    } elseif ($timeNow < 12) {
        $timeNow = 'Morning';
    } elseif($timeNow < 18) {
        $timeNow = 'Afternoon';
    } else {
        $timeNow = 'Evening';
    }
    

    需要做的事情如下:

    <ul> 
        <li><a href="test.php?timeNow=3">Night</a></li>
        <li><a href="test.php?timeNow=11">Morning</a></li>
        <li><a href="test.php?timeNow=17">Afternoon</a></li>
        <li><a href="test.php?timeNow=22">Evening</a></li>
    </ul>
    

    基本上,我们会给出一个小时,该小时将属于夜间、上午、下午和晚上所需的时间段。 考虑到 if 语句,如果 timeNow = 3,它属于第一个 if 情况(小于 4),这意味着 timeNow = Night,它本质上将使用 Night switch 情况。

    一个非常愚蠢的错误,但没有人注意到:)

    我希望这个帖子将来能对某人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多