2012-07-28 105 views
5

我是PHP新手。PHP:給出警報彈出框然後重定向頁面

當有人上傳太大的文件大小時,我想向他們展示警告彈出窗口並將其重定向到上一頁(反之亦然)。

if(file size is too big){  
    ob_start(); 
    header("location:index.php");  
    echo "<script type='text/javascript'>alert('Your File Size is too big!');</script>"; 
    ob_end_flush(); 
    exit;  
} 

上面的代碼只是將我重定向到index.php並且不顯示任何警告彈出窗口。

回答

9

這樣做

header("Location: index.php?Message=" . urlencode($Message)); 

然後在index.php文件...

if (isset($_GET['Message'])) { 
    print $_GET['Message']; 
} 

換句話說,index.php將經常檢查,如果它傳遞的網址的消息。如果有,顯示它。然後,你只需要把這個消息中的重定向

如果你真的想用一個模式彈出,生成JS ...

if (isset($_GET['Message'])) { 
    print '<script type="text/javascript">alert("' . $_GET['Message'] . '");</script>'; 
} 

請注意,如果你,除非你在郵件中使用引號,否則會破壞逃避它們

+0

這是完美的謝謝你。 我想知道是否需要擔心代碼注入,因爲 用戶可以在消息中輸入任何他們想要的內容。 – 2012-07-28 19:37:48

+0

是的 - 請參閱[本頁](https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet)以獲取良好的指導 – Basic 2012-07-28 20:08:43

+0

當您使用您提供的代碼時,您能給我一個注射的例子嗎? – 2012-07-28 20:28:59

1

問題是header("location:index.php");自動將響應代碼設置爲302。瀏覽器會立即重定向,而不會查看頁面的內容。

您需要在發送警報後在javascript中重定向本身,或者讓您重定向的頁面執行警報。

+0

謝謝,我以爲ob_start(); ob_end_flush()函數;打算通過閱讀其他帖子來解決問題,但我錯了。 – 2012-07-28 19:39:56

-1

的代碼是這樣:

if($_FILES['file']['size'] > 200000) //any file size, 200 kb in this case 
{ 
echo "<script type='javascript'>alert('File size larger than 200 KB')</script>"; 
} 
header("Location: index.php"); 

瀏覽器總會被重定向到index.php頁,無論該文件上傳成功與否。只是如果文件的大小更大,彈出窗口就會出現。

+1

我不認爲這會奏效。標題必須在任何主體內容和302重定向之前輸出,導致瀏覽器忽略主體內容。 – 2012-07-29 00:31:59

1
<script type="text/javascript"> 
alert("YOUR MESSAGE HERE"); 
location="REDIRECTION_PAGE.php"; 
</script>