尝试从 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 表的主要内容,如果未能解决你的问题,请参考以下文章

jeecgboot-online在线开发2

jeecgboot-online在线开发2

使用 SQL 从数据源生成 html 标记

PHP sql插入无法从html表单工作[重复]

将日期从 HTML 表单传递到 servlet 到 SQL 数据库

使用 sqoop 从 sql server 导入表时出错