2013-08-29 20 views
0

嗨,我有一個瘋狂的探針。PHP包括它不應該因爲if條件

我嘗試根據條件包含不同的文件。該代碼是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.我不知道,因爲我包含require_once()後退出。更奇怪的是,包含Case 4的內容是不可見的。我只在螢火蟲中認識到內容和一些包含的文件正在改變光學器件。

一個諾特爾瘋狂的事情是,在情況4我給出了一個字符串的條件和他們不匹配條件:(

,如果我看在源代碼中的正常只與文件相匹配,其應不包括在內,但根本不包含那個包含

我知道所有這些聽起來很愚蠢,但我從來沒有像這樣的問題。我已經檢查了includet文件,但它只依賴於包含主文件所有其他文件的條件。

所以這是從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的內容,但也有jQuery的手機中包括這在ask_q.php中沒有包含。如果我打開源代碼,只顯示其他文件(而不是ask_q.php)的源代碼,但是當我在瀏覽器中觀看時,它並沒有顯示這些內容。

+3

對不起,我不確定你在問什麼,請編輯你的問題並確切地說出問題所在,當它不應該包含什麼文件時,在條件 – Anigel

+0

中使用的變量的值是什麼,包括來自會話的東西,沒有任何明顯的跡象表明會話數據正在驗證或消毒?這只是嚇壞了,要求麻煩!另外,爲什麼不使用類自動加載器呢? – GordonM

+0

我想在案例3中包含該文件。它工作到目前爲止,但它也包括來自案例4的文件。當我去源代碼時,我只看到案例4中的文件的源代碼不是來自文件中的文件情況3.但瀏覽器也呈現了來自ask_q的文件 – dopamin90

回答

0

我不能評論,因爲我的聲譽不夠高。 就我個人而言,我認爲在所有這些方面還有其他的東西,我們沒有看到這是導致問題的原因。

顯而易見的問題是:

  • 哪裏是$ cat_wanted和$ cat_current被設置和改變? - 我們沒有看到它
  • 圍繞您所提供代碼的其餘代碼在哪裏?
  • 您給出的代碼本身包含了哪些代碼?
  • 不包含ask_q.php文件的位置是什麼?我們看不到他們的名字。
  • 如果其中一個文件正在運行,然後調用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。
0

爲了找到一個soloution我剛剛踢了jQuery的手機,一切工作正常。源代碼看起來不錯,一切都很好。

還不知道爲什麼這不起作用。在檢查完所有答案之後,沒有任何幫助:(((