2016-11-26 121 views
-2

我想将我在数组中生成的多个学生记录插入到我的数据库的terminal_assessment表中。输入所有生成的学生记录后,我只发布最后一个学生记录插入。下面是我的代码:将多个生成的学生记录从HTML5表格插入MySQL数据库

<?php 
require_once('login.php'); 

echo "<form method='post' action=''>"; 

//fetching all JSS 1 students from students' table 
$student_sql = "SELECT * FROM `sch`.student where classAdmitted = 'jss1' ORDER BY firstName"; 

//creating table columns for all student records heading 
echo "<table><tr><th>S/No.</th><th>Admission No</th><th>Full Names</th><th>Current Class</th><th>Subject</th><th>CA1</th><th>CA2</th><th>Exam</th><th>Total</th></tr>"; 

//looping through all the student present in a class and their subjects for exam recording 
foreach($conn->query($student_sql) as $row1) 
{ 
    $fullName=strtoupper($row1['firstName']." ".$row1['middleName']." ".$row1['surName']); 
    $stud_id = $row1['studentID']; 

    echo "<tr><td></td><td>".$row1['studentID']."</td><td>".$fullName."</td><td>".$row1['classAdmitted']."</td><td class='scol'><select name='subCode'><option value='agric'>Agric Science</option><option value='bio'>Biology</option><option value='bus'>Business Study</option><option value='crk'>Christian Religious Study</option><option value='econs'>Economics</option><option value='eng'>English Language</option><option value='fst'>Food Science</option><option value='intech'>Introductory Technology</option><option value='maths'>Mathematics</option><option value='soc'>Social Study</option></select></td><td class='scol'><input name='ca1' type='number' class='sub' value='0'></td><td class='scol'><input name='ca2' type='number' class='sub' value='0'></td><td class='scol'><input type='number' name='ca3' class='sub' value='0'></td><td class='scol'><input type='number' name='ca4' class='sub' value='0'></td></tr>"; 
} 
    echo "</tr></table>"; 
    echo "<div id='btmbar'>"; 
    printf('Total Number of Students: %d', $conn->affected_rows); 
    echo "<br><input id='btn1' type='submit' name='add' value='Get TOTAL'><input id='btn2' type='submit' value='Submit Student Records' name='submit'>"; 
    echo "</div></div></form>"; 

$student_ta_id = $sess = $className = $term = $subNames = $ca1 = $ca2 = $ca3 = $ca4 = ""; 

if(isset($_POST['submit'])) 
{ 
    $student_ta_id = "$stud_id"."$session"."$className"."$term"."$subjects"; 
    $term = $_POST['term']; 
    $student_ID = $row1['studentID']; 
    $className = $row1['classAdmitted']; 
    $subjects = $_POST['subCode']; 
    $ca1 = $_POST['ca1']; 
    $ca2 = $_POST['ca2']; 
    $ca3 = $_POST['ca3']; 
    $ca4 = $ca1 + $ca2 + $ca3; 

$sql = "INSERT INTO `sch`.terminal_assessment (student_ta_id, session, className, term, subjectNames, ca1, ca2, exam, total) VALUES('$student_ta_id', '$session', '$className', '$term', '$subjects', '$ca1', '$ca2', '$ca3', '$ca4')"; 
$insert = $conn->query($sql); 

if($insert === True) 
{ 
    echo "Record inserted successfully". "<br>"; 
} 
else 
{ 
    echo "Error Unable to Insert Record".die($conn->error); 
} 

} 
    $conn->close(); 
?> 

Preview of the HTML5 format

+1

一次一个通常 – RiggsFolly

+0

这真是太宽的问题,但如果你告诉我们,你的页面的人HTML可能能够帮助你 – RiggsFolly

+0

你的问题目前还不清楚。但是,如果你有一组学生数据,你应该能够循环遍历每次添加一条新记录。 – hayres

回答

1

试试这个逻辑:)

  1. 对于HTML形式的身体让你选择的名字和输入名称如下:

     
    subCode[] 
    ca1[] 
    ca2[] 
    ca3[] 
    
  2. 在php中

     
        if(isset($_POST['subCode'], $_POST['cal1'], $_POST['cal2'], $_POST['cal3'])){ 
         $sc = $_POST['subCode']; 
         $c1 = $_POST['cal2']; 
         $c2 = $_POST['cal2']; 
         $c3 = $_POST['cal3'];

    $keys = array_keys($sc); $data = array(); foreach($keys as $k => $v){ $data[$v] = array($sc[$v], $c1[$v], $c2[$v], $c3[$v]); } $sql = 'INSERT INTO table_name(subCode, cal1, cal2, cal3) VALUES (?, ?, ?, ?)'; if($stmt = $conn->prepare($sql)){ $stmt->bind_param("iiii", $subCode, $cal1, $cal2, $cal3); foreach ($data as $v) { $subCode = $v[0]; $cal1 = $v[1]; $cal2 = $v[2]; $cal3 = $v[3]; $stmt->execute(); if($stmt->insert_id <= 0){ trigger_error('Insert fail. Error: ' . $stmt->error); break; } } $stmt->close(); $conn->close(); }else{ trigger_error('Prepare fail. Error: ' . $stmt->error); } }
+1

谢谢Roger Tiong – LoveJESUS

+0

欢迎您:) –

-2

我认为问题在于,在您生成的表单中,对于每个学生的每个控件,您给出相同的名称;从而产生冲突:最后创建的具有相同名称的控件是被考虑的控件,这就是为什么只插入最后一个控件。另外,我认为你获得学生证的方式是不正确的。我建议你这样做:

您应该为每个控件的每个控件的名称(每个学生)添加一个数字。你也应该存储StudentID和classAdmitted在隐藏字段

//looping through all the student present in a class and their subjects for exam recording 
//this variable will be incremented for each line that you display; you then can use it to identify the values related to a specific line. e.g: subCode_1 would identify the selected major on the line 1 while subCode_2, the selected one on line 2 
$line_id = 1; 
foreach($conn->query($student_sql) as $row1){ 
    $fullName=strtoupper($row1['firstName']." ".$row1['middleName']." ".$row1['surName']); 
    $stud_id = $row1['studentID']; 
    echo "<tr><td></td><td>".$row1['studentID']."</td><td>".$fullName."</td><td>".$row1['classAdmitted']."</td><td class='scol'><select name='subCode_$line_id'><option value='agric'>Agric Science</option><option value='bio'>Biology</option><option value='bus'>Business Study</option><option value='crk'>Christian Religious Study</option><option value='econs'>Economics</option><option value='eng'>English Language</option><option value='fst'>Food Science</option><option value='intech'>Introductory Technology</option><option value='maths'>Mathematics</option><option value='soc'>Social Study</option></select></td><td class='scol'><input name='ca1_$line_id' type='number' class='sub' value='0'></td><td class='scol'><input name='ca2_$line_id' type='number' class='sub' value='0'></td><td class='scol'><input type='number' name='ca3_$line_id' class='sub' value='0'></td><td class='scol'><input type='number' name='ca4_$line_id' class='sub' value='0'></td></tr><input name='StudentID_$line_id' value='".$row1['studentID']."' type='hidden'/><input name='classAdmitted_$line_id' value='".$row1['studentID']."' type='hidden'/>"; 
    $line_id++; 
} 
//Here you add a hidden field that contains the number of lines 
echo "<input name='line_count' value='$line_id' type='hidden'/>"; 

echo "</tr></table>"; 
echo "<div id='btmbar'>"; 
printf('Total Number of Students: %d', $conn->affected_rows); 
echo "<br><input id='btn1' type='submit' name='add' value='Get TOTAL'><input id='btn2' type='submit' value='Submit Student Records' name='submit'>"; 
echo "</div></div></form>"; 

之后,你会得到关于存储在隐藏字段的行数的信息,循环做,每位形式的所有值线和存储他们...你的代码的第二部分应该像

if(isset($_POST['submit'])){ 
    $line_count = $_POST['line_count']; 
    for($i=1; $i<$line_count;$i++){ 

     $term = $_POST['term']; 
     $session = $_POST['session']; 
     $student_ID = $_POST['studentID_'.$id]; 
     $className = $_POST['classAdmitted_'.$id]; 
     $subjects = $_POST['subCode_'.$id]; 
     $ca1 = $_POST['ca1_'.$id]; 
     $ca2 = $_POST['ca2_'.$id]; 
     $ca3 = $_POST['ca3_'.$id]; 
     $ca4 = $ca1 + $ca2 + $ca3; 
     $student_ta_id="$stud_id"."$session"."$className"."$term"."$subjects"; 
     $sql = "INSERT INTO `sch`.terminal_assessment (student_ta_id, session, className, term, subjectNames, ca1, ca2, exam, total) VALUES('$student_ta_id', '$session', '$className', '$term', '$subjects', '$ca1', '$ca2', '$ca3', '$ca4')"; 
     $insert = $conn->query($sql); 
     if($insert === True){ 
      echo "Record inserted successfully". "<br>"; 
     }else{ 
      echo "Error Unable to Insert Record".die($conn->error); 
     } 
    } 
} 
$conn->close(); 
+0

谢谢..您的代码为我工作。但为了解决我遇到的问题,我只需做一些小的改动。一遇到其他挑战,我就会回到2u。另外,我很高兴你爱耶稣太 – LoveJESUS

+0

伟大..感受免费...只是希望我能够处理它:) –

+0

这个答案似乎有一个严重的SQL注入漏洞。请注意在这里回答SQL的问题,因为我们不希望通过积极推销糟糕的安全做法。 – halfer

相关问题