【问题标题】:PHP - Stop empty form submission on submit buttonPHP - 在提交按钮上停止空表单提交
【发布时间】:2015-07-07 07:27:16
【问题描述】:

我有一个 html 页面 (edituserdetails.html),其中有一个包含 3 个文本框的表单:FirstName、LastName、Email 和一个提交按钮。单击提交按钮时,我正在验证这 3 个文本框(在函数“SaveEdit”内)。 以下是我的代码:

if ($_POST['SaveUserDetails']) {
        $Id = $args[2];
        if(empty($_POST['FirstName']))
        {
            $this->smarty->assign('FirstNameEmpty',"Please enter your firstname!");
            controller::display($this, 'tpl.edituserdetails.html');
        }
        if(empty($_POST['LastName']))
        {
            $this->smarty->assign('LastNameEmpty',"Please enter your lastname!");
            controller::display($this, 'tpl.edituserdetails.html');
        }
        if(empty($_POST['Email']))
        {
    $this->smarty->assign('EmailEmpty',"Email field should not be empty!");
   controller::display($this, 'tpl.edituserdetails.html');
        }`

现在,问题是同一个函数从数据库中加载文本框(这段代码也在SaveEdit中):

$x = $args[2];
    $x = mysql_real_escape_string($x);
    $result = db::sql("Select contact_fname,contact_lname,contact_email from billing_buyer where id = '$x'");
    $row = mysql_fetch_assoc($result);
    $this->smarty->assign('FirstName', $row['contact_fname']);
    $this->smarty->assign('LastName', $row['contact_lname']);
    $this->smarty->assign('Email', $row['contact_email']);

因此,当我单击“提交”按钮时,即使文本框为空,页面也会刷新并从数据库中填充文本框。结果,我的验证无法正常工作。请帮忙。 下面是我的 html(我使用 Smarty 变量 $FirstName、$LastName 和 $Email 来显示相应的数据。$FirstNameEmpty、$LastNameEmpty 等是包含验证错误消息的 smarty 变量。

<html>  
<div> 
    <form action="" method="post" id="subscriptions" onsubmit="">
<input type="hidden" value="form" name="action">

<div class="form">

<h2><span>Edit User Details</span></h2>
    <div>

<table id="im_list" class="primary_table" border="0" cellpadding="10px" cellspacing=0>

        <tr>
            <td>First Name</td>
            <td class="bar_style"> <input type="text" name="FirstName" value="{$FirstName}"></td>
            <td><font color="red">{$FirstNameEmpty}</font></td>
        </tr>
        <tr>
            <td>Last Name</td>
            <td class="bar_style"> <input type="text" name="LastName" value="{$LastName}"></td>
           <td><font color="red">{$LastNameEmpty}</font></td>
        </tr>
        <tr>
            <td>Contact email</td>
            <td class="bar_style"><input type="text" name="Email" value="{$Email}"></td>
            <td><font color="red">{$EmailEmpty}</font></td>
            <td><font color="red">{$WrongEmailFormat}</font></td>
        </tr>
        <tr>
            <td>
         <input id="SaveUserDetails" name="SaveUserDetails" type="submit" value="Save Preferences">
            </td>
        </tr>
</table>
    </div>
</div>
</form>
</div>

【问题讨论】:

  • 你能展示你的 HTML 吗?我不太明白你的问题。
  • @Kristiyan 我刚刚编辑了我的问题以包含我的 html。请看看..
  • 好吧,我认为在if ($_POST['SaveUserDetails']) { 之后转储$_POST 是个好主意。只需写print_r($_POST)
  • @Kristiyan 我只是将“姓氏”留空并提交。 print_r 将“姓氏”显示为空
  • 我已经用示例编辑了我的答案。

标签: php jquery html validation smarty


【解决方案1】:

如果我理解正确,您的填充有问题。仅当我成功提交表单时才尝试从数据库中进行选择。 顺便说一句,在选择之前做更新。

成功提交 = 所有if 子句均通过。

例子:

if(!empty($_POST['FirstName']) && !empty($_POST['LastName']) && !empty($_POST['Email']) ){

// update 


// And select
$x = $args[2];
    $x = mysql_real_escape_string($x);
    $result = db::sql("Select contact_fname,contact_lname,contact_email from billing_buyer where id = '$x'");
    $row = mysql_fetch_assoc($result);
    $this->smarty->assign('FirstName', $row['contact_fname']);
    $this->smarty->assign('LastName', $row['contact_lname']);
    $this->smarty->assign('Email', $row['contact_email']);
}

【讨论】:

  • 没有安全客户端解决方案。它只能在服务器端完成。
  • @Pleasure 我没有找到他提到的寻找客户端验证的任何地方
  • @Pleasure 基本上我正在寻找一个服务器端。使用 HTML5 可以轻松完成客户端验证
  • @RuchirSharma,它工作正常吗?你明白我的想法吗?
【解决方案2】:

检查我的以下方法。用 false 初始化一个标志,在每个失败的验证中使其为 true。

在您的选择查询之前,仅​​在没有验证错误的情况下添加条件。

<?php

  function yourFunctionName(){

    if ($_POST['SaveUserDetails']) {
            $Id = $args[2];
            $error = false;
            if(empty($_POST['FirstName']))
            {
                $this->smarty->assign('FirstNameEmpty',"Please enter your firstname!");
                controller::display($this, 'tpl.edituserdetails.html');
                $error = true;
            }
            if(empty($_POST['LastName']))
            {
                $this->smarty->assign('LastNameEmpty',"Please enter your lastname!");
                controller::display($this, 'tpl.edituserdetails.html');
                $error = true;
            }
            if(empty($_POST['Email']))
            {
        $this->smarty->assign('EmailEmpty',"Email field should not be empty!");
       controller::display($this, 'tpl.edituserdetails.html');
              $error = true;
           }
          if(!$error){
             $x = $args[2];
             $x = mysql_real_escape_string($x);
             $result = db::sql("Select contact_fname,contact_lname,contact_email from billing_buyer where id = '$x'");
             $row = mysql_fetch_assoc($result);
             $this->smarty->assign('FirstName', $row['contact_fname']);
             $this->smarty->assign('LastName', $row['contact_lname']);
             $this->smarty->assign('Email', $row['contact_email']);
             }
        }
}

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2023-04-10
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多