使用php从文本框值更新MySql表[已关闭]

koaltpgm  于 2023-02-18  发布在  PHP
关注(0)|答案(2)|浏览(137)

这个问题似乎与help center中定义的范围内的编程无关。
2天前关闭。
Improve this question
我有一个欢迎页面,它使用已登录用户ID的所有字段的值填充用户表中的文本框。我只想做的是,如果点击"更新值"表单按钮并返回或停留在同一页面上,则使用基于显示其详细信息的用户的ID的更新语句将这些值写回到表中。在这个阶段没有数据验证是必需的。如果在数据库中的两个字段被命名为gas_scelec_sc,我将如何编码它?文本框被填充使用$_ SESSION ["elec_sc"]= $elec_sc;当用户登录时。
不幸的是,我没有太多的php知识,一直在使用剪切和粘贴从其他例子得到这么远,我看了类似的职位,但没有看到一个回答这个问题。

iklwldmw

iklwldmw1#

PDO

有关使用PDO更新的信息,请访问此站点:https://phpdelusions.net/pdo_examples/update
它提供了以下示例:

$sql = "UPDATE users SET name=?, surname=?, sex=? WHERE id=?";
$stmt= $pdo->prepare($sql);
$stmt->execute([$name, $surname, $sex, $id]);

基本上:

  • 它会创建一个名为$sql的字符串
  • 字段名被分配给?,它是参数化查询的占位符
  • 制备$stmt
  • 然后通过传递实际参数[$name, $surname, $sex, $id]的数组来执行

这与您需要做的事情非常相似,但是您需要将字段名分别替换为gas_scelec_sc,并将参数值替换为您收到的值。
您还可以传递命名参数,请参阅同一源代码中的以下示例:

$data = [
    'name' => $name,
    'surname' => $surname,
    'sex' => $sex,
    'id' => $id,
];
$sql = "UPDATE users SET name=:name, surname=:surname, sex=:sex WHERE id=:id";
$stmt= $pdo->prepare($sql);
$stmt->execute($data);

注意,这里我们在查询中使用了:<paramname>的语法,在传递的$data中使用了键值对。
出于安全原因,您需要使用参数化查询,而不是硬编码值(搜索SQL injection以获取更多信息)

如何继续

您可以创建HTML表单

<form action="/the/url/to/the/backend" method="POST">
    <input type="hidden" name="id" value="<?php echo '123'; ?>"
    <label for="gas_sc">
        <input name="gas_sc" id="gas_sc" type="text">
    </label><br>
    <label for="elec_sc">
        <input name="elec_sc" id="elec_sc" type="text">
    </label><br>
    <input type="submit" value="click on me!">
</form>
  • 对于action,您需要提供有效的URL
  • method也可以是GET
  • 标签使form看起来更整洁
  • labelfor属性指定它应该与什么控件纠缠(通过id
  • inputname属性指定input的值将在提交form时发送到服务器
  • submitinput是负责提交表单的按钮

如何收集值

如果您有属性白名单,例如:

$attributes = ['gas_sc', 'elec_sc'];

然后你可以收集如下的值:

$data = ['id' => $_POST["id"]];
$params = ["id=:id"];
foreach ($attributes as $attribute) {
    $params[]="{$attribute}=:{$attribute}";
    $data[$attribute] = $_POST[$attribute] ?? null;
}
$sql = "UPDATE users SET " . implode(",", $params) . " WHERE id=:id";
$stmt=$pdo->prepare($sql);
$stmt->execute($data)

我们初始化$data$params,循环$attributes,每次向它们添加一个paramname=:paramvalue和一个dataname =〉datavalue,然后动态生成查询,方法是将$params内爆为逗号分隔的赋值,并传递$data
如果你想动态地改变它(但是要小心),那么你可以像这样构建$attributes

$attributes = array_keys($_POST);

同样,要小心,防止任何可能的恶意输入造成伤害。然而,如果不需要验证,正如您所描述的,那么您可以执行上述操作。

v1uwarro

v1uwarro2#

它很难查看没有代码的问题,请粘贴您的代码和格式,因为它有点难以帮助您在盲目。
另一方面,告诉我们您使用的是PDO还是mysqli(出于安全考虑,您应该使用PDO)。
无论如何,我读到的,你应该使用$_POST值从文本框中获得值,也可以使用文本框的名称(在html中)。
应该是这样的:

$firstTextbox = $_POST['name_textbox_html`];
$secondTextbox = $_POST['name_textbox2_html'];

一旦你得到了这些值,你应该能够让html表单采取你想要的任何行动,并使用PDO或mysqli在SQL语法中使用这些变量,通过将它们作为参数传递给你执行更新的函数,用你用来保存文本框值的变量替换你通常放在更新中的手动数据。
通过执行echo $firstTextbox$secondTextbox,可以打印保存文本框值的变量的值

相关问题