如何使用PHP有效且高效地将多个记录保存到mysql中? [英] How do I effectively and effeciently save multiple records into mysql using PHP?

查看:53
本文介绍了如何使用PHP有效且高效地将多个记录保存到mysql中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的脚本有问题。有时它工作得很好,但有时它行为不端并混合记录。该脚本是用PHP编写的,它是用于记录教师标记的系统中最重要的部分。



记录保存到MySql数据库和脚本旨在一次向数据库提交多个记录。这部分很好,因为记录一直在提交,但有时候脚本交换或混合学生标记。



这是我的问题,我需要帮助解决。



下面是一段代码示例。

 foreach($ ExamMarks  as  $ Key => $ Value)
{

$ Student = array(explode) ( ,$ Value));

if(trim($ _ POST [$ Student [0] [1]])== Null || trim($ _ POST [$ Student [0] [1]])==
{

$ examGrade = ;
$ comments = ;
$ points = ;

}
else if(trim($ _ POST [$ Student [0] [1]])> = 80)
{

$ examGrade = A;
$ comments = 出色的表现。保持它!;
$ points = 9 ;


}
其他 如果(trim( $ _POST [$ Student [0] [1]])> = 70)
{


$ examGrade = B;
$ comments = 性能良好。目标较高的
$ points = 7 ;

}

其他 如果(trim( $ _POST [$ Student [0] [1]])> = 60)
{


$ examGrade = C;
$ comments = 相当不错的表现。努力工作。;
$ points = 5 ;


}
其他 如果(trim( $ _POST [$ Student [0] [1]])> = 40)
{


$ examGrade = D;
$ comments = 平均表现。工作较硬
$ points = 3 ;

}
else if (trim($ _ POST [$学生[0] [1]])> = 20)
{

$ examGrade = E;
$ comments = 低于平均值。更多的努力。;
$ points = 1 ;

}
else
{


$ examGrade = U;
$ comments = 未分级;
$ points = 0 ;

}

mysqli_autocommit($ con,FALSE);

if(preg_replace(' #[^ 0-9] #i'' ',trim($ _ POST [$ Student [0] [3]]))= =
{
if(preg_replace(' #[^ 0-9] #i'' ',trim($ _ POST [$ Student [0] [1]]))!= < span class =code-string>

{
$ updateSQL = UPDATE student_exam_marks SET
ExamMark =
。 preg_replace(' #[^ 0-9] #i'' ',trim($ _ POST [$ Student [0] [1]]))。
ExamGrade ='
$ examGrade ',
Comments ='
$ comments ',
Points =
$ points
TeacherID ='
。 $ row_Select_Teacher [ TeacherID]。 '
WHERE ExamID =
$ ExamID AND St​​udentID =。修剪($ Student [0] [0])。
AND SubjectID =
。 $ _GET [ SubjectID]。 AND AcademicYear =。 date( Y);

}

}
else if(preg_replace(' #[^ 0-9] #i'' ',trim($ _ POST [$ Student [0] [3]]))!= && preg_replace(' #[^ 0-9] #i '' ',trim($ _ POST [$ Student [0] [1] ]))!=
{

< span class =code-sdkkeyword> $ updateSQL
= UPDATE student_exam_marks SET
ExamMark =
。 preg_replace(' #[^ 0-9] #i'' ',trim($ _ POST [$ Student [0] [1]]))。
ExamGrade ='
$ examGrade ',
TermMark =
。 preg_replace(' #[^ 0-9] #i'' ',trim($ _ POST [$ Student [0] [3]]))。
Comments ='
$ comments ',
Points =
$ points
TeacherID ='
。 $ row_Select_Teacher [ TeacherID]。 '
WHERE ExamID =
$ ExamID AND St​​udentID =。修剪($ Student [0] [0])。
AND SubjectID =
。 $ _GET [ SubjectID]。 AND AcademicYear =。 date( Y);

}

} // 结束foreach








上面的代码生成了这个SQL语句,必须立即提交给MySQL。

 更新 student_exam_marks  SET  ExamMark = < span class =code-digit> 49 ,ExamGrade = '  D',评论= ' 平均性能。更加努力。',Points =  3 ,TeacherID = '  899622611'  WHERE  ExamID =  3   AND  StudentID =  31   AND  SubjectID =  8   AND  AcademicYear =  2016  
更新 student_exam_marks SET ExamMark = 56 ,ExamGrade = ' D',Comments = ' 平均表现。更加努力。',Points = 3 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 32 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 58 ,ExamGrade = ' D',Comments = ' 平均表现。更加努力。',Points = 3 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 47 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 60 ,ExamGrade = ' C',Comments = ' 相当不错的表现。努力工作。',Points = 5 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 30 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 60 ,ExamGrade = ' C',Comments = ' 相当不错的表现。努力工作。',Points = 5 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 48 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 66 ,ExamGrade = ' C',Comments = ' 相当不错的表现。努力工作。',Points = 5 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 34 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 66 ,ExamGrade = ' C',Comments = ' 相当不错的表现。努力工作。',Points = 5 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 44 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 70 ,ExamGrade = ' B',Comments = ' 表现良好。瞄准更高。',Points = 7 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 35 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 70 ,ExamGrade = ' B',Comments = ' 表现良好。瞄准更高。',Points = 7 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 49 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 76 ,ExamGrade = ' B',Comments = ' 表现良好。瞄准更高。',Points = 7 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 36 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 77 ,ExamGrade = ' B',Comments = ' 表现良好。瞄准更高。',Points = 7 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 42 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 77 ,ExamGrade = ' B',Comments = ' 表现良好。瞄准更高。',Points = 7 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 45 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 78 ,ExamGrade = ' B',Comments = ' 表现良好。瞄准更高。',Points = 7 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 29 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 80 ,ExamGrade = ' A',Comments = ' 出色的表现。坚持下去!',Points = 9 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 50 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 87 ,ExamGrade = ' A',Comments = ' 出色的表现。坚持下去!',Points = 9 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 33 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 88 ,ExamGrade = ' A',Comments = ' 出色的表现。坚持下去!',Points = 9 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 37 AND SubjectID = 8 AND AcademicYear = 2016
更新 student_exam_marks SET ExamMark = 90 ,ExamGrade = ' A',Comments = ' 出色的表现。坚持下去!',Points = 9 ,TeacherID = ' 899622611' WHERE ExamID = 3 AND StudentID = 26 AND SubjectID = 8 AND AcademicYear = 2016





我尝试了什么:



最初系统的设计是为了提交一个学生一次标记,但我想让教师更容易,以便他们提交所有学生一次标记。这个工作仍然有效,但我对改进版本感兴趣。

解决方案

ExamMarks as


Key =>


Value)
{


I have a problem with my script. Sometimes it works just fine but at times it misbehaves and mixes records. The script is written in php and it is the most important part of a system used to record students marks by teachers.

The records are saved to MySql database and the script is designed to submit multiple records to database at once. That part is fine as records are submitted all the time, but sometime the script swaps or mixes students marks.

This is my problem that I need help to fix.

A sample of the code is captured below.

foreach($ExamMarks as $Key=> $Value)
{

$Student = array(explode(" ",$Value));

if(trim($_POST[$Student[0][1]]) == "Null" || trim($_POST[$Student[0][1]]) == " ")
{
     
        $examGrade = "";
		$comments = "";
		$points = "";
		
}
else if(trim($_POST[$Student[0][1]]) >= 80)
{
	 
        $examGrade = "A";
		$comments = "Outstanding performance. Keep it up!";
		$points = 9;
		

}
else if (trim($_POST[$Student[0][1]]) >= 70)
{
	
   
   $examGrade = "B";
   $comments = "Good performance. Aim higher.";
   $points = 7;

}

else if (trim($_POST[$Student[0][1]]) >= 60)
{

	
    $examGrade = "C";
	$comments = "Fairly good performance. Work hard.";
	$points = 5;
	

}
else if (trim($_POST[$Student[0][1]]) >= 40)
{

	
    $examGrade = "D";
	$comments = "Average performance. Work harder.";
	$points = 3;

}
else if (trim($_POST[$Student[0][1]]) >= 20)
{
	
    $examGrade = "E";
	$comments = "Below Average. Put more effort.";
	$points = 1;

}
 else
{
    
	 
    $examGrade = "U";
	$comments = "Ungraded";
	$points = 0;

}

mysqli_autocommit($con, FALSE);
	
if(preg_replace('#[^0-9]#i', '',trim($_POST[$Student[0][3]])) == "")
{
if(preg_replace('#[^0-9]#i', '',trim($_POST[$Student[0][1]])) != "")
{
  $updateSQL = "UPDATE student_exam_marks SET 
   ExamMark = " 		. preg_replace('#[^0-9]#i', '',trim($_POST[$Student[0][1]])) . ", 
   ExamGrade = '" 		. $examGrade . "', 
   Comments = '" 		. $comments . "', 
   Points = " 			. $points . " ,
   TeacherID = '" 		. $row_Select_Teacher["TeacherID"] . "' 
   WHERE ExamID = " 	. $ExamID . " AND StudentID = " . trim($Student[0][0]) . " 
   AND SubjectID = " . $_GET["SubjectID"] . " AND AcademicYear = " . date("Y") ;  
	
}
	
}
else if(preg_replace('#[^0-9]#i', '',trim($_POST[$Student[0][3]])) != "" && preg_replace('#[^0-9]#i', '',trim($_POST[$Student[0][1]])) != "")
{

$updateSQL = "UPDATE student_exam_marks SET 
ExamMark = " 		. preg_replace('#[^0-9]#i', '',trim($_POST[$Student[0][1]])) . ", 
ExamGrade = '" 		. $examGrade . "', 
TermMark = " 		. preg_replace('#[^0-9]#i', '',trim($_POST[$Student[0][3]])) . ", 
Comments = '" 		. $comments . "', 
Points = " 			. $points . " ,
TeacherID = '" 		. $row_Select_Teacher["TeacherID"] . "' 
WHERE ExamID = " 	. $ExamID . " AND StudentID = " . trim($Student[0][0]) . " 
AND SubjectID = " . $_GET["SubjectID"] . " AND AcademicYear = " . date("Y") ;  

}

}//End foreach





The code above produces this SQL statements which must be submitted to MySQL at once.

UPDATE student_exam_marks SET ExamMark = 49, ExamGrade = 'D', Comments = 'Average performance. Work harder.', Points = 3 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 31 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 56, ExamGrade = 'D', Comments = 'Average performance. Work harder.', Points = 3 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 32 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 58, ExamGrade = 'D', Comments = 'Average performance. Work harder.', Points = 3 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 47 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 60, ExamGrade = 'C', Comments = 'Fairly good performance. Work hard.', Points = 5 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 30 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 60, ExamGrade = 'C', Comments = 'Fairly good performance. Work hard.', Points = 5 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 48 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 66, ExamGrade = 'C', Comments = 'Fairly good performance. Work hard.', Points = 5 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 34 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 66, ExamGrade = 'C', Comments = 'Fairly good performance. Work hard.', Points = 5 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 44 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 70, ExamGrade = 'B', Comments = 'Good performance. Aim higher.', Points = 7 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 35 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 70, ExamGrade = 'B', Comments = 'Good performance. Aim higher.', Points = 7 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 49 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 76, ExamGrade = 'B', Comments = 'Good performance. Aim higher.', Points = 7 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 36 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 77, ExamGrade = 'B', Comments = 'Good performance. Aim higher.', Points = 7 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 42 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 77, ExamGrade = 'B', Comments = 'Good performance. Aim higher.', Points = 7 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 45 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 78, ExamGrade = 'B', Comments = 'Good performance. Aim higher.', Points = 7 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 29 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 80, ExamGrade = 'A', Comments = 'Outstanding performance. Keep it up!', Points = 9 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 50 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 87, ExamGrade = 'A', Comments = 'Outstanding performance. Keep it up!', Points = 9 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 33 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 88, ExamGrade = 'A', Comments = 'Outstanding performance. Keep it up!', Points = 9 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 37 AND SubjectID = 8 AND AcademicYear = 2016
UPDATE student_exam_marks SET ExamMark = 90, ExamGrade = 'A', Comments = 'Outstanding performance. Keep it up!', Points = 9 , TeacherID = '899622611' WHERE ExamID = 3 AND StudentID = 26 AND SubjectID = 8 AND AcademicYear = 2016



What I have tried:

Initially the system was designed such that it submitted one student marks at a time but I wanted to make things more easier for teachers so that they submit all students marks once. This one worked and still works fine but I am interested in the improved version.

解决方案

ExamMarks as


Key=>


Value) {


这篇关于如何使用PHP有效且高效地将多个记录保存到mysql中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆