2015-12-20 250 views
2

我有一个简单的窗体来更新我的数据库中的一行,并且还有一个语言链接/按钮。 SUBMIT按钮工作并将值写入我的数据库。然而,当我点击链接按钮两次(返回相同的页面),我看到文本框中的旧值。我刷新页面,然后看到更新的值。它在Chrome上工作时没有任何问题,但Safari以某种方式缓存数据库值并不刷新。Safari不更新SQL查询

这里是我的代码:

// Get language 
if (isset($_GET['language'])) 
{ 
    $get_lang = $_GET['language']; 

    if ($get_lang == 'fr') { 
     $lang_code = 'fr'; 
    } 
    else if ($get_lang == 'en') { 
     $lang_code = 'en'; 
    } 
    else { 
     $lang_code = 'fr'; 
    } 
} 
else 
{ 
    $php_self = htmlspecialchars($_SERVER["PHP_SELF"]); 
    header("refresh:0; url=$php_self?language=en"); 
    $lang_code = 'en'; 
} 

include('../inc/config.php'); 
include('inc/head.php'); 

global $db; 


// Update page 
if (isset($_POST['submit'])) 
{ 

    $lang_code  = $_GET['language']; 
    $page_title  = $_POST['page_title']; 

    if ($lang_code == 'fr') 
    { 
    $updatePage = $db->execute("UPDATE pages SET page_title_fr=? WHERE page_id=1", array($page_title)); 

    } 
    else if ($lang_code == 'en') 
    { 
    $updatePage = $db->execute("UPDATE pages SET page_title_en=? WHERE page_id=1", array($page_title); 
    } 

} 


// Get page content 
$page_content = $db->get_row("SELECT * FROM pages WHERE page_id = 1"); 

if ($lang_code == 'fr') 
{ 
    $page_title  = $page_content->page_title_fr; 
} 
else 
{ 
    $page_title  = $page_content->page_title_en; 
} 

和我的形式:

// Button for changing the language 
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?language=<?php if ($lang_code == 'fr') { echo 'en'; } else if ($lang_code == 'en') { echo 'fr'; } ?>"><?php if ($lang_code == 'en') { echo 'FRENCH'; } else { echo 'ENGLISH'; } ?></a> 


<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?language=<?php echo $lang_code; ?>"> 

<input name="page_title" type="text" value="<?php echo $page_title; ?>"> 

<button name="submit" type="submit">SAVE</button> 

</form> 

编辑:我尝试禁用缓存,但它并没有帮助。

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 

编辑2:从Safari的禁用缓存制定菜单解决了这个问题

+0

难道没有什么意义,首先看到固定的问题你如何告诉浏览器不要缓存页面? – Lexib0y

+0

你认为它应该缓存“$ page_title”吗?我从我的数据库中获取它,只有Safari缓存它,Chrome不会 – Dejavu

+0

检查此以减少缓存:http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-跨所有浏览器的缓存 – zedfoxus

回答

0

我通过添加这些行到我的htaccess文件

<FilesMatch "\.(html|htm|php)$"> 
FileETag None 
<ifModule mod_headers.c> 
Header unset ETag 
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
</ifModule> 
</FilesMatch>