从 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:<form>
不能成为 <table>
的子级。
永远不要存储纯文本密码!请使用 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
文件中。在您的操作中使用<?php echo $_SERVER['PHP_SELF']; ?>
,将使页面发布到自身,这意味着它将发布到您的form.php
文件,而不是processform.php
。
将您的表单操作更改为使用processform.php
,然后您应该点击查询并将数据获取到您的数据库中。
也许你可以去这里阅读一下全局 php 变量:
http://php.net/manual/en/language.variables.superglobals.php希望对你有帮助:)
【讨论】:
为帮助干杯。 没问题。而且我肯定会遵循@jay-blanchard 的建议来修复代码中的 SQL 注入缺陷。稍后你会感谢我们的:)以上是关于从 PHP/HTML 表单更新 SQL的主要内容,如果未能解决你的问题,请参考以下文章
从 Access 插入/更新链接的 SQL Server 表