1

我在使用会话从我的 sql 数据库中获取数据时遇到问题。我正在尝试制作一个登录系统。我已经有了这项工作,但每次使用都会被定向到同一页面 - 我希望其上的私人资料只能由使用正确电子邮件地址和密码登录的人查看。

我正在使用以下代码 - 第 19 行出现错误!老实说,我不是 100% 理解这一行——我是 PHP 和 SQL 的新手,并且一直在阅读所有这些内容,但没有得到完全向我解释的答案。

任何帮助将不胜感激 - 向我推荐任何教程......

<?php # DISPLAY COMPLETE FORUM PAGE.

# Access session.
session_start() ;

# Redirect if not logged in.
if ( !isset( $_SESSION[ 'user_id' ] ) ) { require ( 'login_tools.php' ) ; load() ; }

# Set page title and display header section.
$page_title = 'Forum' ;


# Open database connection.
require ( 'connect_db.php' ) ;

# Display body section, retrieving from 'forum' database table.
$q = "SELECT * FROM users WHERE user_id = $_SESSION[email]" ;
$r = mysqli_query( $dbc, $q ) ;
if ($result = $mysqli->query("SELECT * FROM users"))
{
  echo '<table><tr><th></th><th></th><th id="msg"></th></tr>';
  while ( $row = mysqli_fetch_array( $r, MYSQLI_ASSOC ))
  {
    echo '<tr><td>' . $row['first_name'] .' '. $row['last_name'] . '<br>'.        $row['email'].'</td>
    <td>','</td><td>','</td> </tr>';
  }
  echo '</table>' ;
}
else { echo '<p>There are currently no messages.</p>' ; }

# Create navigation links.
#echo '<p><a href="post.php">Post Message</a> | <a href="shop.php">Shop</a> | <a     href="home.php">Home</a> | <a href="goodbye.php">Logout</a></p>' ;

# Close database connection.
mysqli_close( $dbc ) ;



?>
4

4 回答 4

2

您的会话中有语法错误:

$q = "SELECT * FROM users WHERE user_id = $_SESSION[email]" ;

将其更改为:

$q = "SELECT * FROM users WHERE user_id = {$_SESSION['email']}" ;

但是您还应该在将会话数据插入数据库之前对其进行转义。

此外,while()循环中的文本还有另一个语法错误:

echo '<tr><td>' . $row['first_name'] .' '. $row['last_name'] . '<br>'.        $row['email'].'</td>
<td>','</td><td>','</td> </tr>';

删除逗号,用句点替换它们:

echo '<tr><td>' . $row['first_name'] .' '. $row['last_name'] . '<br>'. $row['email'].'</td> <td>' . '</td><td>' . '</td> </tr>';

正如@gareth 所说,您可能应该选择程序化或面向对象的编码风格并坚持使用它,IE,使用mysqli_query()$mysql->query():)

于 2013-05-29T11:09:59.333 回答
1

您需要决定是使用mysqli程序风格(如本节选的第一行)还是面向对象的风格(如第二行)。

$r = mysqli_query( $dbc, $q ) ;
if ($result = $mysqli->query("SELECT * FROM users"))
{

查看您发布的其余代码,我想将第二行(您的第 19 行)更改为if ($result = mysqli_query("SELECT * FROM users"))将消除该错误(尽管不一定是任何其他错误)。

于 2013-05-29T11:17:10.733 回答
0

您说“我在第 19 行遇到错误! ” - 您上面的换行是否显示第 20 行开始时没有引号和 td 实际上在您的代码中?如果是这样,请删除换行符并确保第 19 行继续通过表格行的其余部分到“;”

于 2013-05-29T11:12:35.547 回答
0

试着这样写

$q = "SELECT * FROM users WHERE user_id = '". $_SESSION['email']. "'";

编辑:

当您进行比较email时,这意味着它应该是字符串,因此您需要将其用引号括起来,如上面。

也试试

if ($result = mysqli_query($dbc, "SELECT * FROM users"))

请参阅用户过程方式或 OOP 方式。通过添加$dbc到上面尝试mysqli_query()

于 2013-05-29T11:21:50.953 回答