簡體   English   中英

PHP表單驗證。 不在同一頁面上

[英]PHP Form validation. Not on the same page

我正在創建一個簡單的聯系表單,如果用戶在瀏覽器中禁用了Javascript,該表單將通過jQuery進行客戶端驗證以及PHP進行服務器端驗證。

盡管有很多可以在單個頁面上處理和顯示的源代碼示例,但我還沒有看到將它們分成以下形式的很多示例:例如form.phpvalidateator.php來完成此任務。

我有這個form.php文件,該文件主要是用html編寫的,用於使用一些php代碼標記表單,這些代碼將接收/顯示從validator.php檢索到的錯誤或成功消息。 現在,我遇到的問題是將這兩個鏈接在一起,以便他們彼此交談而不會抱怨。

“ form”屬性具有分配給validator.php的操作,在validator.php中,我具有以下功能之一:

if (isset($error)) {
    $msg = "<p>Please enter valid information.</p>";
    require ("form.php"); 
}

並且,在form.php上,我聲明了require ("validator.php"); 並使用來自validateator.php的 $ msg變量顯示消息,但瀏覽器抱怨$ msg是未定義的,即使驗證已運行且已定義了字符串。

從外觀上看,我認為這兩個PHP文件未正確鏈接。 有人對解決方案有想法嗎?

require實際上與將“ validator.php”復制到“ form.php”文件中相同,因此這應該不是問題。 變量在包含的文件中與其“父對象”共享相同的作用域。 但是,在“ form.php”中包含“ validator.php”,然后從其代碼中調用require("form.php")並不是一個好主意-這將是一個infine循環!

PS而且,如果使用的是require ,則不能將其稱為“不在同一頁面上”。 這是同一頁面,它是用戶的相同URL。 這是兩個不同的文件,這是正確的。

您不能使用require validator.php ,然后將頁面定向到validator.php 一旦需要頁面,該頁面將包含在當前頁面中,並且可以用作該頁面的一部分。 可以將其視為粘貼代碼,將代碼從validator.php粘貼到使用了require('validator.php') 因此,只需在form.php設置action=""並相應地對其進行驗證。

同樣,最好使用require_once('validator.php')

是的,兩個文件之間的鏈接存在問題。

收到錯誤時,您將運行:-

if (isset($error)) {
    $msg = "<p>Please enter valid information.</p>";
    require ("form.php"); 
}

該代碼駐留在validator.php中,當您在其中加載form.php時,它將再次在其中加載validator.php,這將再次重置$ msg變量,因為它沒有任何內容。

一種解決方案可以是:

使用form.php獲取用戶輸入。 將輸出發布到validateator.php,它將驗證輸入並重定向到具有$ msg集的form.php頁面,該表單將由form.php顯示為對用戶的錯誤msg。

使用視圖中的會話變量(form.php)解決了問題,如下所示

<?php if (isset($_SESSION['msg'])) echo $_SESSION['msg']; session_unset(); ?>

其中msg變量用於錯誤/成功,該錯誤/成功將在表單內打印,我必須聲明session_start(); 在最頂部的view(form.php)和controller(validator.php)上。

在controller(validator.php)內部的驗證功能之一上,我執行了以下操作

$msg = "<p>Email Successfully Sent!</p>";
$_SESSION['msg'] = $msg;
header('Location: index.php');
exit;

就我的目的而言,它不需要includerequirerequire_once來鏈接它們。

PS form.php替換了我實際文件結構中的index.php。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM