数据未更新到数据库中[关闭]
Posted
技术标签:
【中文标题】数据未更新到数据库中[关闭]【英文标题】:Data is not updated into database [closed] 【发布时间】:2019-05-13 15:49:45 【问题描述】:我有一个用于将数据插入数据库的表单和一个用于显示来自同一数据库的记录的表。我在显示的每条记录上都有更新按钮。
当我点击它时,来自数据库的数据会显示在表单的每个输入中;我已经修改了我想要的信息,然后单击表单中的 Update 按钮。
问题是我修改的数据在数据库中没有更新,也没有显示在我页面的表格中。
我的index-admin.php
文件:
<?php
include("functions.php");
//fetch record to be updates
if(isset($_GET['update']))
$id = $_GET['update'];
$update = true;
$query="SELECT * FROM utilizatori WHERE id_user= $id";
$record = mysqli_query($conn,$query);
if (count($record) == 1 )
$rec = mysqli_fetch_array($record);
$id=$rec['id_user'];
$nume=$rec['nume'];
$prenume=$rec['prenume'];
$email=$rec['email'];
$pwd=$rec['pass'];
$rol=$rec['rol'];
?>
我的表格:
<form method="POST" action="functions.php">
<input type="hidden" name="id" value="<?php echo $id; ?> ">
<div class="input-group">
<label>Nume</label>
<input type="text" name="nume" value="<?php echo $nume; ?>">
</div>
<div class="input-group">
<label>Prenume</label>
<input type="text" name="prenume" value="<?php echo $prenume; ?>" >
</div>
<div class="input-group">
<label>Email</label>
<input type="text" name="email" value="<?php echo $email; ?> ">
</div>
<div class="input-group">
<label>Password</label>
<input type="text" name="pass" value="<?php echo $pwd; ?> ">
</div>
<div class="input-group">
<label>Rol</label>
<input type="text" name="rol" value="<?php echo $rol; ?> " >
</div>
<div class="input-group">
<?php if ($update == false): ?>
<button type="submit" name="save" class="btn">Save</button>
<?php else: ?>
<button type="submit" name="update" class="btn">Update</button>
<?php endif ?>
</div>
</form>
我的functions.php
文件:
if(isset($_POST['update']))
$nume = mysqli_real_escape_string($conn,$_POST['nume']);
$prenume = mysqli_real_escape_string($conn,$_POST['prenume']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$pwd = mysqli_real_escape_string($conn, $_POST['pass']);
$rol = mysqli_real_escape_string($conn, $_POST['rol']);
$query="UPDATE utilizatori
SET nume='$nume',
prenume='$prenume',
email='$email',
pass='$pwd',
rol='$rol'
WHERE id_user=$id;";
mysqli_query($conn,$query);
$_SESSION['msg'] = 'Date actualizate!';
header('Location:index-admin.php');
【问题讨论】:
警告!您对 SQL 注入攻击完全开放。使用parameterized prepared statements,而不是直接在查询中使用未转义的用户数据或手动转义它。 您尝试过什么调试问题?为什么不检查运行更新查询时发生的任何错误? 您的functions.php
引用$_POST
超全局,而您的index-admin.php
引用$_GET
。您可能会发现阅读更多关于 $_GET
和 $_POST
superglobals 的信息会有所帮助,您会很快意识到它们所指的数据并不相同。
警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及一些如何使用 PHP / mysqli 安全地编写查询的示例。 切勿将未经处理的数据直接插入您的 SQL。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
永远不要存储纯文本密码!请使用 PHP 的built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,您可以使用 password_hash()
compatibility pack。 在散列之前不需要escape passwords 或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。
【参考方案1】:
似乎$id
在functions.php
中未定义。它只存在于index-admin.php
中,并且在提交表单时,该代码没有运行。 Web 应用程序是无状态,并且变量值不会在请求之间保持不变。变量值也不会在单独的脚本文件之间神奇地传递(除非它们在同一个请求中通过“include”或“require”语句调用)。
但是,您实际上已经部分解决了这个问题。在加载 index-admin 时,您已经将 ID 放置在表单的隐藏字段中。现在你只需要在functions.php中创建一个新变量来读取它:
if(isset($_POST['update']))
$id = $_POST["id"];
另外,我不明白您为什么还要在 index-admin 脚本中写 include("functions.php");
...您的表单直接回发到 functions.php,而不是 index-admin.php。在该页面中包含 functions.php 毫无意义……据我所知,它不会做任何有用的事情。
请注意 cmets 中关于 SQL 注入的警告。这是一个严重的漏洞,您应该尽快修复它,最好在开始测试代码之前修复它(这样您就不必在重写查询代码后重新测试它)。
【讨论】:
以上是关于数据未更新到数据库中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
屏幕关闭时,前台服务未在 Android 7.0+ 中接收位置更新
Firebase 实时数据库未更新 // 数据未添加到 Firebase 实时数据库