我是php编程的新手。我有些困惑,无法在线找到任何有用的信息。我正在尝试从头开始构建学校管理系统。我需要的是从数据库中获取所有“提供的课程”,并将其放在表格中,并允许学生直接从行中添加课程。我该怎么办?
我创建了一个表格和一个输入,学生可以在其中输入课程编号并注册课程。而且效果很好。但是我觉得这不切实际。
这是我的代码
<?php
session_start();
// include("config.php");
include("functions.php");
// $sql="SELECT `course_num`, `professors`.`name` AS pName, `courses`.`name`AS cName , max_students FROM `courses`, `student_courses`,`professors` WHERE `professors`.`id`=`courses`.`professor_teaching` AND `student_id`= '".$_SESSION['student_id']."'";
// $result = mysqli_query($link, $sql);
$result = viewAllCourses();
?>
<form method="post" action="functions.php">
<table>
<tr>
<th><label>Course No.</label></th>
<th><label>Course Name</label></th>
<th><label>Professor</label></th>
<th><label>Max. Students</label></th>
<th><label>Action</label></th>
</tr>
<?php
if(mysqli_num_rows($result)){
while ($row = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><label name="course_num"><?php echo $row['course_num'];?>
<input type="hidden" name ="coursenumber" value=<?php $row['course_num']?>>
</label></td>
<td><label><?php echo $row['cName'];?></label>
</td>
<td><label><?php echo $row['pName']; ?></label></td>
<td><label><?php echo $row['max_students']; ?></label></td>
<td><input type="submit" name="add" value="add"></td>
</tr>
</form>
</table>
<?php
}
}
?>
,然后在functions.php
中,我有以下代码:
if (isset($_GET['add'])) {
$link = conn();
echo "TST";
exit;
$courseNum= $_POST['coursenumber'];
$record = mysqli_query($link, "INSERT INTO `student_courses`
(`student_id`, `course_id_num`)
VALUES ('".$_SESSION['student_id']."', '$courseNum')");
}
但是它什么也没做。
我尝试为course_number添加一个输入标签,然后从那里传递它。但这是行不通的。正确的方法是什么?
答案 0 :(得分:3)
所有行中的输入名称相同。提交表单时,$_POST['coursenumber']
只是表中的最后一个课程号,而不是用户单击的那个。您可以将课程号置于add
按钮的值中,而不是隐藏的输入中。当表单具有多个提交按钮时,该值来自单击的那个。
您需要确定</form>
和</table>
标签的顺序,以便它们正确嵌套。
<?php
if(mysqli_num_rows($result)){
while ($row = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><label name="course_num"><?php echo $row['course_num'];?>
</label></td>
<td><label><?php echo $row['cName'];?></label>
</td>
<td><label><?php echo $row['pName']; ?></label></td>
<td><label><?php echo $row['max_students']; ?></label></td>
<td><input type="submit" name="add" value="<?php echo $row['course_num'];?>"></td>
</tr>
</table>
</form>
<?php
}
}
?>
此外,由于您要使用method="POST"
提交表单,因此按钮将是$_POST['add']
,而不是$_GET['add']
。
您应该使用准备好的语句来防止SQL注入。
if (isset($_POST['add'])) {
$link = conn();
$courseNum= $_POST['add'];
$stmt = mysqli_prepare("INSERT INTO student_courses (student_id, course_id_num) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ii", $_SESSION['student_id'], $courseNum);
mysqli_stmt_execute($stmt);
}
如果要传递多个字段,则可以在每行中放置一个带有多个隐藏输入的单独表单,而不是将整个表格都变成表单。
<?php
if(mysqli_num_rows($result)){
while ($row = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><label name="course_num"><?php echo $row['course_num'];?>
</label></td>
<td><label><?php echo $row['cName'];?></label>
</td>
<td><label><?php echo $row['pName']; ?></label></td>
<td><label><?php echo $row['max_students']; ?></label></td>
<td><form action="functions.php" method="post">
<input type="hidden" name="coursenumber" value="<?php echo $row['course_num'];?>">
<niput type="hidden" name="something" value="<?php echo $row['something'];?>">
<input type="submit" name="add" value="add">
</form></td>
</tr>
</table>
<?php
}
}
?>
然后functions.php
脚本可以使用$_POST['course_num']
和$_POST['something']
来获取这些参数。