2011-04-16 77 views
0

我有一個網頁的表單,像這樣:使用define()對網站的名稱

 <form method="POST" action="scripts/save-settings2.php"> 
      <div id="posts"> 
       <div class="post"> 
        <div> 
         <label for="siteName">Site Name</label> 
         <div class="input-wrap"> 
          <input value="<?php echo constant('siteName'); ?>" type="text" name="siteName" /> 
         </div> 
        </div> 
        <input type="submit" value="Save" /> 
        <a href="posts.php" class="cancel">Cancel</a> 
       </div> <!--Post--> 
      </div> <!--Posts-->  
     </form> 

的輸入變量的值發送到該腳本:

include '../includes/database-login.php'; 
if (isset($_POST['siteName'])) { 
$siteName = mysql_real_escape_string($_POST['siteName']); 
define("siteName", "$siteName"); 
header('Location: ../settings.php'); 
} else { 
header('Location: ../newpost-error.php'); 
} 

什麼我想do是將用戶填入siteName輸入字段的內容,並將其定義爲常量「siteName」,以便我可以在站點的其他地方回顯常量。由於某種原因,這是行不通的。我在這裏犯了一些明顯的錯誤嗎?

回答

0

我不相信如果更改頁面不斷將保持。

+0

我覺得換頁是沒錯的問題 – codedude 2011-04-16 20:32:15

+0

,只是測試它 – Calum 2011-04-16 20:33:43

2

定義只持續腳本執行的生命,他們不會通過重定向

看看會話持續,並且在會話存儲站點名稱

// store in session 
$_SESSION['siteName'] = $siteName; 

// retrieve from session 
$siteName = $_SESSION['siteName']'; 
+0

鑑於主題會話存儲似乎並不十分合適。 – max 2015-11-28 12:17:13

0

更改此:

define("siteName", "$siteName"); 

要這樣:

define("siteName", $siteName); 

這將是更好地設置站點名稱上的情況下,如果你想町不變的內容做到這一點:在編程

echo siteName; 
0

常量應該只有真正用於其執行之前已知的東西,甚至開始,並且永遠不會改變。像這個典型的例子:

// ** MySQL settings - You can get this info from your web host ** // 
/** The name of the database for WordPress */ 
define('DB_NAME', 'database_name_here'); 
/** MySQL database username */ 
define('DB_USER', 'username_here'); 
/** MySQL database password */ 
define('DB_PASSWORD', 'password_here'); 

不要使用常量用戶輸入。常量應該總是使用THE_ALL_CAPS_NAMING_SCHEME

如果你真的只是想用一個變量在你的應用程序,你可以使用一個super global

而且常量就像變量只存儲在內存中,而你的程序執行 - 只要執行完畢的值消失。

如果你想使用多個請求的值,你要麼將其存儲在數據庫中,緩存機制像Memcached的或Redis的或會話存儲。請注意,會話依賴於瀏覽器中的Cookie,並且是vulnerable to many kinds of hacks

如果你正在建設一個內容管理系統應該比你在數據庫中保存這些數據 - 如建議通過一些其他的答案不在會議。由於會話是一種個人存儲,對於不同的用戶來說不會相同。

此外不要使用mysql_real_escape_stringdoes not properly prevent SQL injection attacks當用於消毒數據庫輸入並且不會阻止用戶向頁面中注入惡意JavaScript的XSS攻擊。

相關問題