2012-07-15 54 views
1

我正在驗證由兩頁組成的用戶註冊表單的輸入。如果$_POST輸入通過驗證,則$valid變量設置爲true如何驗證兩步表單?

如何使用戶只有在第一個註冊表單被成功驗證(即$valid等於true)的情況下才能進入第二個註冊表單?

+0

你爲什麼不使用JavaScript客戶現場驗證,將是註冊過程的幫助很大 – swapnilsarwe 2012-07-15 20:14:20

+0

漂亮很難說什麼沒有看到代碼,除此之外,你應該向用戶發送如果提交的數據是有效的,立即到第二步,但你已經知道了。 – JJJ 2012-07-15 20:14:52

回答

1

您可以使用JavaScript,而不是驗證表單,然後在表單中添加onsubmit="validateForm()"和你validateForm()函數返回true或false。如果返回false,表單將不會提交。

如果要使用PHP進行驗證,則必須先提交表單,如果無效,則重定向回原始表單頁面,但必須重新設置提交的值。我要做的是首先實例化頁面頂部表單域的所有變量,並設置空值。然後有一個部分檢查一個像valid = false這樣的標誌,如果是,用更新後的值更新這些變量。

例如:

<?php 
$first_name = ''; 
$last_name = ''; 
$email = ''; 
$phone = ''; 
$valid = true; 

// Check if valid: 
if (isset($_POST['first_name'])) { 
    // Validate string and if bad valid = false. 
    $valid = false; 

    // Set value from $_POST; 
    $first_name = $_POST['first_name']; 
} 
if(isset($_POST['email'])) { 
    // Perform validation. 

    $valid = true; // else false 

    $email = $_POST['email']; 
} 

// Check valid flag. 
if (!valid) { 
    // Display some error to the user. 
    $message = 'There was something wrong.'; 
} else { 
    // Tedirect to the destination page. 
    // header(..); 
} 

然後,在頁面的頂部設置與變量的字段的值:

<form name="myForm" action="" method="post"> 
    <input type="text" name="first_name" value="<?=echo $first_name?>"> 
    <input type="text" name="last_name" value="<?=echo $last_name?>"> 
    <input type="text" name="email" value="<?=echo $email?>"> 
    <input type="text" name="phone" value="<?=$phone?>"> 
</form> 

當心的是,上述示例僅是爲了邏輯的說明的目的。它暴露了XSS和其他類型的漏洞。

1

一旦收到$_POST並將驗證重定向用戶使用header傳遞到第二個註冊頁面。

而在這之前做更新的$有效的true要麼

  1. 值在$_SESSION和訪問它的第二個註冊頁面上
  2. ,或者如果你願意,你可以把它作爲一個GET參數其附加header('Location: http://example.com/2ndregistrationstep.php?valid=true')
+0

您不應將表單的狀態作爲GET參數傳遞,因爲用戶可以更改它。如果您依賴會話狀態,請確保您正在處理過期會話的情況。 – Gajus 2014-04-10 06:25:21

0

我假設您直接在腳本中打印註冊表單。爲什麼不加簡單的邏輯:

<?php 

if (isset($_POST)) { 
    // .. validate, and then 
    $_SESSION['valid'] = TRUE; // or FALSE 
} 

if (empty($_SESSION['valid'])) { 
    // .. print first step 
} else { 
    // .. print second step 
}