2009-12-18 74 views
0

我有一個PHP文件,其中包含一個HTML表單,然後是PHP邏輯,然後是一個HTML頁腳...按此順序。PHP和HTML集成

我試圖從形式值到一些PHP驗證邏輯頁面鈕(但前軀)使用<?php VALIDATION LOGIC HERE ?>.

的問題是,當驗證發現錯誤,PHP的邏輯將死(),因此,我的HTML頁腳將不會被執行。

有沒有辦法讓我的HTML頁腳執行,儘管我的PHP死();? ...還是有更好的整體方式來整合我的HTML和PHP?謝謝!任何幫助將非常感激。


編輯: 我居然有模()幾乎無處不在我的代碼在那裏我將連接到數據庫。如果用戶證書是正確的,他們連接..如果證書是錯誤的,那麼它將死()..

這是好的做法和使用die()?看來我的問題的解決方案是使用return()INSTEAD OF die()...爲了繼續處理HTML頁腳。

此外,我有情況,如mysql_connect()或die()。在處理HTML之前執行die()時,如何繼續處理剩餘的HTML頁面? ..我不認爲mysql_connect()或返回;良好的做法是對的嗎?

非常感謝!反饋非常有幫助!

+0

請提供代碼以及您的問題 – Gordon 2009-12-18 08:53:23

+0

爲什麼您的驗證會退出腳本?你可以讓驗證輸出一個HTML錯誤消息,並讓它工作。這樣,頁腳就可以完好無損了。 – Boldewyn 2009-12-18 09:55:10

回答

2

至於其他國家,你應該有多個文件; header.php,index.php,footer.php,formvalidator.php。 在你的index.php文件中,你應該包含header.php和footer.php。 在表單標籤中,操作設置爲加載formvalidator。PHP

在表單驗證腳本,你可以有這樣的事情:

// All form fields are identified by '[id]_[name]', where 'id' is the 
    // identifier of the form type. 
    // The field identifier we want to return is just the name and not the id. 
    public function getFormData() { 
    $formData = array(); 
    foreach ($_POST as $key => $value) 
    { 
     // Remove [id]_ 
     $name = preg_replace('!.*_!', '', $key); 

     if (is_array($value)) { 
     $formData[$name] = implode(',', $value); 
     } else { 
     $formData[$name] = $value; 
     } 
    } 
    return $formData; 
    } 

現在,你可以通過數組循環和驗證每個字段。 如果您發現錯誤,請回顯錯誤消息,否則處理表單。

更新
回覆您的更新。

你應該「從不」使用die()。相反,請退出您所在的功能並返回錯誤消息。如果你只是死(),你永遠不會知道哪裏出了問題。

除非您單擊提交按鈕,否則無法對錶單進行服務器驗證。 你可以把我給你在同一個PHP文件形式的代碼,當你提交,您只需重新加載相同頁面(只需設置action="<?= $_SERVER['PHP_SELF'] ?>"

如果您想驗證領域之前提交,你一定要這使用JavaScript,例如jQuery.validate

嗯......好像你需要一些關於如何將PHP與HTML混合的知識。 看看這個beginners guide關於如何在PHP中使用表單。

2

我會使用外部文件進行表單處理和驗證,然後重定向回錯誤/成功時的表單頁面,顯示錯誤/成功消息。

+0

簡明扼要 – Gordon 2009-12-18 08:58:39

0

有很多更好的方法來做你正在做的事情。但要回答你的第一個問題,你可以創建一個名爲footer的函數,它返回一個需要在頁腳中顯示的html字符串並調用die(footer());但是......你爲什麼使用死亡?你不能只計算錯誤並將它們顯示在結果的某個地方嗎?你不應該這樣殺死腳本。

並針對第二個問題。你可以像BenTheDesigner所說的那樣使用一個帶有表單動作的html頁面,它指向一個php腳本,該腳本可以驗證並返回表單,如果出現錯誤或者返回其他地方,如果沒有。但是也應該刪除die()函數並調用其他方法來重定向您。你可以使用像smarty這樣的模板系統將你的邏輯從你的html表示中分離出來。你可以把它寫在一個單獨的文件中,但是試着把你的整個邏輯寫在文件的頂部,把所有的html都寫在底部。並使用<?= $ var? >來顯示php的東西,或不同的HTML結果的簡單條件。但不要使用die()。它讓我猜想的事情變得複雜。

1

我只做一個header.php和一個footer.php文件。如果出現錯誤,則返回而不是死亡。

這樣在你的頁面的頂部,你可以只是把:

<?php include('header.php');?> 

///put in whatever html there may be 


<?php 
/// put your form and processing info here 
///just return if you need to prevent further processing 
?> 

///put in whatever html there may be 
<?php include('footer.php');?> 
0

使用die()不是一種好的做法,因爲它不會向訪問您的站點的用戶顯示友好的消息。你應該絕對確定你想使用死亡。例如,當您懷疑有黑客攻擊企圖時,您可以在程序中使用它。請嘗試使用if else結構來顯示或隱藏內容。以下是您可能想要實現的原型:

// if there is a validation error, show it, otherwise not 
    if ($error == true) 
    { 
    // show footer 
    } 

    <!-- Your footer goes normally here -->