【问题标题】:$_SESSION not saving in database$_SESSION 未保存在数据库中
【发布时间】:2015-10-21 13:06:10
【问题描述】:

好的,我有一个网站,用户必须登录才能提交表格,即字符表。该表单将所有信息传递到页面以插入数据库。表单页面和操作页面的第一件事是

<?php
session_cache_expire(360);
session_start();
?>

表单上还有一个位置,其中 $_SESSION['logname'] 被回显,因此您可以在页面上看到用户名:

<p>Logged in as:<br />
<?=$_SESSION['logname']?>

这很好,它正确显示了登录的人。现在,在表单动作中设置的页面上,代码是:

$sql="INSERT INTO topdata (log_name,char_name,create_date) 
VALUES (\"$_SESSION[logname]\",\"$_POST[char_name]\",NOW())";

我多次检查数据库中的字段,它们都是正确的,但是 $_SESSION[logname] 没有保存到数据库中,当通过 phpMyAdmin 查看时,该字段只是空白。因此,$_SESSION[logname] 的信息不会使其从表单上的回显到被输入数据库。我试过 ['logname'] 和 [logname] 都没有工作。

我也试过添加

<input type="hidden" name="log_name" value="<? $_SESSION['logname'] ?>" />
<input type="hidden" name="owner" value="<? $_SESSION['logname'] ?>" />

到表格,以及

<td>Player Name:</td>
<td><? echo $_SESSION['logname'] ?></td>

并将 INSERT 更改为

$sql="INSERT INTO topdata (log_name,char_name,create_date) 
VALUES (\"$_POST[logname]\",\"$_POST[char_name]\",NOW())";

查看表单以填写时,玩家名称正在回显正确的会话信息,但仍未保存...

关于我做错了什么以及如何让会话登录保存在玩家姓名字段中的任何想法?

我们将不胜感激任何和所有的帮助!

【问题讨论】:

  • 你对SQL injection很开放。
  • 在继续之前,请参阅en.wikipedia.org/wiki/SQL_injection。然后,什么代码在执行sql,有没有报错。 $_POST[logname] 和 $_POST[char_name] 不起作用,因为它们不是输入参数(log_name、所有者)的名称。您是否尝试过硬编码插入值来验证数据库插入?
  • 输入参数正确。数据库字段是 log_name 和 char_name,会话参数是 logname,表单字段是 owner...
  • 在原始问题中明确说明“我尝试过 ['logname'] 和 [logname] 都没有工作。” @JRD 表单的其余部分保存到数据库,而不是 $_SESSION[logname]。 .....据我了解sql,这些语句构建为“INSERT INTO tablename (table fields) VALUES ($_POST [form input field]);”所以我多次确保表格字段与表格中的内容匹配,表单字段与表单上的内容匹配并且它们正确配对。

标签: mysql forms session


【解决方案1】:

我认为您在查询 ' ' 中缺少单引号
你的代码是

$sql="INSERT INTO topdata (log_name,char_name,create_date) 
VALUES (\"$_SESSION[logname]\",\"$_POST[char_name]\",NOW())";

我认为你应该在$_SESSION['logname']$_POST['char_name'] 中使用单引号

$sql="INSERT INTO topdata (log_name,char_name,create_date) 
VALUES (\"$_SESSION['logname']\",\"$_POST['char_name']\",NOW())";

【讨论】:

  • 如果是 [ ] 中名称周围的 ' 问题,那么所有字段都不会保存,对吗?所以不可能是这样,因为表单中的其余信息正在保存,而不是 $_SESSION[logname] ...
【解决方案2】:

我认为你的变量缺少一些单引号:

$sql="INSERT INTO topdata (log_name,char_name,create_date) 
VALUES (\"$_POST['logname']\",\"$_POST['char_name']\",NOW())";

或者你可以简单地使用局部变量:

$logname = $_SESSION['logname'];
$char_name = $_SESSION['char_name'];
$sql="INSERT INTO topdata (log_name,char_name,create_date) 
VALUES (".$logname.", ".$char_name." ,NOW())";

【讨论】:

  • 是的!添加 $logname=$_SESSION['logname'];然后将 $_SESSION[logname] 更改为 $logname 工作!谢谢!!!
  • 抱歉……stackoverflow 的新手……将来会记住的。
【解决方案3】:

尝试使用

$sql="INSERT INTO topdata (log_name,char_name,create_date) 
VALUES ('{$_SESSION['logname']}', '{$_POST['char_name']}' ,NOW())";

如果它不起作用,那么在你的 mysql_query($sql) 语句之后写echo mysql_error();echo mysql_error(); 将在您的查询中打印出实际错误。它将让您清楚地了解为什么插入查询没有正确执行。

【讨论】:

  • 我确实有它回显:$result = mysql_query($sql) or die("

    Couldn't add character.
    ".mysql_error().);并且没有错误显示...只是没有保存 $_SESSION['logname'] ...

  • 尝试像echo $sql="INSERT INTO topdata (log_name,char_name,create_date) VALUES ('{$_SESSION['logname']}', '{$_POST['char_name']}' ,NOW())";一样回显查询,当打印查询然后复制查询并从phpmyadmin执行它是否插入来自phpmyadmin的数据
猜你喜欢
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2015-03-18
  • 1970-01-01
相关资源
最近更新 更多