如何将值从传递到SQL查询

时间:2019-05-09 09:06:30

标签: php html mysql

我是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添加一个输入标签,然后从那里传递它。但这是行不通的。正确的方法是什么?

1 个答案:

答案 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']来获取这些参数。