Php:任何用户输入字段和提交按钮仅更新最后一个字段

时间:2015-06-03 11:55:46

标签: php html mysql

请原谅我,如果我搞砸了......第一次发帖。

问题:

我希望它遍历数据库,然后:

  • 分配备注
  • 状态(单选按钮)
  • 提交按钮

对于表中列出的每个用户。

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;

我是编程和使用堆栈交换的新手,所以请随时告诉我任何我做错的事情。我担心它的一些简单但我无法绕过它。

1 个答案:

答案 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凭据,代码就可以正常工作