2016-11-15 26 views
1

我試圖創建一組if語句來檢查某些條件並返回一個值。我遇到的問題是我一直在設計這個並在Firefox中運行它,但我已經在Chrome中嘗試過它,並且我得到了與這些語句不同的結果。Chrome評估php如果語句不同於Firefox

什麼,我試圖用if語句是做,一個用戶填寫表單的頁面上,然後發送到另一個頁面,它將:如果爲空值,並

  1. 檢查的內容,產生(如果有人直接訪問該頁面)
  2. 如果值不爲空,請檢查頁面是否已刷新並生成消息「這已經輸入到數據庫中「 - (所以不會重新輸入)
  3. 如果值不爲空(如在1中)並且頁面未刷新(如在2中),則stor將數據輸入到數據庫併產生一條消息「成功」

當我填寫表單並將其帶到此頁面時,它會運行代碼並顯示「成功」,因爲它應該如此。但是當我在Chrome中以完全相同的方式運行它時,我收到消息「這已經輸入到數據庫中」 - 就像頁面已被刷新一樣。

我使用(減去所有的佈局代碼)的代碼是:

<?php session_start(); 

$seen = 0; 
$pageWasRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0'; 

$message = $_SESSION['message']; 
$code = $_SESSION['code']; 

require 'inc/database.php'; 

if (!(isset($message) && ($message!==null))) { 
    echo 'You should not be here!'; 
} else { 

    $message = strip_tags(trim($_SESSION['message'])); 

    if ($pageWasRefreshed) { 

     echo 'This has already been entered into the database'; 

    } else { 

     $stmt = $conn->prepare('INSERT INTO data (code, message) VALUES (:code, :pmessage)'); 
     $stmt->execute(array(
      'pcode' => $code, 
      'pmessage' => $message, 
     )); 

    $last_id = $conn->lastInsertId(); 

    echo $last_id . 'Success!'; 

    } 
} 

我(顯然)學習,因爲我去和使用嵌套的if語句是讓我有點糊塗了,所以可能是什麼很簡單,但因爲它在Firefox中運行,而不是在Chrome中運行,所以我不知道如何通過我的方式來找出錯誤的位置。

+8

鉻和firefox不能以不同的方式評估php-code,因爲php完全執行**服務器端**。鉻和Firefox *從來沒有看到*一行的PHP,並不知道如何處理它,除了顯示爲文本。 –

+1

據我所知,php不能在瀏覽器上運行,它運行在爲瀏覽器提供html頁面的服務器上。所以,這意味着,在我看來,它是不同的服務器,而不是瀏覽器 – Andreas

+0

顯示您正在使用的HTML代碼。正如弗朗茲所說的瀏覽器沒有看到任何PHP,你的HTML中的東西顯示不同。 – Blinkydamo

回答

3

你的問題是在這裏:

isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0'; 

出於某種原因,Chrome傳送此HTTP_CACHE_CONTROL頭爲你的腳本,你真的不應該,如果加入或沒有數據的情況下,靠這個。這是錯誤的方式。要檢查是否添加數據,您可以

只是檢查首先在數據庫中是否存在他們,

,或者你可以添加一些關鍵會議將表格後,檢查此鍵會話或

已經存在

或只是在將數據正確添加到數據庫後重定向頁面。

有很多方法可以做到,只需使用谷歌。使用'HTTP_CACHE_CONTROL'只是一個大錯誤

+1

相關:http://stackoverflow.com/a/24767383/1229023 – raina77ow

+0

謝謝您的建議。通過你給我的和@ raina77ow的相關鏈接,我可以看到我需要改變檢查頁面刷新的方式。該鏈接非常有用,我將使用一些代碼。 – Fox