-2

スイッチ/ケース条件の下で $_SESSION['next'] のセッションを設定できませんが、$_SESSION['user_id'] は条件の前に完全に機能します。スクリプトは、switch/case 条件の各条件に実行され、$_SESSION['next'] を設定せずにリダイレクトされます。機能しない特定の理由はありますか?これを解決する方法は?

require_once ('../src/facebook.php');
require_once ('../src/fbconfig.php');

//Facebook Authentication part
$user_id = $facebook->getUser();

if ($user_id <> '0' && $user_id <> '') {
session_start();
$_SESSION['user_id'] = $user_id;

switch((isset($_GET['page']) ? $_GET['page'] : '')){
    case 'abc';{
        $_SESSION['next'] = 'AAA';
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        exit;}  
    case 'def';{
        $_SESSION['next'] = 'BBB'; 
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        exit;}  
    case 'ghi';{
        $_SESSION['next'] = 'CCC'; 
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        exit;}
    default;{
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        exit;}                                                                                                                                                                              
}   

} else {
echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";   
exit;
}
4

2 に答える 2

3

あなたのスイッチはすべて間違っています。マニュアルを読んで、これを試してください:

<?php

switch ((isset($_GET['page']) ? $_GET['page'] : '')){
    case 'abc':
        $_SESSION['next'] = 'AAA';
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        break;
    case 'def':
        $_SESSION['next'] = 'BBB';
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        break;
    case 'ghi':
        $_SESSION['next'] = 'CCC';
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        break;
    default:
        echo "<script>top.location.href = 'https://www.example.com/xxx/'</script>";
        break;
}

で使用exitしていますswitchが、これは(スクリプトをスイッチで終了させたくない場合を除き)ノーノーです。代わりに、breakキーワードを使用する必要があります。

ケースごとにセミコロンと中括弧も使用します。

case 'ghi';{ ... }

いいえ!正しい使い方は

case 'ghi':
    .
    .
    .
    break;

更新:この行を使用していることに気付きました:

if ($user_id <> '0' && $user_id <> '') { ... }

<>PHPコードで何をしていますか? 「等しくない」ための「標準」演算子は!=PHP にあります。正しく使用しないと、誰もあなたのコードを使用したくないでしょう。

2番目の更新:ケースに設定することはありませ$_SESSION['next']default。あなたが常にケースswitchに行く可能性が非常に高いです。defaultこれにより、発生している動作が発生します。

于 2012-08-20T18:00:13.967 に答える