PHP - 从sql数据库获取数据

时间:2013-05-29 11:03:56

标签: php sql

我在使用会话从我的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 个答案:

答案 0 :(得分: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():)

答案 1 :(得分:1)

您需要决定是否在程序样式中使用mysqli(如本摘录的第一行)或面向对象样式(如第二行)。

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

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

答案 2 :(得分:0)

你说“我在第19行收到错误!” - 你上面的换行是否显示第20行,开头没有引号,而你的代码中有td?如果是,则删除换行符并确保第19行继续直到表行的其余部分为“;”

答案 3 :(得分:0)

尝试这样写

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

修改

当你比较email时,它意味着它应该是字符串,所以你需要将它包装在上面的引号中。

也可以尝试

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

以用户过程方式或OOP方式查看。通过将$dbc添加到mysqli_query()

来尝试上述操作