2015-09-24 65 views
1

我有这个基本的HTML页面,并且有一种将数据上传到MySQL数据库的表单。使用JS在MySQL数据库中插入数据

还有一个JavaScript将数据传递给process.php文件。在这个文件中,我有一个INSERT查询。我使用这个脚本是因为我不想在提交时重新加载页面。

现在我有2个问题:

1)当我把数据发送到MySQL表(点击提交按钮),在第一时间1数据= 1个记录插入,这是正确的。如果我在输入表单字段中插入新数据,我有1数据= 2记录相等。第三次,3记录等等......

但是,如果我打印什么POST通过print_r($_POST),我总是有一个数据Array ([comune] => foo)

我也试图用unset()没有成功。

2)当我点击第一次提交按钮时,没有任何操作,我必须点击两次。

这是JS脚本的HTML页面:

<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 
     <meta charset="utf-8" /> 
     <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css" rel="stylesheet"> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
     <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script> 
     <script type="text/javascript"> 

     $(document).ready(function(){ 
      $(".formValidation").validate({ 
      debug: false, 
      rules: { 
       name: "required", 
       email: { 
       required: true, 
       email: true 
       } 
      }, 
      messages: { 
       name: "Please let us know who you are.", 
       email: "A valid email will help us get in touch with you.", 
      }, 
      submitHandler: function(form) { 
       // do other stuff for a valid form 
       $('.formValidation').on('submit', function() { 
       $.post('process.php', $(this).serialize(), function(data){ 
        $('#results').html(data); 
       }); 
       }) 
      } 
     }); 
     }); 
    </script> 
</head> 
<body> 
    <div class="row"> 
     <div class="col-xs-12"> 
     <form id="myform2" class="formValidation" name="myform2" action="" method="post"></form> 
     <div class="col-xs-12 col-sm-4"> 
      <div class="widget-box"> 
      <div class="widget-body"> 
       <div class="widget-main"> 
       <div> 
        <label for="form-field-select-1">form</label> 
       </div> 
       <hr> 
       <div class="widget-body"> 
        <div class="widget-main"> 
        <div> 
         <input type="text" name="comune" id="comune" value="" placeholder="Add something" form="myform2"> 
         <input type="submit" name="submit" value="Submit" class="btn btn-sm btn-success" form="myform2"> 
         <p id="result"></p> 
         <div id="results"></div> 
        </div> 
        </div> 
       </div> 
       </div> 
      </div> 
      </div> 
     </div> 
     </div> 
     <!-- /.col --> 
    </div> 
    <!-- /.row --> 
    </body> 
</html> 

process.php

foreach($_POST as $key => $value) { 
    $sql = "INSERT INTO tbl_".$key."(nome_".$key.") VALUES ('$value')"; 
    $result = dbQuery($sql); 
    unset($key); 
    unset($value); 
} 
+2

让人惊讶 - 你所要求的一个严重的SQL injectionattack! –

+0

这是只为测试目的 – Ogum

回答

2

你有太多的提交处理程序。

只需在插件的submitHandler回调选项中执行ajax即可。

内部,它已经在做了on('submit')所以第一次你点击它...你写的做Ajax是创建,但处理不发送尚未

下一次将实际发送的形式再次添加另一个提交处理程序。第三个点击将发送3次,并添加另一个提交处理程序等

submitHandler: function(form) { // fires only when valid      
    $.post('process.php', $(form).serialize(), function(data) { 
     $('#results').html(data); 
    }); 
} 
+0

这样我发送到process.php所有名称为

目前在这个页面中,值为空 数组([cboCategory] ​​=> [txtName] => [mtxDescription] = > [comune] =>) 我只需要发送.formValidation类的值 – Ogum

0

您提交处理程序堆叠逐一..每一次请求到PHP文件越来越大,这将导致数据库中插入一次以上。

使用

submitHandler: function (form) { 
         $.post('process.php', $(this).serialize(), function (data) { 
          $('#results').html(data); 
         }); 
         return false; 
       } 

希望这有助于

+0

通过POST我在process.php中有一个空数组。好吧,也许我忘了说这是一个例子。在我的真实页面上,我有多个,我需要发送到处理文件,只有.formValidation表单类的值。谢谢 – Ogum