2013-12-17 23 views
0

我有非常簡單的PHP腳本,但它讓我感到困惑。這是我的腳本否則如果在PHP上運行不正確

<?php 

for($j=0; $j < $muter; $j++) 
{ 
    if(($_SESSION[KODE]) == ($acak[$j])) 
    { 
     $sql_update = "UPDATE unik SET kota = '$kota', 
         hadiah = '$hadiah', 
         nama = '$nama', 
        email = '$email', 
        status = 'menang' 
         WHERE unik_id = '$_SESSION[KODE]'"; 

     $data_update = mysql_query($sql_update); 

     echo "<script>window.location='menang.php';</script>"; 

     }//end if 
     else 
     { 
     $sql_update = "UPDATE unik SET kota = '$kota', 
         nama = '$nama', 
         email = '$email', 
         status = 'kalah' 
        WHERE unik_id = '$_SESSION[KODE]'"; 
     $data_update = mysql_query($sql_update);  

     echo "<script>window.location='kalah.php';</script>"; 

     }//end of else if 
    }//end for 

?> 

的問題是:運行的代碼那麼,如果我評論此腳本

echo "<script> 
     window.location='kalah.php'; 
     </script>"; 

但如果不要註釋的JS window.location的劇本經常去其他部分(永遠不會到第一條件)。而我需要JS window.location腳本。

我該如何解決這個問題?

林非常感謝你的回答。

感謝

+2

清潔你的腳本,請! –

+0

縮進和乾淨的代碼將解決你的一半問題。試試看。 – Rikesh

+0

爲什麼使用javascript?使用'header(「Location:kalah.php」)''header(「Location:menang.php」)'它不會解決你的問題,但它會簡化它。 – mseifert

回答

1

您正在使用循環進行重定向。它完全錯誤。因爲執行一段時間if並且有時執行else。所以瀏覽器感到困惑。

所以你必須重定向到循環結尾的任何特定頁面。

嘗試運行此代碼,它將顯示您將在if/else條件中有多少次基於您可以在完成循環後添加用於重定向的邏輯。

<?php 
for($j=0; $j < $muter; $j++) 
{ 
    if($_SESSION['KODE'] == $acak[$j]) 
    { 
     $sql_update = "UPDATE unik SET kota = '$kota', 
      hadiah = '$hadiah', 
      nama = '$nama', 
      email = '$email', 
      status = 'menang' 
      WHERE unik_id = '$_SESSION[KODE]'"; 

     $data_update = mysql_query($sql_update); 
     echo "Inside if <br>"; 
    }//end if 
    else 
    { 
     $sql_update = "UPDATE unik SET kota = '$kota', 
      nama = '$nama', 
      email = '$email', 
      status = 'kalah' 
      WHERE unik_id = '$_SESSION[KODE]'"; 
     $data_update = mysql_query($sql_update);  
     echo "Inside else <br>"; 
    }//end of else if 
}//end for 
?> 
+0

那麼我應該怎麼做我的重定向呢? – Uchsun

+0

@Uchsun重定向應該只有一次,一旦循環完成,您可以重定向。因爲多個重定向混淆了瀏覽器。 – Parixit

+0

我可以使用轉到該腳本。那麼在條件之後,我使用goto語句來管理重定向嗎? – Uchsun

0

您的問題是在這裏WHERE unik_id = '$_SESSION[KODE]'";您需要訪問$ _SESSION值WHERE unik_id = '$_SESSION['KODE']'";

<?php 
for($j=0; $j < $muter; $j++) 
{ 

    if(($_SESSION['KODE']) == ($acak[$j])) 
    { 

     $sql_update = "UPDATE unik SET kota = '$kota', hadiah = '$hadiah', 
     nama = '$nama', 
     email = '$email', 
     status = 'menang' 
     WHERE unik_id = '$_SESSION['KODE']'"; 

     $data_update = mysql_query($sql_update); 
     echo "<script> 
     window.location='menang.php'; 
     </script>"; 

    }//end if 
    else 
    { 

     $sql_update = "UPDATE unik SET kota = '$kota', 
     nama = '$nama', 
     email = '$email', 
     status = 'kalah' 
     WHERE unik_id = '$_SESSION['KODE']'"; 

     $data_update = mysql_query($sql_update); 


     echo "<script> 
     window.location='kalah.php'; 
     </script>"; 


    }//end of else if 
}//end for 

?> 
+0

這個假設'KODE'不是'define()'d常量,但我認爲你是對的。假設他的意思是$ _SESSION ['KODE']',他還需要修正他的'if()'條件。 –

+0

是啊!我更新代碼,謝謝! –

0

很奇怪的嘗試。基本上你正在循環一些東西並檢查你的循環中的一個條件。但在任何情況下,你回聲window.location更改JavaScript。所以每次迭代都會輸出。這看起來不正確。

最後,你應該得到零或更多的javascript位置更改,這將是一個非常奇怪的解決方案,至少可以說。

+0

好吧,讓我們說我的劇本很奇怪。你能告訴我解決這個問題嗎?循環並檢查循環內部的條件並在其後進行重定向。也許你的解決方案讓我清楚。我是PHP新手。謝謝 – Uchsun

+0

我並不十分熟悉你想達到的目標。但是因爲它總是一個「重定向」,所以你可以跳過for循環並簡單地運行第一次迭代(例如,如果$ muter> 0,比如當$ j爲0時) – MaGnetas

0

嗯,有很多事情你的代碼錯誤:

  1. $_SESSION[KODE]。你定義了一個名爲KODE的常量嗎?如果沒有,那麼你可能需要把它放在引號中,即$_SESSION['KODE']

  2. 涉及之前,插數組項目時,你需要將其包裝在大括號:

    $sql = "... WHERE `unik_id` = '{$_SESSION['KODE']}'"; 
    
  3. 然後是JavaScript ...你應該使用重定向:

    header('Location: /menang.php'); 
    die; 
    
  4. 爲什麼你要創建$data_update變量,如果你不打算使用它?

  5. mysql_*擴展名已棄用(它已被更新的更好的擴展名所取代)。

  6. 你有很多變量沒有在任何地方定義。該文件是否包含在其他文件中?

+0

感謝您的關注。對於$ _SESSION我已定義。其實我已經解釋了我的問題。它運行良好,如果我在其他部分評論我的重定向。它的真實性我不寫所有我的劇本在Qustion上,因爲我想也許它長。你需要看完整的一頁嗎? – Uchsun

0

有3個原因,你可能不被

1)您header("Location: ")語句後立即妥善重定向,你應該把die();否則PHP將繼續執行。例如:

header("Location: kalah.php"); 
die(); 

2)必須沒有任何輸出到屏幕上(例如,echo語句),否則,也不會重定向。你可以看看ob_start()

3)最後,你可能沒有到達代碼中的正確位置。伊格納西奧奧坎波上面有一些很好的建議。將一些調試代碼放入die('here')聲明中,以確保你最終在你認爲你應該在的地方。

最後,請確保您有在頂部的該php

if (!isset($_SESSION)){ 
    session_start(); 
} 
相關問題