Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从HTML表中插入单行数据_Php_Mysql - Fatal编程技术网

Php 从HTML表中插入单行数据

Php 从HTML表中插入单行数据,php,mysql,Php,Mysql,我有一些这样的示例数据,它是从数据库生成的 我只想通过“分配”按钮在相应的行中插入一行值 例如,通过单击第一行分配按钮,我想插入“CSE412”、“人工智能”、“3” 我的问题是,当我单击任意一个“分配”按钮时,从数据库生成的所有数据都会插入到数据库中。 我的尝试是 <?php $stmt = $conn->prepare("SELECT * FROM tbl_course"); $stmt->execute(); $i = 0; while(

我有一些这样的示例数据,它是从数据库生成的

我只想通过“分配”按钮在相应的行中插入一行值 例如,通过单击第一行分配按钮,我想插入“CSE412”、“人工智能”、“3” 我的问题是,当我单击任意一个“分配”按钮时,从数据库生成的所有数据都会插入到数据库中。 我的尝试是

<?php
    $stmt = $conn->prepare("SELECT * FROM tbl_course");
    $stmt->execute();
    $i = 0;
    while($row = $stmt->fetch()) {
      $student_id = $_GET['id'];
      $course_id  = $row['id'];
?>
<form class="" action="" method="post">
<tr style="border-top: 1px solid #32383e;">
  <td><?php echo ++$i; ?></td>
  <td><?php echo $row['course_code']; ?></td>
  <td><?php echo $row['course_title']; ?></td>
  <td><?php echo $row['credit']; ?></td>
  <td>
    <?php
      if ($_SERVER["REQUEST_METHOD"]=="POST"){
        $sql = "INSERT INTO tbl_course_enroll (student_id, course_id) VALUES ('$student_id', '$course_id')";
        $conn->exec($sql);
      }
    ?>
        <input type="submit" name="" value="Assign" class="btn btn-primary">
    </form>
  </td>
</tr>
<?php
  }
  $conn = null;
?>


首先,将
if($\u SERVER[“REQUEST\u METHOD”]==“POST”){…}
块置于
while()
循环之外,因为它会导致重复的
INSERT
操作。现在的问题是,如何在单击相应的分配按钮后插入特定的行数据?以下是解决方案:

  • 按以下方式更改表单的
    操作
    属性

    <form ... action="?id=<?php echo $student_id; ?>&cid=<?php echo $course_id; ?>" ...>
    
    if (isset($_POST['assign'])){
        $stmt = $conn->prepare("INSERT INTO tbl_course_enroll (student_id, course_id) VALUES (?,?)");
        $stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
        $stmt->bindParam(2, $_GET['cid'], PDO::PARAM_STR, 12);
        if($stmt->execute()){
            // INSERT operation successful
        }
    }
    
  • 当用户点击Assign按钮时,按以下方式存储相应的行详细信息

    <form ... action="?id=<?php echo $student_id; ?>&cid=<?php echo $course_id; ?>" ...>
    
    if (isset($_POST['assign'])){
        $stmt = $conn->prepare("INSERT INTO tbl_course_enroll (student_id, course_id) VALUES (?,?)");
        $stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
        $stmt->bindParam(2, $_GET['cid'], PDO::PARAM_STR, 12);
        if($stmt->execute()){
            // INSERT operation successful
        }
    }
    
这是完整的代码

<?php
    if (isset($_POST['assign'])){
        $stmt = $conn->prepare("INSERT INTO tbl_course_enroll (student_id, course_id) VALUES (?,?)");
        $stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
        $stmt->bindParam(2, $_GET['cid'], PDO::PARAM_STR, 12);
        if($stmt->execute()){
            // INSERT operation successful
        }
    }

    $stmt = $conn->prepare("SELECT * FROM tbl_course");
    $stmt->execute();
    $i = 0;
    while($row = $stmt->fetch()) {
        $student_id = $_GET['id'];
        $course_id  = $row['id'];
?>
    <form class="" action="?id=<?php echo $student_id; ?>&cid=<?php echo $course_id; ?>" method="post">
        <tr style="border-top: 1px solid #32383e;">
            <td><?php echo ++$i; ?></td>
            <td><?php echo $row['course_code']; ?></td>
            <td><?php echo $row['course_title']; ?></td>
            <td><?php echo $row['credit']; ?></td>
            <td>
                <input type="submit" name="assign" value="Assign" class="btn btn-primary">
            </td>
        </tr>
    </form>
<?php
    }
  $conn = null;
?>


@ShafikShaon,这里我假设student\u id列为整数类型,course\u id列为字符串类型。出现问题时,不会将数据重定向到另一个page@ShafikShaon你说的数据重定向到另一个页面是什么意思?表单将把数据提交到它当前所在的任何页面。假设我的表单在course.php文件中,我从index.php转到course.php文件。表单提交后,它将自动转到索引。php@ShafikShaon从哪个页面进入course.php页面并不重要。但是,如果整个表单和相应的处理逻辑都在course.php页面中,那么请按照以下方式更改表单的
action
属性,
action=“course.php?sid=&cid=”