在 Edit.php 页面上编辑后如何更新 Index.php 页面上的数据库值
Posted
技术标签:
【中文标题】在 Edit.php 页面上编辑后如何更新 Index.php 页面上的数据库值【英文标题】:How To Update Database Value On Index.php Page After Editting On Edit.php Page 【发布时间】:2015-03-11 13:19:09 【问题描述】:Index.php 页面 我是初学者。 这是索引页面,我在其中打印已登录用户的名称,并且我想在用户编辑他的详细信息时更新用户名我尝试更新它,它正在更新用户名但是当我编辑详细信息时我先注销然后再次登录,然后名称将更新。我想在用户编辑他的详细信息并重定向到索引页面时立即更新名称,就像 facebook 一样。 我几乎花了一周的时间来解决这个问题。如果需要使用 ajax,请给我代码。 谢谢你
<?php
session_start();
require_once("inc/connection.php");
if (empty($_SESSION['usersession']))
header("Location: login.php");
if (isset($_SESSION['msg']))
echo $_SESSION['msg'];
unset($_SESSION['msg']);
?>
<!DOCTYPE html>
<html>
<head>
<title>WELCOME TO USER AREA</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div id="main">
<nav id="nav">
<div class="logout">
WELCOME <?php echo $_SESSION['usersession']['name']; ?> // echo name of user
<a href="logout.php">Log out</a>
</div>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="register.php">Register</a></li>
<li><a href="edit.php">Edit</a></li>
<li><a href="delete.php">Delete(not recommended)</a></li>
</ul>
</nav>
<div class="para">
some text
</div>
</div>
</body>
</html>
Edit.php 这是edit.php代码
<?php
session_start();
if (empty($_SESSION['usersession']))
header("Location: login.php");
if (isset($_SESSION['msg']))
echo $_SESSION['msg'];
unset($_SESSION['msg']);
?>
<!DOCTYPE html>
<html>
<head>
<title>REGISTER HERE</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div id="reg2">
<?php
if (isset($_POST['btn']))
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$id = $_SESSION['usersession']['id'];
if (!empty($name && $email && $password))
if (!empty($password))
$password = sha1($password);
require_once("inc/connection.php");
$query = mysqli_query($conn, "UPDATE register SET name='$name',email='$email',password='$password' WHERE id='$id'");
if ($query)
header("Location: index.php");
else
echo "not updated right now please try again later";
$_SESSION['msg'] = "Your detail has been updated successfully";
else
echo "please put your updated password";
?>
</div>
<div id="form">
<form method="post" action="edit.php">
<label>NAME</label><p>
<input class="int" type="text" class="nm" name="name" placeholder="Please Enter Your Name Here" value="<?php echo $_SESSION['usersession']['name']; ?>" /><p>
<label>EMAIL</label><p>
<input class="int" type="email" class="em" name="email" placeholder="Please Enter Your Email Here" value="<?php echo $_SESSION['usersession']['email']; ?>" /><p>
<label>PASSWORD</label><p>
<input class="int" type="password" name="password" placeholder="Please Enter Your new Password Here" />
<p></p>
<input type="hidden" name="id[]" value="<?php echo $_SESSION['usersession']['id']; ?>"/>
<input type="submit" name="btn" id="btu" value="Update">
</form>
</div>
</body>
</html>
【问题讨论】:
您的编辑代码永远不会更新 $_SESSION,因此您将始终显示旧/原始数据。您也容易受到sql injection attacks 的攻击。 谢谢你的回复,你能告诉我如何解决这个问题,但我会处理登录页面上的 sql_injection 。$_SESSION['whatever'] = $newvalue;
基本上
$_SESSION['whatever'] = $newvalue; // 在哪个页面以及如何应用此代码,我完全是初学者
【参考方案1】:
更新数据库时,您没有更改 $_SESSION 中的值。 您必须手动执行此操作。
// Add that under $_SESSION['msg'] = '....'
$_SESSION['usersession']['username'] = $name; // Same with email and password
请注意,您的代码容易受到 mysql-injection 的攻击。你应该mysql_real_escape_string to avoid that.
此外,您甚至可以在输出 <!DOCUMENT html>
之前显示您的消息。请不要那样做。而是在您的 html 中的某处回显消息!
【讨论】:
如果我在 edit.php 上这样做,那么我如何在 index.php 上回显更新的用户名 您的 $_SESSION-Variable 在所有页面之间共享(这就是会话的用途)。因此,如果您在 edit.php 中更改它,它也会在调用 index.php 时更改 我这样做是因为你在谈论 if($query) header("Location: index.php"); else echo "暂时没有更新,请稍后再试"; $_SESSION['msg']="您的详细信息已成功更新"; $_SESSION['usersession']['name']=$name; else echo "请输入您更新后的密码"; 那又怎样??你不能在这个地方设置你的标题,因为你已经有了 html 输出。无论如何 - 你也可以在使用标题之前放置我的脚本 你能帮我解决一件事吗?“我怎样才能让我的 php 变得强大(像专家一样)以及我如何理解 php 中的 oop”,oop 也是一个让我心烦意乱的话题.以上是关于在 Edit.php 页面上编辑后如何更新 Index.php 页面上的数据库值的主要内容,如果未能解决你的问题,请参考以下文章