请原谅我,如果我搞砸了......第一次发帖。
问题:
我希望它遍历数据库,然后:
对于表中列出的每个用户。
PBM:随时我尝试对任何用户进行更改时,它只会更新桌面上的最后一位用户并且不一致地更新笔记。
我只是想让它更新表中该行中的1个特定用户。
如果还有更多 有效或预先包装的方式这样做我很满意。我会 还是想弄清楚我做错了什么。我知道这是 目前sql易受攻击的代码,但为了我的简单, 输入没有消毒。
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css"
</head>
<h1>In Out Board</h1>
<?php
$conn = new mysqli('xxxx', 'xxx', 'xxx', 'xxxxx');
if ($conn->connect_error) {
die("connection failed: " . $conn->connect_error);
}
if (isset($_GET['submit'])) {
$idkey = $_GET['idkey'];
$Status = $_GET['status'];
$Notes = $_GET['notes'];
$query = "update InOutUsers set status='$Status', Notes='$Notes'where idkey='$idkey'";
$result = mysqli_query($conn, $query) or die(mysqli_error());
}
$sql = "SELECT Name, Status, Notes, idkey FROM InOutUsers";
$result = $conn->query($sql);
echo '<table><thead><form>';
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo '<tr>';
echo '<td>' . $row["Name"] . '</td>';
echo '<td>' . $row["Status"] . '</td>';
echo '<td>' . $row["Notes"] . '</td>';
echo "<input type='hidden' name='idkey' value='{$row['idkey']}' />";
echo '
<td style="width: 100px"><input type="radio" name="status" value="In" >In
<input type="radio" name="status" value="Out" >Out </td>';
echo '<td>Status: <input type="text" name="notes" placeholder="Where are you going?"></td>';
echo '<td>';
echo "<input type='submit' name='submit' value='update'/>";
echo '</td>';
echo '</tr>';
echo '<br>';
}
}
echo '</form></thead></table>';
这是我的sql:
CREATE TABLE IF NOT EXISTS `InOutUsers` (
`Name` text NOT NULL,
`Status` varchar(3) NOT NULL,
`Notes` text,
`idkey` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
我是编程和使用堆栈交换的新手,所以请随时告诉我任何我做错的事情。我担心它的一些简单但我无法绕过它。
答案 0 :(得分:0)
首先,我想欢迎您来到Stackoverflow和编程世界。 请在下面找到工作代码
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css"
</head>
<h1>In Out Board</h1>
<?php
$conn = new mysqli('xxxx', 'xxxx', 'xxxx', 'xxxx');
if ($conn->connect_error) {
die("connection failed: " . $conn->connect_error);
}
if (isset($_GET['submit'])) {
$idkey = $_GET['idkey'];
$Status = $_GET['status'];
$Notes = $_GET['notes'];
$query = "update InOutUsers set status='$Status', Notes='$Notes'where idkey='$idkey'";
$result = mysqli_query($conn, $query) or die(mysqli_error());
}
$sql = "SELECT Name, Status, Notes, idkey FROM InOutUsers";
$result = $conn->query($sql);
echo '<table><thead>';
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo '<form><tr>';
echo '<td>' . $row["Name"] . '</td>';
echo '<td>' . $row["Status"] . '</td>';
echo '<td>' . $row["Notes"] . '</td>';
echo "<input type='hidden' name='idkey' value='{$row['idkey']}' />";
echo '
<td style="width: 100px"><input type="radio" name="status" value="In" >In
<input type="radio" name="status" value="Out" >Out </td>';
echo '<td>Status: <input type="text" name="notes" placeholder="Where are you going?"></td>';
echo '<td>';
echo "<input type='submit' name='submit' value='update'/>";
echo '</td>';
echo '</tr></form>';
echo '<br>';
}
}
echo '</thead></table>';
您的代码中的主要问题是,您只有一个表单,并且您正在打印所有记录,因此IDkey值继续使用最后一个记录idkey值进行更新,结果只有最后一条记录正在更新
我在循环中添加了<form>
标记,这将创建不同的表单并更新特定记录。
只需添加您的Mysql凭据,代码就可以正常工作