PHP不使用ajax将数据插入到数据库中,而是插入超过91行

在此处输入图像描述

我试图向数据库插入超过150行但发布请求仅发生91行,控制台日志显示内部服务器错误

插入91行后,就会出错

您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的”附近使用正确的语法

我的HTML表格

JS

 $(document).ready(function() { $('#mySpan4').submit(function(e) { $.ajax({ type: 'post', url: 'http://localhost/demo_TeacherApp/attendence_submit.php', // you should not use absolute addresses, with http:// . only relative paths data: $('#mySpan4').serialize(), success: function(data) { // log $sql string // } }); // prevents the form from really submitting through the normal way e.preventDefault(); return false; }) }); 

PHP

 $student) { // ** so the data is inserted in to data base ** // $sql .= sprintf("%s ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" , ($i==0 ? '' : ',') // ** data from Ajax ** // , mysqli_real_escape_string($conn, trim($_POST['student'][$i])) , mysqli_real_escape_string($conn, trim($_POST['present'][$i])) , mysqli_real_escape_string($conn, trim($_POST['Reg'][$i])) , mysqli_real_escape_string($conn, trim($_POST['schoolid'][$i])) , mysqli_real_escape_string($conn, trim($_POST['section'][$i])) , mysqli_real_escape_string($conn, trim($_POST['standard'][$i])) , mysqli_real_escape_string($conn, trim($_POST['Subject'][$i])) , mysqli_real_escape_string($conn, trim($_POST['date1'][$i])) , mysqli_real_escape_string($conn, trim($_POST['UserType'][$i])) , mysqli_real_escape_string($conn, trim($_POST['Userid'][$i])) , mysqli_real_escape_string($conn, trim($_POST['date_user_submitted'][$i])) ); } // ** on success full function ** // if ($conn->query($sql)) { echo $sql;// **can do any thing to recognise if the data is inserted if this gives the out put then the data is shorly inserted in to data base ** // } ?> 

我注意到在您的HTML中,您的索引从出现92跳转到出现146。

PRASANNA B的隐藏字段也出现了92但单选按钮出现了145。

这看起来就像你创建这个表单时你的索引编码出了问题! 这可能解释了为什么在将第92行加载到数据库时它们都会出错

 

好的,现在我们已经反驳了这个想法! 让我们从头开始。

PHP有一些可能会超出的参数,即

  • post_max_size 这意味着脚本不会收到所有的post数组

  • max_input_vars 这限制了脚本可以接受的变量的数量

因为你有至少1950输入变量,我知道这可能是第一个检查。 所以看看你的php.ini文件中的这两个参数,让我知道它们是什么。

所以从你的评论看来,对于这个至少有1950个变量的脚本来说, max_input_vars = 1000似乎还不够。 这肯定会解释你得到的错误! 我认为1000是默认值,这就是为什么它的评论forms。

所以修改php.ini并使max_input_vars = 2500 ,只是为了安全起见没有; 评论当然。

在对php.ini进行更改后, 别忘了重启Apache

如果问题是您已达到最大POST大小,那么这将无济于事,但作为使用预准备语句插入数据的示例,这应该是有用的。 使用你在Pastebin上发布的表单数据和这个代码一起插入它,愉快地插入了151行,没有错误(是的,专门创建了一个表)〜也许我应该添加我通过POST提交表单而没有ajax!

 real_escape_string( filter_var( $var, FILTER_SANITIZE_STRING ) ); } $servername = "localhost"; $username = "root"; $password = "xxxx"; $dbname = "xxxxx"; $conn = new mysqli( $servername, $username, $password, $dbname ); /* I obviously used correct details for my db */ $sql='INSERT INTO `attendance_master` ( `StudentFirstName`, `AttendanceStatus`, `StudentRegID`, `SchoolID`, `Section`, `Standard`, `Subjects`, `AttendanceDate`, `UserType`, `Attendence_taken_by`, `Attendence_taken_date` ) VALUES ( ?,?,?,?,?,?,?,?,?,?,? )'; $stmt=$conn->prepare( $sql ); foreach( $_POST['Reg'] as $i => $student ) { try{ $stud = filter( $conn, $_POST['student'][$i] ); $pres = filter( $conn, $_POST['present'][$i] ); $reg = filter( $conn, $_POST['Reg'][$i] ); $id = filter( $conn, $_POST['schoolid'][$i] ); $sect = filter( $conn, $_POST['section'][$i] ); $stan = filter( $conn, $_POST['standard'][$i] ); $subj = filter( $conn, $_POST['Subject'][$i] ); $date = filter( $conn, $_POST['date1'][$i] ); $type = filter( $conn, $_POST['UserType'][$i] ); $uid = filter( $conn, $_POST['Userid'][$i] ); $subm = filter( $conn, $_POST['date_user_submitted'][$i] ); $stmt->bind_param('sssssssssss', $stud, $pres, $reg, $id, $sect, $stan, $subj, $date, $type, $uid, $subm ); if( !$stmt->execute() ) throw new Exception( 'Insert failed @ row'.$i, 400 ); } catch( Exception $e ){ echo $e->getMessage(); continue; } } $stmt->close(); $conn->close(); } ?> 
PRASAD DR
PRASAD KT
PRASANNA B
PRASANNAKUMAR K
PREETHI CR
RADHA HN
PRASANNA B