我希望更新我的会话变量,但每次刷新页面时它都会重置,我该怎么办?
<?php
session_start();
include_once 'connect.php';
$currID = $_SESSION['user_id'][0];
$sfName = $_SESSION['user_id'][1];
$smName = $_SESSION['user_id'][2];
$slName = $_SESSION['user_id'][3];
$fullName = $_POST['fullName'];
list($vfName, $vmName, $lvName) = explode('|', $fullName);
$qEditName = "UPDATE userzavier SET fname='$vfName', mdname='$vmName', lname='$lvName' where ID='$currID'";
if (mysqli_query($con, $qEditName)) {
$sfName = $vfName;
$smName = $vmName;
$slName = $lvName;
echo $sfName . ' ' . $smName . ' ' . $slName;
} else {
echo "Error updating record: " . mysqli_error($con);
}
mysqli_close($con);
?>
答案 0 :(得分:0)
从脚本判断,您正在更新数据库,但不更新会话。它可以帮助您为键分配名称以帮助它可读。在依赖if
或$_POST
时,您还应该使用$_GET
子句。请注意,由于您要处理用户发送的数据,因此您应该bind parameters了解您的爆炸值(我的示例中没有这样做,但上面提供了链接):
<?php
# Start session
session_start();
# Include database
include_once('connect.php');
# Assign current values
$currID = $_SESSION['user_id'][0];
$sfName = $_SESSION['user_id'][1];
$smName = $_SESSION['user_id'][2];
$slName = $_SESSION['user_id'][3];
# Add an if here, this is not always guaranteed
if(!empty($_POST['fullName'])) {
$fullName = $_POST['fullName'];
# This explode seems strange, the input sounds like it could be reworked...
list($vfName, $vmName, $lvName) = explode('|', $fullName);
# Sql statement, this should have parameters that are bound since you are
# receiving them from $_POST, which can seriously mess up your database via injection
$qEditName = "UPDATE userzavier SET fname='$vfName', mdname='$vmName', lname='$lvName' where ID='$currID'";
# Create query
if (mysqli_query($con, $qEditName)) {
# Here is where you need to fix your script
# Assign the session, not just variable (you really
# should make the key associative, not numeric. It is
# easier to read and use if it was $_SESSION['user_id']['first_name'] or similar)
$_SESSION['user_id'][1] =
$sfName = $vfName;
$_SESSION['user_id'][2] =
$smName = $vmName;
$_SESSION['user_id'][3] =
$slName = $lvName;
echo $sfName . ' ' . $smName . ' ' . $slName;
} else {
#Display Error
echo "Error updating record: " . mysqli_error($con);
}
# Close connection
mysqli_close($con);
}
答案 1 :(得分:-1)
在session_start()之前检查会话状态:
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
而不是:
session_start();