从 PHP/HTML 表单更新 SQL

Posted

技术标签:

【中文标题】从 PHP/HTML 表单更新 SQL【英文标题】:updating SQL from PHP/HTML form 【发布时间】:2017-03-16 16:50:09 【问题描述】:

我正在尝试使用表单中的信息更新表格。我有一个在同一数据库中的表的不同文件中工作。我的版本只是不会将数据输入表中。我觉得我已经正确编辑/复制了它,我是个菜鸟,感觉可能有一个明显的答案,但我就是看不到。我检查了类似的问题,但没有运气。

<?php include "connect.php";?>

<!DOCTYPE html>
<html lang="en">


<head>
    <meta http-equiv="Content-Type" content= "text/html; charset=UTF-8"/> 
    <title>Blooming Flowers - Registration</title>
    <link rel="stylesheet" href="css/style.css" type="text/css">

</head>


<?php include "header.php"; ?>
<?php include "form.php"; ?>
<body>



        <?php include "processform.php" ; ?>

        </td>

        </tr></table>


    <?php include "footer.php"; ?>





</body>

我可以将问题缩小到我的 form.php 文件或 processform.php 文件,但不确定它们为什么不起作用

form.php

        <td>

        <div class="form">
        <form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <fieldset>

                <h3>Personal Details</h3><br>

                <label>Title:

                    <select name="titles">
                        <option value="mr">Mr.</option>
                        <option value="mrs">Mrs.</option>
                        <option value="ms">Ms.</option>
                        <option value="Dr">Dr.</option>
                    </select></label>

                    <p>
                        <label for="firstName"> First Name:</label>
                        <input type="text" name="user_first" id="user_first" size="40" maxlength="60" required/>
                    </p>

                    <p>
                        <label for="lastName">Last Name:</label>
                        <input type="text" name="user_last" id="user_last" size="40" maxlength="60" required/>
                    </p>



                    <p>
                        <label for="password"> Password:</label>
                        <input type="password" name="user_pass" id="user_pass" size="40" maxlength="60" required/>
                    </p>

                    <p>
                        <label for="confirmPass"> Confirm Password:</label>
                        <input type="password" name="" id="" size="40" maxlength="60" required/>
                    </p>

            </fieldset><!--name fieldset closed-->

            <fieldset>

                <h3> Delivery Details</h3><br>

                    <p>
                        <label for="streetAddress"> Street:</label>
                        <input type="text" name="user_street" id="user_street" size="40" maxlength="60" required/>
                    </p>

                    <p>
                        <label for="city"> City:</label>
                        <input type="text" name="user_city" id="user_city" size="40" maxlength="60" required/>
                    </p>

                    <p>
                        <label for="postcode"> Postcode:</label>
                        <input type="text" name="user_post" id="user_post" size="40" maxlength="60" required/>
                    </p>

                    <p>
                        <label for="email"> E-Mail:</label>
                        <input type="email" name="user_email" id="user_email" size="40" maxlength="60" required/>
                    </p>

                    <p>
                        <label for="confirmEmail"> Confirm E-Mail:</label>
                        <input type="email" name="" id="" size="40" maxlength="60" required/>
                    </p>


            </fieldset><!-- fieldset closed-->



            <br><input class="link-button-pagemenu" name="submit" type="submit" value="Register">

        </form><!--form closed-->

    </div><!-- form div closed-->

processform.php

<?php


if (isset($_POST['submit']))

  $user_first=      '';  
  $user_last =      '';
  $user_pass =      '';
  $user_street =    '';
  $user_city =      '';
  $user_post =      '';
  $user_email =     '';

  if (!empty($_POST['user_first']))
  $user_first = $_POST['user_first'];
  
  if (!empty($_POST['user_last']))
    $user_last = $_POST['user_last'];
  

  if (!empty($_POST['user_pass']))
$user_pass = $_POST['user_pass'];
  

  if (!empty($_POST['user_street']))
   $user_street = $_POST['user_street'];
  

   if (!empty($_POST['user_city']))
$user_city = $_POST['user_city'];
  

   if (!empty($_POST['post']))
$user_post = $_POST['user_post'];
  

   if (!empty($_POST['user_email']))
$user_email = $_POST['user_email'];
  

  $query = "insert into flower (user_first, user_last, user_pass, user_street, user_city, user_post, user_email) 
values('$user_first', '$user_last',     '$user_pass', '$user_street', '$user_city', '$user_post', '$user_email')";

  mysqli_query($connect, $query);



?>

我的数据库表名为flower,并且有 用户 ID (PK), 用户优先, 用户最后一个, 用户通行证, 用户街, 用户城市, 用户帖子, 用户电子邮件,

【问题讨论】:

为什么form.php放在body标签外面? "" - 要更新表,您需要使用 UPDATE。但是您谈论插入;这里有些不匹配。 HTML Stickler:&lt;form&gt; 不能成为 &lt;table&gt; 的子级。 永远不要存储纯文本密码!请使用 PHP 的 built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,您可以使用 password_hash() compatibility pack。在散列之前,请确保您 don't escape passwords 或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。 Little Bobby 说 your script is at risk for SQL Injection Attacks. 了解 prepared 对 MySQLi 的陈述。即使escaping the string 也不安全! Don't believe it? 【参考方案1】:

您基本上不会将您的数据发布到您的processform.php 文件中。在您的操作中使用&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;,将使页面发布到自身,这意味着它将发布到您的form.php 文件,而不是processform.php

将您的表单操作更改为使用processform.php,然后您应该点击查询并将数据获取到您的数据库中。

也许你可以去这里阅读一下全局 php 变量:

http://php.net/manual/en/language.variables.superglobals.php

希望对你有帮助:)

【讨论】:

为帮助干杯。 没问题。而且我肯定会遵循@jay-blanchard 的建议来修复代码中的 SQL 注入缺陷。稍后你会感谢我们的:)

以上是关于从 PHP/HTML 表单更新 SQL的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 html 表单更新 sql 表

VB.net更新SQL命令

从 Access 插入/更新链接的 SQL Server 表

sql更新/修改表单的数据

更新 SQL Server 数据库时如何更新 MS Access 表单?

在 MS Access 数据表子表单中导航和更新