【问题标题】:php form validation and display errorsphp表单验证和显示错误
【发布时间】:2015-09-12 11:22:36
【问题描述】:

我认为这很简单,但我不知道如何执行。

我有一个包含一些数据的表单,并且我创建了另一个 php 文件来验证表单数据,但是如果验证失败,我无法将错误消息显示回表单中。我已经附上了这两个文件,但我不知道执行它很热:(

我的 form.php 看起来像

<form name="form1" method="post" action="process/process_add_page.php">
  <fieldset>
    <legend>Add Page</legend>
    <table width="1056" height="365" border="1">
      <tr>
        <th width="77" scope="col">Page Title</th>
        <th width="962" scope="col"><label for="page_title"></label>
        <input type="text" name="page_title" id="page_title"><span style="color:#FF0000">* <?php echo $titleerror;?></span></th>
  </tr>
  <tr>
    <th scope="row">Page Description</th>
    <td><label for="page_description"></label>
    <textarea name="page_description" class="ckeditor" id="page_description" cols="100" rows="5"></textarea></td>
  </tr>
  <tr>
    <th scope="row">Seo Title</th>
    <td><label for="seo_title"></label>
    <input type="text" name="seo_title" id="seo_title"></td>
  </tr>
  <tr>
    <th scope="row">Seo Description</th>
    <td><label for="seo_description"></label>
    <textarea name="seo_description" class="ckeditor" id="seo_description" cols="45" rows="5"></textarea></td>
  </tr>
  <tr>
    <th scope="row">Page Order</th>
    <td><label for="page_order"></label>
    <input type="text" name="page_order" id="page_order"></td>
  </tr>
  <tr>
    <th scope="row">Page Status</th>
    <td><label for="page_status"></label>
      <select name="page_status" id="page_status">
        <option value="1">Active</option>
        <option value="0">Inactive</option>
    </select></td>
  </tr>
  <tr>
    <th colspan="2" scope="row"><input type="submit" name="btnsubmit" id="btnsubmit" value="Submit"></th>
  </tr>
</table>
<p>&nbsp;</p>
  </fieldset>
</form>

我的 process_add_pages.php 看起来像这样

<?php

require_once('../../classes/database.php');
require_once('../../classes/pages.php');
require_once('../../classes/redirect.php');

$objPage=new Page();

$titleerror='';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST['page_title'])){
        $titleerror = "Title is required";
        echo $titleerror;


    }else
    {
        $page_title=mysqli_real_escape_string($objPage->conxn,$_POST['page_title']);
    if (!preg_match("/^[a-zA-Z ]*$/",$page_title)) {
        $titleerror = "Only letters and white space allowed";

            }
    }

$page_description=mysqli_real_escape_string($objPage-     >conxn,$_POST['page_description']);
$seo_title=mysqli_real_escape_string($objPage->conxn,$_POST['seo_title']);
$seo_description=mysqli_real_escape_string($objPage->conxn,$_POST['seo_description']);
$page_order=mysqli_real_escape_string($objPage->conxn,$_POST['page_order']);
$page_status=mysqli_real_escape_string($objPage->conxn,$_POST['page_status']);
}


$objPage->setPage_title($page_title);
$objPage->setPage_description($page_description);
$objPage->setSeo_title($seo_title);
$objPage->setSeo_description($seo_description);
$objPage->setPage_status($page_status);

if($objPage->addPage()){
    new Redirect('../index.php?page=page&action=view&success=The page has been created');
}else{
new Redirect('../index.php?page=page&action=view&error=The page could not be created'); 
}



?>

【问题讨论】:

  • 你为什么使用两个分开的文件?
  • 因为我在管理代码的唯一文件夹中拥有所有表单处理文件

标签: php forms validation


【解决方案1】:

您需要做一些小改动才能使其正常工作。 您的 process_add_pages.php 文件中有几个问题。你的代码是..

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST['page_title'])){
        $titleerror = "Title is required";
        echo $titleerror; /*error part-1 */


    }else
    {
        $page_title=mysqli_real_escape_string($objPage->conxn,$_POST['page_title']);
    if (!preg_match("/^[a-zA-Z ]*$/",$page_title)) {
        $titleerror = "Only letters and white space allowed"; /*error part-2 */

            }
    }

$page_description=mysqli_real_escape_string($objPage-     >conxn,$_POST['page_description']);
$seo_title=mysqli_real_escape_string($objPage->conxn,$_POST['seo_title']);
$seo_description=mysqli_real_escape_string($objPage->conxn,$_POST['seo_description']);
$page_order=mysqli_real_escape_string($objPage->conxn,$_POST['page_order']);
$page_status=mysqli_real_escape_string($objPage->conxn,$_POST['page_status']);
}

如果验证中出现任何问题,它将在 process_add_pages.php 文件中回显错误消息。但它也会执行 sql 查询。因此,如果验证中有任何问题,您可以重定向到带有错误消息的表单页面。 你可以试试这种新的代码格式...

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST['page_title'])){
        $titleerror = "Title is required";
        new Redirect('../index.php?error="The page need a page title"'); 


    }elseif
    {
        $page_title=mysqli_real_escape_string($objPage->conxn,$_POST['page_title']);
    if (!preg_match("/^[a-zA-Z ]*$/",$page_title)) {
        new Redirect('../index.php?error="Only letters and white space allowed"'); 

            }
    }
else {
$page_description=mysqli_real_escape_string($objPage-     >conxn,$_POST['page_description']);
$seo_title=mysqli_real_escape_string($objPage->conxn,$_POST['seo_title']);
$seo_description=mysqli_real_escape_string($objPage->conxn,$_POST['seo_description']);
$page_order=mysqli_real_escape_string($objPage->conxn,$_POST['page_order']);
$page_status=mysqli_real_escape_string($objPage->conxn,$_POST['page_status']);
     }
}

【讨论】:

    【解决方案2】:

    我认为,这是检查验证的更好方法。在表单中添加 onsubmit。检查标签中的 CheckValidation() 函数。

    <form name="form1" method="post" action="process/process_add_page.php" onsubmit="return CheckValidation()">
        <fieldset>
            <legend>Add Page</legend>
            <table width="1056" height="365" border="1">
                <tr>
                <th width="77" scope="col">Page Title</th>
                <th width="962" scope="col"><label for="page_title"></label>
                <input type="text" name="page_title" id="page_title">
                <span style="color:#FF0000" style="display:none" id="RequiredTitle">* Title is required</span>
                <span style="color:#FF0000" style="display:none" id="OnlyLetters">* Only letters and white space allowed</span>
                </th>
            </tr>
            <tr>
                    <th scope="row">Page Description</th>
                    <td><label for="page_description"></label>
                    <textarea name="page_description" class="ckeditor" id="page_description" cols="100" rows="5"></textarea></td>
            </tr>
            .
            .
            .
            //Rest of the code
    </form>
    
    <script>
        function CheckValidation()
        {
            var Title=$('#page_title').val();
            if(Title=="")
            {
                $('#RequiredTitle').show();
                return false;
            }
            else
            {
                if(!preg_match("/^[a-zA-Z ]*$/",Title))
                {
                    $('#OnlyLetters').show();
                    return false;
                }
            }
        }
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 2018-01-02
      • 2018-04-19
      • 2014-02-20
      • 2012-08-24
      • 1970-01-01
      相关资源
      最近更新 更多