【问题标题】:PHP- Save $_POST into $_SESSION issuePHP-将 $_POST 保存到 $_SESSION 问题中
【发布时间】:2016-07-10 23:29:48
【问题描述】:

我在这里阅读了多篇关于此的帖子,但似乎没有一个可以解决问题,也许我只是对此产生了误解。 我有一个插入数据库的表单,然后完美地回显数据!我的问题是因为表单位于用户帐户页面上,当您注销时,所有信息都会消失。我知道我必须将我的 $_POST 变量保存到 $_SESSION 中。

但是即使保存到会话中,一旦注销,重新登录时,回显的数据仍然会消失。将 $_POST 保存到 $_SESSION 的正确方法是什么。

我目前正在使用:

// Save $_POST to $_SESSION
$_SESSION['fname'] = $_POST;

这里有没有更好的方法是我的代码:

HTML

      <section class="container">
    <form id="myform " class="Form" method="post" action="Cus_Account.php?c_id=<?php echo $c_id ?>" accept-charset="utf-8">

        <!--                    <div id="first">-->
        <input type="text" id="fname" name="fname" value="<?php echo isset($_POST['fname']) ? $_POST['fname'] : '';?>" required> 
        <input type="text" id="lname" name="lname" value="<?php echo isset($_POST['lname']) ? $_POST['lname'] : '';?>" required>
        <input type="text" id="email" name="email" value="<?php echo $_SESSION['Cus_Email']; ?>" required>
        <input type="number" id="phone" name="phone"  value="<?php echo isset($_POST['phone']) ? $_POST['phone'] : '';?>"required>
        <input type="submit" name="Update" value="Update">
        <br>
    </form>

PHP

  <?php
if (isset($_POST['Update'])) {
$c_fname = $_POST['fname'];
$c_lname = $_POST['lname'];
$c_email = $_POST['email'];
$c_phone = $_POST['phone'];

// Save $_POST to $_SESSION
$_SESSION['fname'] = $_POST;
//query

$insert_det = "INSERT INTO Cus_acc_details(CUS_Fname,CUS_Lname,Cus_Email,CUS_Phone) VALUES (?,?,?,?)";
$stmt = mysqli_prepare($dbc, $insert_det);
//new
// $stmt = mysqli_prepare($dbc, $insert_c);
//debugging
//$stmt = mysqli_prepare($dbc, $insert_c)  or die(mysqli_error($dbc));

mysqli_stmt_bind_param($stmt, 'sssi', $c_fname, $c_lname, $c_email, $c_phone);

/* execute query */
$r = mysqli_stmt_execute($stmt);

// if inserted echo the following messges
if ($r) {
    echo "<script> alert('registration sucessful')</script>";
}
} else {
echo "<b>Oops! Your passwords do not </b>";
}
?>

表单中的 $_SESSION['Cus_Email'] 来自另一个查询。 任何帮助或建议将不胜感激。

【问题讨论】:

  • 不确定您的问题,但可能会为每个字段创建一个会话值$_SESSION['fname'] = $_POST['fname'];
  • 或者只是 $_SESSION = $_POST; 但可能是 $_SESSION['post'] = $_POST; 然后只是 echo $_SESSION['post']['fname']; 等等...
  • @chris85 我正在对一个变量尝试不同的方法,因为它目前甚至不适用于 fname。我正在尝试将 $_POST 保存到 $_SESSION 但我失败了
  • 你试过session_start();吗?

标签: php mysql session


【解决方案1】:

$_POST 数据只能临时存储为会话变量。例如,如果您的用户出错:

form.php

<?php
  // This function should go in a config file, to escape data:
  function html($str){
    return htmlspecialchars($str, ENT_QUOTES);
  }

  $data   = $_SESSION['form']['data'];
  $errors = $_SESSION['form']['errors'];
?>
<form method="post" action="action.php">

  <input type="text" name="fname" value="<?=html($data['fname'])?>" placeholder="First name">
  <?php if(isset($errors['fname'])): ?>
    <p>ERROR: <?=html($errors['fname'])?></p>
  <?php endif; ?>

  <input type="text" name="lname" value="<?=html($data['lname'])?>" placeholder="Last name">

  <button type="submit">Go</button>

</form>
<?php
  unset($_SESSION['form']); // You don't want to keep this data any longer.

action.php

<?php
  $data = $_POST;

  // Validate the data, for example:
  if($data['fname'] == ''){
    $errors['fname'] = "First name is required.";
  }

  if(!empty($errors)){
    unset($data['password']); // Do not store passwords in session variables.
    $_SESSION['form']['data']   = $data;
    $_SESSION['form']['errors'] = $errors;
    header("Location: form.php");
    die;
  }
  // Put your database inserts here (no errors)

您应该在数据库中存储名字、姓氏等信息。不要将这些存储在$_SESSION 中,而不是在上面的示例中。

【讨论】:

  • 信息在数据库中。但我只是希望信息在加载时也显示在帐户页面上
  • @jerneva 在表格中,您的意思是?
  • 嗨。我已经整理好了。改为使用选择查询并将变量保存到会话中
  • @jerneva 您应该在会话中保存的唯一内容是用户 ID。如果您以这种方式使用会话,那么您做错了。
  • 只存储$_SESSION['user_id'] 然后使用它从数据库中获取用户数据。让选择查询返回一个关联数组。将数组命名为$user,然后使用$user['fname']
猜你喜欢
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2011-10-12
  • 2023-04-07
相关资源
最近更新 更多