我有一个用来将数据插入数据库的表格和一个表,其中显示了来自同一数据库的记录。我在显示的每个记录上都有更新按钮。
当我单击它时,来自数据库的数据将显示在表单的每个输入中;我已经修改了所需的信息,然后从表单中单击更新按钮。
问题是我修改的数据没有在数据库中更新,也没有显示在页面表中。
我的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');
}
答案 0 :(得分: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毫无意义...据我所知,它不会做任何有用的事情。
请注意有关SQL注入的注释中的警告。这是一个严重的漏洞,您应该尽快修复它,最好是在开始测试代码之前(这样,在您重新编写查询代码后就不必重新测试它了)。