自动保存表单域

Posted

技术标签:

【中文标题】自动保存表单域【英文标题】:Auto Save form fields 【发布时间】:2018-04-04 10:36:30 【问题描述】:

请我想实现这个:提交学生分数onblur表单输入字段这些是我的代码

Form.php

    <span id="ref_report"></span><br>
Student One:<input  type="text" name='ref_no[]' id='ref_no'><input  type="text" name='admin'id="admin" value='st1'><br>
Students Two  <input  type="text" name='ref_no[]' id='ref_no'><input  type="text" name='admin[]'id="admin" value='st2'><br>
Student  three  <input  type="text" name='ref_no[]' id='ref_no'><input  type="text" name='admin[]'id="admin" value='st3'><br>

//jquery

 $('#ref_no').blur(function()
            var query_string = $(this).val();
            if(query_string.length>0)
            
            //var filter = /^[0-9a-zA-Z_-]4,$/;
            //if ( preg_match('/^[a-zA-Z0-9.,()@#!?]+$/', $string) )
            var filter = /^[a-zA-Z0-9/#-]1,$/;// this allows special characters "/" and "-"
                if (!(filter.test(query_string))) 
                    $('#ref_report').html('<font color=red>This #Ref No. is not accepted</font>');
                    $('.login-apt').attr('disabled', 'disabled');
                    return false;
                
            $.ajax(
                    type: 'POST',
                    url: "validate.php",
                    //data: query_string,
                    data: ref_no:query_string,//ref_no

                    success: function(data)
                        
                        if(data=='exist')
                        
                            $('#ref_report').html('<font color=red><b>This #Ref. Number does not exist here</b></font>');
                            $('.login-apt').attr('disabled', 'disabled');
                        
                        else
                        
                            $('#ref_report').html('<img src=yes.png><font color="Green">Accepted</font>');
                            $('.login-apt').removeAttr('disabled',false);

                                       
                    
                );
            
        );

下面是我在 validat.php 中使用的 php 代码:

if(isset($_POST['ref_no']))

    $ref_no = mysql_real_escape_string(trim($_POST['ref_no']));
    $admin = mysql_real_escape_string(trim($_POST['admin']));
    $sql = "SELECT * FROM `tbl_cms` WHERE `admin`= '$ref_no'";
    $myquery = mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($myquery) !=0)
    
        $row = mysql_fetch_array($myquery);

  for($i=0;$i< count($_POST['ref_no']); $i++)
     $data = $_POST['ref_no'][$i];
     $admin = $_POST['admin'][$i];

   $sql="INSERT INTO `tbl_cms` (`admin`, `content`) values('$admin', '" . $data . "')";
           mysql_query($sql);

           

                echo 'not exist';

    
    else
    
            echo 'exist';

    

我有一个非常简单的 MySQL 表,我希望每个学生及其管理员的分数自动存储为分数的键值。它看起来像这样:

admin   Content
std1     3      
std2     5 
std3     6 
  .......................................................

我的问题是代码可以工作,但只保存第一个表单字段的内容,即只保存 std1 分数。而不是保存三个学生的分数 请指导我如何完善这一点。谢谢

【问题讨论】:

您对多个输入使用相同的 id="ref_no"。尝试使用 .$(".ref_no").blur(function() ... 并在每个输入 class="ref_no" 上添加类属性。请记住,id 属性为 HTML 元素指定了一个唯一的 id(该值在 HTML 文档中必须是唯一的)。 警告:如果您只是学习 PHP,请不要学习过时的 mysql_query 接口。这很糟糕,已在 PHP 7 中删除。PDO is not hard to learn 之类的替代品和PHP The Right Way 之类的指南有助于解释最佳实践。确保确保您的用户参数为properly escaped,否则您将得到严重的SQL injection bugs。 #sayon​​ara 非常感谢,它有效,但我认为我的 validate.php 也有一些问题,请帮助检查一下 【参考方案1】:

您不能有多个具有相同值的id 属性。改用类:

Student One:<input  type="text" name='ref_no[]' class='ref_no'><input  type="text" name='admin' id="admin-1" value='st1'><br>
Students Two  <input  type="text" name='ref_no[]' class='ref_no'><input  type="text" name='admin[]' id="admin-2" value='st2'><br>
Student  three  <input  type="text" name='ref_no[]' class='ref_no'><input  type="text" name='admin[]' id="admin-3" value='st3'><br>

$('.ref_no').blur(...);

注意,我还将id="admin" 更改为id="admin-1" 等。

【讨论】:

谢谢@Martin Adámek,也请检查 validate.php 代码 那里有什么问题?如果我没看错,你没有注意到除此之外的其他问题。 它没有存储学生管理员号码 [admin],我不知道为什么,而且只有一位插入的分数存储为分数 [内容] 它没有存储学生管理员号码 [admin],我不知道为什么,而且只有一位插入的分数存储为分数 [内容] 好吧,您正在尝试在 PHP 脚本中使用 $_POST['admin'],但在 JS 中发出请求时您没有传递它。

以上是关于自动保存表单域的主要内容,如果未能解决你的问题,请参考以下文章

在注册表单上,表单字段未保存在浏览器自动填写提交时。(ReactJs)

没有保存按钮的自动保存表单 - Apollo,React

如何在 Android 上自动保存表单 - 最佳实践

ASP.NET 表单自动保存

使用 jquery 和 ajax 自动保存表单字段输入

在 Access 2013 中禁用文件自动保存