我在数据库中有一个表,当想要拒绝或接受某人的应用程序时,我只需选择单选按钮并将值发送到数据库中的表。
但问题是该值是分配给新行而不是特定学生ID。这是我的表,因为你看到有2个新行获得另一个id。这是我的代码和表格:
<?php
$status = $_POST["status"];
$connect = mysqli_connect("localhost","root","admin","form");
if (!$connect) {
die('Connect error:'. mysqli_error());
}
$result = mysqli_query($connect, "INSERT INTO students (status) VALUES ('$status') ");
?>
idstudents |fname | lname| age | nationality | status
.....................................................
1 |Tom | Bern | 23 | American |
2 |Lily | Wayne| 24 | British |
3 |NULL | NULL | NULL| NULL | accepted
答案 0 :(得分:0)
INSERT
语句用于...插入新行。您需要的是一个UPDATE
语句,用于将值应用于您要使用idstudents
选择的某一行。
$status = $_POST["status"];
$studentid = $_POST["studentid"];
...
$result = mysqli_query($connect, "UPDATE students SET status = '$status' WHERE idstudents = $studentid;");
另外,在使用用户输入的$ _POST(或其他)值时务必小心,如果其他人将使用此服务,您可能需要清理它们在插入之前,以避免潜在的安全漏洞。
答案 1 :(得分:0)
要进行更新,您需要UPDATE语句,不要忘记在表单上添加student_id
。考虑这个例子:(同一页面处理)。
<?php
$students = array();
$link = new mysqli('localhost', 'username', 'password', 'database');
if(isset($_POST['submit'], $_POST['status'])) {
$status = $_POST['status'];
foreach($status as $student_id => $status_value) {
$stmt = $link->prepare('UPDATE students SET status = ? WHERE idstudents = ?');
$stmt->bind_param('ss', $status_value, $student_id);
$stmt->execute();
}
}
$query = mysqli_query($link, 'SELECT * FROM students');
while($row = $query->fetch_assoc()) {
$students[] = $row;
}
?>
<form method="POST" action="">
<?php foreach($students as $key => $value): ?>
<fieldset>
<p>
Name: <?php echo $value['fname'] . " " . $value['lname']; ?><br/>
Status: <b><?php echo ($value['status'] != '') ? $value['status'] : 'N/A'; ?></b><br/>
<input type="radio" name="status[<?php echo $value['idstudents']; ?>]" value="accepted" /> Accepted
<input type="radio" name="status[<?php echo $value['idstudents']; ?>]" value="rejected" /> Rejected
</p>
</fieldset>
<?php endforeach; ?>
<input type="submit" name="submit" value="Update" />
</form>
注意:由于您现在使用的是mysqli,请利用参数化查询。不要在查询中直接使用$ _POST值。