javascript - 初学者在 PHP 表单验证方面遇到困难

标签 javascript php jquery forms validation

在过去的几周里,我一直在学习 PHP,并且不可否认,我在阅读方面有点急于尝试从头开始创建一个表单并在实践中计算出逻辑。

我正在尝试使用 PHP 验证表单数据(最初从“名称”字段开始),然后将用户发送到“提交成功”页面(并将数据发送到服务器)。

到目前为止,我已经成功地通过将 action="" 保留为空白来使表单验证工作(而不是使用我读过的 PHP_SELF )安全风险),但这里的问题是,即使正确填写了表单,它也不会去任何地方,因为没有设置任何操作。

相反,我已成功使用 action=handler.php 将用户发送到“提交成功”页面 - 但这样做会忽略我的 PHP 表单字段验证代码。

我觉得我在这里遗漏了一些非常明显的东西,因为我不确定如何将 PHP 验证与将用户发送到“提交成功”页面以及将数据存储在某处结合起来。

我的 capture.php 表单页面顶部的 PHP 内容如下:

<?php

$name_error = '';

if(isset($_POST["submit"]))  
{  
  if(empty($_POST["name"]))  
  {  
       $name_error = "Please Enter Name";  
  }  
  else  
  {  
       if(!preg_match("/^[a-zA-Z ]*$/", $_POST["name"]))  
       {  
            $name_error = "Only Letters and whitespace";  
       }  
   }    
}  
?>

- 这将及时扩展以包括其他类型的表单字段。

我在capture.php中的html:

<body class="capture">

<!--action code #1-->
<form action="" method="post" enctype="multipart/form-data">
<!--action code #2-->
<!--<form action="handler.php" method="post" enctype="multipart/form-data">-->

  <div class="col-lg-6 col-md-6 col-sm-6">
<div class="form-inline">
<div class="form-group">

<label for="name">Your name<span class="text-danger">*</span></label><br/>
<input class="form-control" type="text" placeholder="e.g. Joe Bloggs" name="name" maxlength="70" />  
<span class="text-danger"><?php echo $name_error; ?></span> 

</div>
</div>
</div>

 <div class="col-lg-6 col-md-6 col-sm-6">
  <div class="form-group">

 <label for="games">Your choice</label>
 <select class="form-control" name="games">
  <option> -- </option>
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  </select>

  </div>
  </div>

<div class="col-lg-6 col-md-6 col-sm-6">
    <input id="btn-prev" name="prev" type="prev" value="Prev">
    </div>
    <div class="col-lg-6 col-md-6 col-sm-6">
<input id="btn-next" name="submit" type="submit" value="Next"></div>

感谢您提供的任何帮助

最佳答案

我认为它正在运行您的代码,只是您错过了结束表单标记。试试这个代码。我使用相同的页面操作,因此在 capture.php 页面中,如果您想设置操作 handler.php,则在此处添加 php 代码,然后在 handler.php 中添加 php 代码,如果出现错误,则将其重定向到 capture.php 并使用 session 或获取参数来显示错误

<?php

$name_error = '';

if (isset($_POST["submit"])) {
    if (empty($_POST["name"])) {
        $name_error = "Please Enter Name";
    } else {
        if (!preg_match("/^[a-zA-Z ]*$/", $_POST["name"])) {
            $name_error = "Only Letters and whitespace";
        }
    }
}
?>
<!--action code #1-->
<form action="" method="post" enctype="multipart/form-data">
    <!--action code #2-->
    <!--<form action="handler.php" method="post" enctype="multipart/form-data">-->

    <div class="col-lg-6 col-md-6 col-sm-6">
        <div class="form-inline">
            <div class="form-group">

                <label for="name">Your name<span class="text-danger">*</span></label><br/>
                <input class="form-control" type="text" placeholder="e.g. Joe Bloggs" name="name" maxlength="70"/>
                <span class="text-danger"><?php echo $name_error; ?></span>

            </div>
        </div>
    </div>

    <div class="col-lg-6 col-md-6 col-sm-6">
        <div class="form-group">

            <label for="games">Your choice</label>
            <select class="form-control" name="games">
                <option> --</option>
                <option>1</option>
                <option>2</option>
                <option>3</option>
                <option>4</option>
            </select>

        </div>
    </div>

    <div class="col-lg-6 col-md-6 col-sm-6">
        <input id="btn-prev" name="prev" type="prev" value="Prev">
    </div>
    <div class="col-lg-6 col-md-6 col-sm-6">
        <input id="btn-next" name="submit" type="submit" value="Next"></div>
</form>

如果您想在 handler.php 文件中提交表单,请使用此代码

<?php
session_start();
?>
<body class="capture">

    <!--action code #1-->
    <form action="handler.php" method="post" enctype="multipart/form-data">
        <!--action code #2-->
        <!--<form action="handler.php" method="post" enctype="multipart/form-data">-->

        <div class="col-lg-6 col-md-6 col-sm-6">
            <div class="form-inline">
                <div class="form-group">

                    <label for="name">Your name<span class="text-danger">*</span></label><br/>
                    <input class="form-control" type="text" placeholder="e.g. Joe Bloggs" name="name" maxlength="70"/>
                    <?php if (isset($_SESSION['form_error']['name'])) { ?>
                        <span class="text-danger"><?php echo $_SESSION['form_error']['name']; ?></span>
                        <?php
                    } ?>
                </div>
            </div>
        </div>

        <div class="col-lg-6 col-md-6 col-sm-6">
            <div class="form-group">

                <label for="games">Your choice</label>
                <select class="form-control" name="games">
                    <option>--</option>
                    <option>1</option>
                    <option>2</option>
                    <option>3</option>
                    <option>4</option>
                </select>

                <?php if (isset($_SESSION['form_error']['game_error'])) { ?>
                    <span class="text-danger"><?php echo $_SESSION['form_error']['game_error']; ?></span>
                    <?php
                } ?>

            </div>
        </div>

        <div class="col-lg-6 col-md-6 col-sm-6">
            <input id="btn-prev" name="prev" type="prev" value="Prev">
        </div>
        <div class="col-lg-6 col-md-6 col-sm-6">
            <input id="btn-next" name="submit" type="submit" value="Next"></div>
    </form>
    <?php
    unset($_SESSION['form_error']);
     ?>

那么这就是你的handler.php

<?php
session_start();
$name_error = array();

if (isset($_POST["submit"])) {
    if (empty($_POST["name"])) {
        $name_error['name'] = "Please Enter Name";
    } else {
        if (!preg_match("/^[a-zA-Z ]*$/", $_POST["name"])) {
            $name_error['name'] = "Only Letters and whitespace";
        }
    }

    if ($_POST["games"] == '--') {
        $name_error['game_error'] = "Please Select Game";
    }
}
if (!empty($name_error)) {
    $_SESSION['form_error'] = $name_error;
    header("Location: capture.php");
}

?>

关于javascript - 初学者在 PHP 表单验证方面遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762823/

相关文章:

javascript - 关闭的替代方案

javascript - 获取表单的提交 URL 作为相对 URL?

javascript - jquery 多重选择器与 contains()

javascript - Ajax 请求计时器更新间隙

javascript - 对话框中的多行标题?

javascript - 单选按钮上的必需属性无法正常工作

javascript - 从某些 ID 中排除滚动动画功能

php - wp_generate_attachment_metadata 返回一个空数组

php - mysql中过滤字段后缀

php - WordPress/PHP/JQuery 验证错误? HTML 5 验证失败?