0

こんにちは、クレイジーな問題があります。

条件に応じてさまざまなファイルを含めるようにしています。コードは、experiment.php の次のとおりです。

    <?php session_start();
/*

MO = Menu-Order

TD = Top-Down-Menu
SP = Side-Pull-Menu
R  = Radial-Menu

   | Reihenfolge  || Aufgabennummer     |
---+--------------++--------------------+-
MO | TD | SP |  R || T TD | T SP |  T R |
---+----+----+----++------+------+------+-
 1 |  1 |  2 |  3 ||    1 |    2 |    3 |
 2 |  1 |  3 |  2 ||    2 |    3 |    1 |
 3 |  2 |  1 |  3 ||    3 |    1 |    2 |
 4 |  2 |  3 |  1 ||    1 |    3 |    2 |
 5 |  3 |  1 |  2 ||    2 |    1 |    3 |
 6 |  3 |  2 |  1 ||    3 |    2 |    1 |


Aufgabennummer:

Task1: Top-News -> Wirtschaft -> Reise      -> Wissen     -> Wirtschaft
Task2: Top-News -> Wissen     -> Sport      -> Netzwelt   -> Wissen
Task3: Top-News -> Kultur     -> Top-News   -> Reise      -> Kultur

*/

    //echo '<pre>'; print_r($_SESSION); echo '</pre>';

    $task_1 = array(
        0 => array(
            'category' => 'Wirtschaft',
            'article'  => 'Faule Kredite steigen auf Rekordniveau',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        1 => array(
            'category' => 'Reise',
            'article'  => 'Die Haxen des Bösen',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        2 => array(
            'category' => 'Wissen',
            'article'  => 'Kulante Eltern haben kulante Kinder',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        3 => array(
            'category' => 'Wirtschaft',
            'article'  => 'Schweiz stoppt Skilift-Lieferung an Kim Jong Un',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        )
    );


    $task_2 = array(
        0 => array(
            'category' => 'Wissen',
            'article'  => 'Delfinsterben bleibt Rätselhaft',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        1 => array(
            'category' => 'Sport',
            'article'  => 'Almaty bewirbt sich um Winterspiele 2022',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        2 => array(
            'category' => 'Netzwelt',
            'article'  => 'Samsung kürt geklautes Bild zum Siegerfoto',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        3 => array(
            'category' => 'Wissen',
            'article'  => 'Kulante Eltern haben kulante Kinder',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        )
    );

    $task_3 = array(
        0 => array(
            'category' => 'Kultur',
            'article'  => 'Spanische Rentnerin soll an Einnahmen beteiligt werden',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        1 => array(
            'category' => 'Top-News',
            'article'  => 'Unfallserie blockiert Rhein in Köln',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        2 => array(
            'category' => 'Reise',
            'article'  => 'Verkehrschaos in der Lagune',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        ), 
        3 => array(
            'category' => 'Kultur',
            'article'  => 'Schlaflos mit Schlingel',
            'done'     => 0,
            'clicks'   => 0,
            'start_time' => 0,
            'end_time'   => 0
        )
    );

    $sp = 'index-sidepull.php';
    $r  = 'index-radial.php';
    $td = 'index-topdown.php';


    $menu_order = 1;

    // Fortschritts Variablen setzen wenn nicht gesetzt

    if(!isset($_SESSION['progress']) or !isset($_SESSION['initial'])){
        $_SESSION['progress'] = 0;
        $_SESSION['initial']  = 1;
    }

    // Fortschritt initialisieren wenn nicht vorhanden

    if($_SESSION['progress'] == 0){

        $_SESSION['menu'][1]['done'] = 0;
        $_SESSION['menu'][2]['done'] = 0;
        $_SESSION['menu'][3]['done'] = 0;

        /*
         *
         * Menüreihenfolgen bestimmen
         *
         */ 

        if($menu_order == 1){

            $_SESSION['menu'][1]['file'] = $td;
            $_SESSION['menu'][2]['file'] = $sp;
            $_SESSION['menu'][3]['file'] = $r;

            $_SESSION['menu'][1]['task'] = $task_1;
            $_SESSION['menu'][2]['task'] = $task_2;
            $_SESSION['menu'][3]['task'] = $task_3;


        }elseif($menu_order == 2){

            $_SESSION['menu'][1]['file'] = $td;
            $_SESSION['menu'][2]['file'] = $r;
            $_SESSION['menu'][3]['file'] = $sp;

            $_SESSION['menu'][1]['task'] = $task_2;
            $_SESSION['menu'][2]['task'] = $task_3;
            $_SESSION['menu'][3]['task'] = $task_1;

        }

    }




    // Anhand des aktuellen Fortschritts Menü und Aufgabe herausfinden

    $menu_id = intval($_SESSION['progress']/3) + 1;
    $task_id = $_SESSION['progress'] % 4;

    $cat_wanted  = strtolower($_SESSION['menu'][$menu_id]['task'][$task_id]['category']);
    $cat_current = str_replace('-', '', $_GET['topic']);

    // Wenn aufgabenstellung gelesen und auf start geklickt wurde

    if($_SESSION['initial'] == 1){
        //exit();
        require_once('ask_q.php');
        exit("INITIAL");

    }
    elseif(isset($_POST['start_time'])){

        $_SESSION['menu'][$menu_id]['task'][$task_id]['start_time'] = time();
        $_SESSION['menu'][$menu_id]['task'][$task_id]['clicks']     = 0;
        //exit();
        require_once($_SESSION['menu'][$menu_id]['file']);
        break;
        exit('CASE 2');
    // Wenn gesuchte Kategorie gefunden wurde

    }elseif( $cat_wanted == $cat_current){

        $_SESSION['menu'][$menu_id]['task'][$task_id]['end_time'] = time();
        $_SESSION['menu'][$menu_id]['task'][$task_id]['clicks']++;
        $_SESSION['menu'][$menu_id]['task'][$task_id]['done']     = 1;
        $_SESSION['progress']++;

        require_once('ask_q.php');


        exit('CASE 3');

    // Wenn gesuchte Kategorie noch nicht gefunden wurde Seite anzeigen

    }elseif( $cat_current != $cat_wanted ){
       echo 'Cat Wantet: ' . $cat_wanted . ' != ' . $cat_wanted . ' :Cat Current';
        $_SESSION['menu'][$menu_id]['task'][$task_id]['clicks']++;
        require_once($_SESSION['menu'][$menu_id]['file']);

        exit('CASE 4');
    }else{
        exit('CASE 5');
    }


?>

奇妙なことに、適切な時点で ask_q.php ファイル (ケース 3) だけでなく、ケース 4 も含まれています。さらに奇妙なのは、含まれているケース 4 のものが見えないことです。コンテンツといくつかの含まれているファイルが光学系を変更していることをfirebugで認識しただけです。

もう1つのクレイジーなことは、ケース4で条件を文字列で指定し、それらが条件と一致しないことです:(

そして、通常のソースコードを見ると、含まれるべきではないファイルとのみ一致し、含まれているファイルとは一致しません

これは本当にばかげているように聞こえますが、このような問題は一度もありませんでした。私はすでにインクルードファイルをチェックしていますが、条件によって他のすべてのファイルを含むメインファイルにのみ依存しています。

これはask_q.phpのものです:

<!DOCTYPE html> 
<?php

$_SESSION['initial'] = 0;
$menu_id = intval($_SESSION['progress']/3) + 1;
$task_id = $_SESSION['progress'] % 4;

?>
<html>

    <head>
        <title>Aufgabe <?php echo ($_SESSION['progress'] + 1);?></title>
        <link href="css/bootstrap.no-icons.css" rel="stylesheet">
        <link href="css/font-awesome.css" rel="stylesheet">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
    </head>

    <body id="task">
        <h2>Augabe <?php echo ($_SESSION['progress'] + 1);?></h2>
        <p>Finde den Artikel <strong>"<?php echo $_SESSION['menu'][$menu_id]['task'][$task_id]['article'];?>"</strong> 
        in der Kategorie <strong>"<?php echo $_SESSION['menu'][$menu_id]['task'][$task_id]['category'];?>"</strong></p>

        <form id="start_task" method="post" action="experiment.php">

            <input type="hidden" name="start_time" value="1">

            <input type="submit" value="Los gehts">

        </form>

        <?php echo '<pre style="clear:both;">'; print_r($_SESSION); echo '</pre>';?>

    </body>

</html>

そして、これは他のファイルのソースコードです:

<!DOCTYPE html >
<html>
    <head>
        <title>World News</title>
        <link href="css/bootstrap.no-icons.css" rel="stylesheet">
        <link href="css/font-awesome.css" rel="stylesheet">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <link rel='stylesheet' href='http://fonts.googleapis.com/css?family=UnifrakturCook:700|Rye|UnifrakturMaguntia' type='text/css'>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css" />
        <script src="js/jquery.js" type="text/javascript"></script>
        <!--<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>!-->
        <script src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>
        <script src="js/topdown.js" type="text/javascript"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
    </head>
    <body>

            <div data-role="page">
                <nav id="topdown">
                    <div id="menu-items">
                        <?php require_once('nav-topdown.php');?>
                    </div>
                </nav>


                <header>
                    <?php require_once('header.php');?>
                </header>

                <div id="main-topdown">
                     <div style="height:43px"></div>
                    <?php require_once('content.php');?>
                    <?php //echo 'Cat Wantet = ' . $cat_wanted;?>
                </div>
                <?php echo '<pre style="clear:both;">'; print_r($_SESSION); echo '</pre>';?>
            </div>


            <div data-role="dialog" id="dialogPage">
                <div data-role="header">
                    <h2>Aufgabe</h2>
                </div>
                <div data-role="content">
                    <p>Finde den Artikel <strong>"<?php echo $_SESSION['menu'][$i]['task'][$j]['article'];?>"</strong> 
                    in der Kategorie <strong>"<?php echo $_SESSION['menu'][$i]['task'][$j]['category'];?>"</strong></p>
                    <a id="start" data-theme="b" data-rel="back" data-role="button" href="#" data-corners="true" data-shadow="true" data-iconshadow="true" data-wrapperels="span" data-transition="pop" data-direction="reverse">
                    Los gehts!
                </a>
                </div>

            </div>

        <script>

            function initResize(){
                $('#topdown').hide();
            }

            $(document).ready(function(){

                initResize();

                var category = "<?php echo $_SESSION['menu'][$i]['task'][$j]['category']; ?>";
                var article  = "<?php echo $_SESSION['menu'][$i]['task'][$j]['article']; ?>";

                //alert('Aufgabe', 'Finde den Artikel <strong>"' + article + '"</strong> in der Kategorie <strong>"' + category + '"</strong>');

                $("#start").click(function(){
                   $.ajax({
                      type: "POST",
                      url: "ajax.php",
                      data: {task_start: new Date().getTime()},
                      success: function(){
                           $('.ui-dialog').dialog('close');
                      }
                   });

                   return false;
                });

                //console.log($('#main').css('height')); 
                $('#menu-link').click(function(){

                    if( $('#topdown').css('display') != 'block'){

                        $('#topdown').fadeIn();
                    }else{
                        $('#topdown').hide();
                    }
               });


            });

            $(window).resize(function(){
                //initResize();
            });

        </script>

    </body>
</html>

私は実際にask_q.phpの内容を見ているので何か問題があることを認識していますが、明らかにask_q.phpには含まれていないjquery-mobileも含まれています。ソースコードを開くと、他のファイル (ask_q.php ではない) のソースコードが表示されるだけですが、ブラウザーでそれを見るだけでは、そのようなものはまったく表示されません。

4

2 に答える 2

0

解決策を見つけるために、jquery-mobile を追い出したところ、すべて正常に動作しています。ソースコードは見栄えがよく、すべてが良好です。

なぜこれが機能しないのか、まだわかりません。すべての回答を確認した後、何も役に立ちませんでした:(((

于 2013-08-29T15:20:09.710 に答える
0

私の評判が十分に高くないので、私はコメントできません。個人的には、これらすべてに関連して、問題の原因となっている他の何かがあると思います。

明らかな質問は次のとおりです。

  • $cat_wanted と $cat_current はどこで設定および変更されていますか? - 私たちはそれを見ません
  • あなたが与えたコードの周りにある残りのコードはどこにありますか?
  • あなたがインクルードしたコードはそれ自体ですか?
  • ask_q.php ではない場合に含めるファイルの場所はどこですか? 彼らの名前は見えません。
  • これらのファイルの 1 つが実行中で、ask_q.php を呼び出している場合はどうなりますか?

観察

  • 最後の elsif は必要ありません。ELSEにするだけです。$cat_wanted != $cat_current の場合、== であるかどうかを調べる必要はありません。
  • $_SESSION['menu'][$menu_id]['task'][$task_id] を常に参照する代わりに、 $_s =& $_SESSION['menu'][$menu_id]['task'][ を設定するだけです$task_id]; 代わりに $_s を使用します。
于 2013-08-29T13:13:00.877 に答える