【问题标题】:Unable to insert data into database after form submit using php and jquery ajax使用php和jquery ajax提交表单后无法将数据插入数据库
【发布时间】:2019-08-21 11:40:51
【问题描述】:

我在提交表单后尝试在数据库中插入数据,并希望将提交按钮的内容更改为已保存。我可以在提交表单后更改提交按钮的内容,但可以在数据库中存储空格。我的表格类似于这样。

html表单


<form id="yourForm">                                   
 <input type="text" name="building_length_in" id="building_length_in" placeholder="इन्च"class="form-control input-sm" value="" required>
 <input type="text" name="building_breadth_ft" id="building_breadth_ft" placeholder="फीट" class="form-control input-sm" value="" required>                                                                              

 <input class="submitBtn" type="submit" value="Submit"/>
   </form>

js


$(document).ready(function(){
    $('#yourForm').submit(function(event){
        $('.submitBtn').attr('value','Saved');

        setTimeout(function(){
            $('.submitBtn').attr('value','OK');
        }, 3000);

        var stuff = $('#yourForm').serialize();

        jQuery.ajax({
            type: 'POST',
            url: 'application_save.php', 
            data:{
                'stuff':stuff,                
            }
            ,success: function( response ){
              console.log(response);debugger;
            }
        });

        //Prevents form submission
        return false;        
    });
});

application_save.php


    <?php 
    require_once "conn.php";
    $building_length_in=$building_breadth_ft="";
    if($_SERVER["REQUEST_METHOD"] == "POST"){    
        $building_length_in = trim($_POST["building_length_in"]);
        $building_breadth_ft = trim($_POST["building_breadth_ft"]);  
        mysqli_set_charset('utf8');
        $sql = "INSERT INTO bps_registration_application 
                        (building_length_in,building_breadth_ft) 
                        VALUES (?, ?)";   

        if($stmt = mysqli_prepare($conn, $sql)){
            mysqli_stmt_bind_param($stmt, "ss",
                                    $building_length_in,
                                    $building_breadth_ft);      
            $building_length_in= $building_length_in;
            $building_breadth_ft=$building_breadth_ft;      
            if(mysqli_stmt_execute($stmt)){
                if(!empty($reg_id)){
                    $success = "Submitted form successfully .";     
                    header("location: registration_detail.php?success=$success&id=".$reg_id);
                    exit();
                } else {
                    header("location: registration_detail.php");
                    exit();   
                }     
            }else{
                echo "Something went wrong. Please try again later.";
            }
        }
        echo $success;
        mysqli_close($conn);
    }    
    ?>

console.log(stuff) 包含以下数据。

stuff = "reg_id=74&registration_date=%E0%A5%A8%E0%A5%A6%E0%A5%AD%E0%A5%AC-%E0%A5%AA-%E0%A5%A7%E0%A5%A6&building_use_id=residential&building_category=a&building_structure_category_id=rcc&building_length_ft=4&building_length_in=4&building_breadth_ft=4&building_breadth_in=4&building_height_ft=4&building_height_in=4&building_storey=4&building_area=46666"

<br />
<b>Notice</b>:  Undefined index: reg_id in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>8</b><br />
<br />
<b>Notice</b>:  Undefined index: registration_date in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>9</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>9</b><br />
<br />
<b>Notice</b>:  Undefined index: building_use_id in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>10</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>10</b><br />
<br />
<b>Notice</b>:  Undefined index: building_category in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>11</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>11</b><br />
<br />
<b>Notice</b>:  Undefined index: building_structure_category_id in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>12</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>12</b><br />
<br />
<b>Notice</b>:  Undefined index: building_length_ft in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>13</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>13</b><br />
<br />
<b>Notice</b>:  Undefined index: building_length_in in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>14</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>14</b><br />
<br />
<b>Notice</b>:  Undefined index: building_breadth_ft in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>15</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>15</b><br />
<br />
<b>Notice</b>:  Undefined index: building_breadth_in in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>16</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>16</b><br />
<br />
<b>Notice</b>:  Undefined index: building_height_ft in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>17</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>17</b><br />
<br />
<b>Notice</b>:  Undefined index: building_height_in in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>18</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>18</b><br />
<br />
<b>Notice</b>:  Undefined index: building_storey in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>19</b><br />
<br />
<b>Notice</b>:  Undefined index: building_area in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>20</b><br />
<br />
<b>Warning</b>:  trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>20</b><br />
<br />
<b>Warning</b>:  mysqli_set_charset() expects exactly 2 parameters, 1 given in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Undefined index: reg_id in <b>C:\xampp\htdocs\bps\api\application_save.php</b> on line <b>26</b><br />
{"msg":"Something went wrong. Please try again later.","reg_id":0}

【问题讨论】:

  • 您遇到的错误是什么?
  • 您是否检查过stuff 是否包含您所期望的内容?服务器在$_POST 中收到什么?您是否尝试直接在数据库中执行$sql 中的 sql 并查看其行为是否相同?
  • application_save.php 文件中$reg_id 声明在哪里?
  • 当您使用 ajax 时。为什么要触发 header 重定向?
  • 去掉data中的stuff属性,只传递序列化的字符串....data:stuff,

标签: php jquery mysql


【解决方案1】:

当您想要发送的只是序列化字符串时,您将序列化的表单数据作为另一个属性的值发送

这将使所有内容都在 $_POST['stuff'] 中,您需要自己手动解码

改变

data:{
  'stuff':stuff,                
}

data: stuff,

【讨论】:

  • 是否还值得一提的是在 AJAX API 中使用标头重定向以及在测试之前完全没有名为 $reg_id 的变量?
  • 表单包含 $_POST['reg_id'] 以及其他输入字段。我只包括两个有问题的输入字段。 @RiggsFolly
【解决方案2】:

application_save.php中更改您的以下代码:

if($_SERVER["REQUEST_METHOD"] == "POST"){    
  // $building_length_in = trim($_POST["building_length_in"]);
  // $building_breadth_ft = trim($_POST["building_breadth_ft"]);      
  $temp = explode('&', $_POST['stuff']);
  $keys = array_keys($temp);
  for($i=0;$i<count($keys);$i++) {
    $afterstr = substr($temp[$i], strpos($temp[$i], '=') + 1);
    $temp[strstr($temp[$i],'=',true)] = $afterstr;
    unset($temp[$i]);
  }

  $t = extract($temp); // here you can get all the posted variables like $reg_id, $registration_date, $building_use_id and so on.. 
  mysqli_set_charset('utf8');
  $sql = "INSERT INTO bps_registration_application (building_length_in,building_breadth_ft) VALUES (?, ?)";   
  if($stmt = mysqli_prepare($conn, $sql)){
    mysqli_stmt_bind_param($stmt, "ss", $building_length_in, $building_breadth_ft);
    $building_length_in = $building_length_in;
    $building_breadth_ft = $building_breadth_ft;
    if(mysqli_stmt_execute($stmt)){
      if(!empty($reg_id)){
        $data['msg'] = "Submitted form successfully .";
        $data['reg_id'] = $reg_id;
      } else {
        $data['msg'] = "Form submission could not be completed, please try again!";
        $data['reg_id'] = 0;
      }
    } else {
      $data['msg'] = "Something went wrong. Please try again later.";
      $data['reg_id'] = 0;
    }
  }
  echo json_encode($data);
}

AJAX:

$(document).ready(function(){
  $('#yourForm').submit(function(event){
      $('.submitBtn').attr('value','Saved');
      setTimeout(function(){
          $('.submitBtn').attr('value','OK');
      }, 3000);
      var stuff = $('#yourForm').serialize();
      jQuery.ajax({
          type: 'POST',
          url: 'application_save.php',
          data:{ stuff:stuff },
          dataType: "JSON",
          success: function( response ){
            console.log(res);debugger;
            var res = JSON.stringify(response);
            if(res.reg_id != 0) {
              window.location = 'registration_detail.php?success='+ res.msg +'&id=' + res.reg_id;
            } else {
              window.location = 'registration_detail.php?success='+ res.msg;
            }
          }
      });

      //Prevents form submission
      return false;
  });
});

【讨论】:

【解决方案3】:

变化:

data:{
    'stuff':stuff,                
}

收件人:

data:{
    stuff:stuff            
}

【讨论】:

  • 欢迎来到 SO。您应该添加一些解释。
  • 引号与 javascript 对象属性名称无关
  • 我添加了更多我得到的数据图像。请帮我。 @charlietfl
  • @prabina 我想知道你的回答是否解决了你的问题?
  • 不,它没有解决我的问题。我已经用另一种方法解决了。 @Mac
猜你喜欢
  • 2016-10-12
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多