【发布时间】: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]);”所以我多次确保表格字段与表格中的内容匹配,表单字段与表单上的内容匹配并且它们正确配对。