2013-08-19 59 views
1

我在網絡中有一個表單(使用html構建)。假設我有一些可以更改的表單值,所以我將它們存儲在數據庫中。我想要做的是,每次用戶轉到表單所在的頁面時,都必須讀取數據庫中的數據,並且必須填寫該表單(例如,我有一個e郵件,所以我想用我在數據庫中的電子郵件填寫它)。使用數據庫中的數據預設表單的值

我一直在尋找一種方法來做到這一點,但我還沒有找到任何我真正「喜歡」的東西。我能做到這一點的唯一方法就是通過對JavaScript執行AJAX請求,將其連接到數據庫並獲取數據。一旦我得到它,我通過Javascript修改整個表單,但我不確定它是否足夠安全。

任何想法如何以不同的方式做到這一點或如何安全地做到這一點?

非常感謝。

+4

在任何'.php'頁面,您可以插入將在服務器上運行的代碼。因此,執行'」/>'會從DB中插入電子郵件地址作爲html字段的值。 –

+2

爲什麼你需要AJAX來做到這一點?只需將PHP變量直接放入您的PHP代碼中即可。 –

+0

我在考慮Ajax,所以我可以對JavaScript進行所有更改,這比PHP更容易。問題是我並不想在同一個文件中混合使用PHP,HTML和JavaScript。例如,對於PHP,我只想包括o需要一個PHP文件,但不能像Jeff Shaver給出的例子那樣混合代碼。 – user2417250

回答

0

我不完全相信我回答正確的問題,但通常以填寫一份表格,所有你需要做的就是這樣的事情:

<form> 
    <input name="username" value="<?php echo isset($dataRow->UserName) ? htmlentities($dataRow->UserName) : ""; ?>"> 
</form> 

我離開了有些東西並不是必不可少的,但如果這是您第一次使用HTML表單,您可能還需要閱讀這些內容。

當然,你首先需要在該行之前從數據庫獲取數據的:

$resultSet = mysqli_query($connection, "SELECT * FROM Table WHERE Id = " . ((int)$id)); 
$dataRow = mysqli_fetch_object($query); 

還是那句話:我離開了一些事情,假設你可以找到它基於這個例子做的正確方法。當然,程序風格mysqli_ *函數應該可以替換爲面向對象的對象。

爲此,使用AJAX似乎毫無意義:無論如何您都在請求表單,您也可以預先填寫表單。

至於安全性:我不明白這是一個問題。只要你轉義你的HTML(上面我的代碼中的htmlentities),你應該沒問題。

+0

問題是我想在單獨的文件中使用HTML,JavaScript和PHP。我認爲混合所有語言並不是一個好主意。 – user2417250

+0

當涉及到你的模板時,總會有一定程度的整合。你必須有一種從PHP中獲取價值的方法。無論您使用Twig,Smarty還是其他模板引擎,或者您只是使用PHP都無關緊要,某些編碼級別將始終存在於您的模板中。如果它僅限於簡單的循環,簡單的條件和迴應單個值(如這裏),這不是一件壞事。 –

3

我的解決方案允許連接任意HTML輸入元素和數據庫字段。這個代碼可以放在一個可重用的函數中,在任何你需要的情況下。

將數據庫字段命名爲與HTML表單元素的名稱屬性相同。然後,你就可以做一些類似如下:

<!doctype html> 
<form> 
    <input name="email" /> 
    <input name="age" /> 
    <input name="website" /> 
</form> 

在PHP中,讀取HTML文件的內容到DOMDocument構造:所有輸入的

$dom = new DomDocument(file_get_contents("MyPage.html")); 

然後你就可以得到的DOMNodeList元素,簡單地:

$xpath = new DomXPath($dom); 
$nodeList = $xpath->query("//form/input"); 

讓我們假設你的數據庫中的數據是在關聯數組代表呼籲$data

$data = $mysql->query("yourQuery"); 
foreach($nodeList as $node) { 
    $key = $node->getAttribute("name"); 
    if(array_key_exists($key, $data)) { 
     $node->setAttribute("value", $data[$key]); 
    } 
} 

然後,您可以像平常一樣渲染頁面,方法是將DOM輸出到瀏覽器。

BONUS:保存表單數據到數據庫中,因爲HTML輸入字段的名稱相匹配的數據庫字段名,你可以通過$ _POST數組你的DAL。

0

我會在這裏使用JQuery(jquery.com)和JEasyUI(www.jeasyui.com)解決方案,因爲我已經安裝了這些框架...(聽起來你已經安裝了JQuery,因爲你使用AJAX )。 JEasyUI使得這真的很容易...

  1. 在HTML中,創建表單元素:
     
    <!doctype html> 
    <form> 
        <input name="email" /> 
        <input name="age" /> 
        <input name="website" /> 
    </form> 
    
  2. 在JavaScript文件,以啓動:

     
    
    $(document).ready(function(){ 
    
    }); 
     
    or 
    
    $(function($){ 
    
    }); 
     
    
  3. 在你的主要功能,選擇使用JQuery並創建一個JEasyUI表單組件

     
    $('form').form(); 
    
  4. 然後,填寫表格,包括您的數據(必須是一個對象):

     
    $('form').form('load',{ 
        email:'my[email protected]', 
        age:5, 
        website:'http://stackoverflow.com' 
    }); 
    
    or 
    
    $.ajax({ 
        url: "getData.php?", 
        type: "GET", 
        dataType: "json", 
        success: function(json_data) { 
         $('form').form('load', json_data); 
        } 
    }); 
    
  5. 最後你的JS應該是這樣的:

     
    
    $(document).ready(function(){ 
        $('form').form('load',{ 
         email:'[email protected]', 
         age:5, 
         website:'http://stackoverflow.com' 
        }); 
    }); 
     
    or 
    
    $(function($){ 
        $.ajax({ 
         url: "getData.php?", 
         type: "GET", 
         dataType: "json", 
         success: function(json_data) { 
          $('form').form('load', json_data); 
         } 
        }); 
    }); 
     
    
相關問題