根据PHP和MySQL中的另一个表(关系数据库),无法从表中选择所有结果

时间:2014-10-25 00:54:03

标签: php mysql database session relational-database

我正在尝试完成我正在创建的这个网站,但我有点卡住了。

我想在我的数据库中创建一个名为“orders”的表。我希望这个表与我的用户表相关,这样当用户进入他的“orders.php”页面时(一旦登录),他就可以看到他当前和之前的所有订单。

这些是我的表字段/ cols:

ID 用户名 订单号 描述 数量 总

这是我的方法:

每当创建新订单时,根据用户的选择(订单的选定内容)插入所有表字段/列,但用户名将是从$ _SESSION或$ _COOKIE变量收集的唯一值,该变量保持不变用户名。然后,一旦用户转到orders.php,我将执行一个查询以显示只有该用户名已订购的所有订单。请注意,我确实清理了所有输入/输出,并且我没有将敏感数据存储在我的cookie中。我的系统设计为只使用会话作为身份验证方法,因此每次关闭浏览器时都需要登录,但这很好。

1)这是一种安全的方法吗?你有什么建议/意见吗?

2)你能帮我构建查询吗?

我还没有真正使用过关系数据库,所以我有点迷茫。如何调用表“订单”中的所有订单,其中username =“会话中的用户名”?

到目前为止,我有这个:

"SELECT * FROM orders WHERE username = ? " //(Using PDO)

我知道这会有效,但我关注的是如果会话被劫持或类似的事情,那么用户是否能够检索任何用户的订单?

感谢您稍微解释一下并帮助我!

干杯!

1 个答案:

答案 0 :(得分:0)

小心!请勿创建包含人类可读用户ID的纯文本Cookie(如user2345995OllieJones)。对于一个坏女孩来说,仅仅通过猜测来伪造像这样的cookie就太容易了,然后是你的用户'信息漏掉了。

您正在使用php工作。因此,您可以使用php的会话机制来存储您的用户ID和其他值。 php使用难以猜测的会话ID(SID)并将它们存储在cookie中或作为URL中的sid=1234abcd9875参数存储。

为了您的系统的完整性,请阅读此内容。它实际上是一个非常精心设计的功能,它在野外已经存在了十五年左右:它已经过调试。

http://php.net/manual/en/session.idpassing.php

如果您正在使用会话系统,那么您基本上是在第一页和登录页面中执行此操作。

session_start();
...
$_SESSION['username'] = $username;  /* which you get by logging in */
...

在您的订单查询页面上,您可以执行类似的操作来检索用户名并在查询中使用它。

session_start();
...
$orderstmt = $pdoconn->prepare("SELECT * FROM orders WHERE username = :username");
$orderstmt->execute( array(':username' => $_SESSION['username']) );
...
while ($row = $orderstmt->fetch()) {
   /* use the row's data */
}
$orderstmt->closeCursor();