2017-02-05 351 views
0

如何在php中完成表單驗證之後設置彈出確認對話框?如果用戶點擊提交按鈕,那麼它應該驗證用戶輸入,最後它會詢問確認信息,如「你想保存嗎?」。用OK和取消按鈕,那麼只有它應該將數據保存到數據庫中。 請參考下面的代碼。如何在保存之前和單頁中的表單驗證之後設置PHP確認對話框

<?php 
    error_reporting(~E_NOTICE); 
    $name_err=''; 
    $name=''; 
    $type_err=''; 
    $type=''; 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (isset($_POST['submit'])) { 

       $e = true; 

     if (empty($_POST['name'])) { 
      $name_err = "Please enter the Product Name"; 
      $e = false; 
     } else { 
      $name = $_POST['name']; 
      // check if name only contains letters and whitespace 

     } 
    if (empty($_POST['type'])||$_POST['type']=="select") { 
      $type_err = "Please select the Product Type"; 
      $e = false; 
     } else { 
      $type = $_POST['type']; 

        } 
    $con = mysqli_connect("localhost", "root", "", "csr"); 
    if (!$con) { 
     die('Could not connect: ' . mysql_error()); 
    } 


} 
//final check whether it is true the input will process 

    if($e) 
    { 

     mysqli_select_db($con, "csr"); 

     mysqli_query($con, "insert into products(employee_id, name, type, brand, model, url, conditions, about, listedon, image_path, reserved_price, Purchased_price, buy_now_price, sale_end_date) 
            values('$eid','$name','$type','$brand','$model','None','$condition','$about','$listedon','$imgName','$reserved_price','$Purchased_price','$buy_now_price','$sale_end_date')") or die('Could not connect: ' . mysql_error()); 

     header('Location:/sellproduct/index/'); 
     mysqli_close($con); 

    } 
} 
?> 
<form action=" " method="post" class="stdform stdform2" autocomplete="off" enctype="multipart/form-data"> 

        <p> 
          <input type="hidden" name="employee_id" value="" id="employee_id" /> 
        </p> 
       <p> 
        <label for="name" class="required">Product Name</label> 
        <span class="field"> 
         <input type="text" name="name" id="name" value="<?php echo $name;?>" /><br><span class="error"><?php echo $name_err;?></span></span> 

       </p> 
       <p> 
        <label for="type" class="required">Product Type</label> 
        <span class="field"> 
        <select name="type" id="type" minlength="2" maxlength="60"> 
          <option value="select" label="Select" <?php echo ($type == "select" || empty($type) ? "selected='selected'" : ""); ?> selected disabled >Select</option> 
          <option value="Electronics" label="Electronics" <?php echo ($type == "Electronics" ? "selected='selected'" : ""); ?>>Electronics</option> 
          <option value="Appliances" label="Appliances" <?php echo ($type == "Appliances" ? "selected='selected'" : ""); ?>>Appliances</option> 
<form action=" " method="post" class="stdform stdform2" autocomplete="off" enctype="multipart/form-data"> 

        <p> 
          <input type="hidden" name="employee_id" value="" id="employee_id" /> 
        </p> 
       <p> 
        <label for="name" class="required">Product Name</label> 
        <span class="field"> 
         <input type="text" name="name" id="name" value="<?php echo $name;?>" /><br><span class="error"><?php echo $name_err;?></span></span> 

       </p> 
       <p> 
        <label for="type" class="required">Product Type</label> 
        <span class="field"> 
        <select name="type" id="type" minlength="2" maxlength="60"> 
          <option value="select" label="Select" <?php echo ($type == "select" || empty($type) ? "selected='selected'" : ""); ?> selected disabled >Select</option> 
          <option value="Electronics" label="Electronics" <?php echo ($type == "Electronics" ? "selected='selected'" : ""); ?>>Electronics</option> 
          <option value="Appliances" label="Appliances" <?php echo ($type == "Appliances" ? "selected='selected'" : ""); ?>>Appliances</option> 
<form action=" " method="post" class="stdform stdform2" autocomplete="off" enctype="multipart/form-data"> 

        <p> 
          <input type="hidden" name="employee_id" value="" id="employee_id" /> 
        </p> 
       <p> 
        <label for="name" class="required">Product Name</label> 
        <span class="field"> 
         <input type="text" name="name" id="name" value="<?php echo $name;?>" /><br><span class="error"><?php echo $name_err;?></span></span> 

       </p> 
       <p> 
        <label for="type" class="required">Product Type</label> 
        <span class="field"> 
        <select name="type" id="type" minlength="2" maxlength="60"> 
          <option value="select" label="Select" <?php echo ($type == "select" || empty($type) ? "selected='selected'" : ""); ?> selected disabled >Select</option> 
          <option value="Electronics" label="Electronics" <?php echo ($type == "Electronics" ? "selected='selected'" : ""); ?>>Electronics</option> 
          <option value="Appliances" label="Appliances" <?php echo ($type == "Appliances" ? "selected='selected'" : ""); ?>>Appliances</option> 
</select><br><span class="error"><?php echo $type_err;?></span></span>    </p> 

<p class="stdformbutton"> 
        <input type="submit" class="bluishBtn button_small" name="submit" value="SAVE" id="submit"> 

        <button name="cancel" id="cancel" type="button" class="greyishBtn button_small">Cancel</button>    </p> 

</form> 

請幫幫我。

回答

1

您無法通過PHP直接生成一個對話框,在最終的if語句,你應該回應一個基本的HTML與重定向到另一個PHP頁面把你的輸入參數,將其插入一個javascript:

echo ' 

<html> 
<script type="text/javascript"> 

function input_confirm(){ 

    var r = confirm("Confirm this input : '.$_POST['name'].'-'.$_POST['type'].'"); 
    if(r){ 
     window.location.href = "insert.php?type='.$_POST['type'].'&name='.$_POST['name'].'"; 
    } 
} 


</script> 

<body onload="input_confirm()"> 
</body> 

</html> 

'; 
+0

感謝您的及時回覆,它不詢問任何確認框,也沒有輸入信息。 –

+0

我剛糾正了代碼。由於該函數也被稱爲確認,因此出現了錯誤。我只是嘗試過,現在它應該可以工作:-) – saperlipopette

+0

非常感謝你.....祝你有美好的一天! –

0

最優化的解決方案是在客戶端和服務器端進行兩種驗證。無需使用可在客戶端計算機上預先驗證的無效數據來打擾服務器。

對於客戶端驗證,您需要編寫一些JavaScript,它將在用戶單擊後驗證表單提交按鈕。當然提交按鈕必須是標準類型的按鈕,你不希望它實際提交,但只是調用JavaScript驗證功能。如果你願意,你可以使用validate.js。

因此,驗證功能在完成它的工作後,會彈出一個問題,詢問是否保存數據或者不同或彈出信息,表單需要更正。將這兩個表單放在不可見的DIV塊中,並在需要時顯示它們。 現在在彈出的問題確定按鈕調用另一個JavaScript函數,現在發送一個ajax調用服務器發送所有的表單數據。

如果您的驗證依賴於某些數據庫狀態或放置在服務器上的任何內容,則可以在驗證函數中添加一個額外的ajax調用以請求服務器獲取更多信息,甚至要求它立即驗證某些字段。例如,如果您有註冊表單並希望立即向用戶顯示暱稱已在使用中的信息,那麼即使按Sumbit之前,也可以更改它。

然後,在服務器接收到此數據後,您需要需要來進行另一個服務器端驗證,以檢查數據完整性和可能的​​攻擊。

希望這會有所幫助。順便說一句,如果你需要在一個頁面中做這樣的動作,我真的推薦實現jQuery和validate.js。

相關問題