尝试从 html 表单更新 sql 表
Posted
技术标签:
【中文标题】尝试从 html 表单更新 sql 表【英文标题】:Trying to UPDATE sql table from html form 【发布时间】:2021-09-04 06:57:52 【问题描述】:我完全没有资格尝试我正在尝试的东西,但直到现在我似乎都在按照自己的方式进行。我的函数有一个问题,似乎在单击表单提交按钮时没有调用它。抱歉,如果格式不正确。请看下面我的代码,谢谢
函数.php
// UP DATE INFO
function settingsUpdate()
// call these variables with the global keyword to make them available in function
global $db;
// receive all input values from the form. Call the e() function
// defined below to escape form values
$usernameU = e($_POST['name']);
$numberU = e($_POST['number']);
$id = (isset($_SESSION['user']['id']));
$error = '0';
if($error == 0)
$query = "UPDATE users SET 'username' 'number' WHERE id==$id
VALUES('$usernameU', '$numberU')";
mysqli_query($db, $query);
echo '<div class="alert alert-primary" role="alert">User Settings Updated Successfully.</div>';
else
?><div class="alert alert-danger" role="alert">
<p class="text-center"><strong>Oh snap!</strong> Something went wrong, contact us if you think that's wrong.</p>
</div>,<?php
Settings.php
<!--begin::Form-->
<form id="settings" class="form" method="post">
<!--begin::Card body-->
<div class="card-body border-top p-9">
<!--begin::Input group-->
<div class="row mb-6">
<!--begin::Label-->
<label class="col-lg-4 col-form-label required fw-bold fs-6">Full Name</label>
<!--end::Label-->
<!--begin::Col-->
<div class="col-lg-8">
<!--begin::Row-->
<div class="row">
<!--begin::Col-->
<div class="col-lg-6 fv-row">
<input type="text" name="username" class="form-control form-control-lg form-control-solid mb-3 mb-lg-0" placeholder="Full Name" value="<?php echo $username; ?>" />
</div>
<!--end::Col-->
</div>
<!--end::Row-->
</div>
<!--end::Col-->
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="row mb-6">
<!--begin::Label-->
<label class="col-lg-4 col-form-label fw-bold fs-6">
<span class="required">Contact Number</span>
<i class="fas fa-exclamation-circle ms-1 fs-7" data-bs-toggle="tooltip" title="Phone number must be active"></i>
</label>
<!--end::Label-->
<!--begin::Col-->
<div class="col-lg-8 fv-row">
<input type="number" name="number" class="form-control form-control-lg form-control-solid" placeholder="Phone number" value="<?php echo $_SESSION['user']['number']?>" />
</div>
<!--end::Col-->
</div>
<!--end::Input group-->
</div>
<!--end::Card body-->
<!--begin::Actions-->
<div class="card-footer d-flex justify-content-end py-6 px-9">
<button type="submit" class="btn btn-primary" id="settingsUpdate">Save Changes</button>
</div>
<!--end::Actions-->
</form>
<!--end::Form-->
【问题讨论】:
你能发布完整的 settings.php 文件吗?我们看不到 settings.php 对通过表单提交的数据做了什么... settings.php 只是整个页面,并且包含了 functions.php,因此应该可以正常工作,否则它就像 2000 行 向我们展示您捕获发布数据并对其进行处理的代码。函数settingsUpdate
在哪里被调用?对于您的查询,请考虑以下事项: 1. 它应该是 UPDATE table
SET field = value WHERE 条件 2. 如果您将变量直接放在查询中,则它对 sql 注入开放,请改用准备好的语句。 3.考虑依赖注入而不是全局变量
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
【参考方案1】:
在表单元素中添加 action 属性
<form id="settings" class="form" method="post" action="Functions.php">
......
</form>
在你的 Functions.php 中创建一个类并将你的函数放入
$settingUp = new SettingUp($_POST['username'], $_POST['number']);
$settingUp->settingsUpdate();
class SettingUp
protected $username;
protected $number;
function __construct($username, $number)
$this->username = $username;
$this->number = $number;
function settingsUpdate()
$usernameU = $this->username;
$numberU = $this->number;
$id = (isset($_SESSION['user']['id']));
//complete the rest of your code
您还可以在 settings.php 中包含 Functions.php 并在提交按钮中提供名称
<?php
include('Functions.php');
?>
<form id="settings" class="form" method="post" action="">
......
<button type="submit" class="btn btn-primary" id="settingsUpdate" name="settingsUpdate">Save Changes</button>
</form>
在您的 Function.php 中删除该函数并像这样修改代码
if(isset($_POST['settingsUpdate'])
$username = $_POST['username'];
$number = $_POST['number'];
//add the rest of your code
【讨论】:
以上是关于尝试从 html 表单更新 sql 表的主要内容,如果未能解决你的问题,请参考以下文章