无法显示用户名

时间:2015-08-19 01:53:40

标签: php html mysqli

我在尝试在$ _GET的个人资料页面上显示用户名时遇到问题,会话已创建,但无法在个人资料页面上显示用户名。

    <?php include("template/header.php");
include("requires/connection.php"); ?>

    <?php
    if(isset($_GET['u'])) {
        $username = mysqli_real_escape_string($_GET['u']);
        if(ctype_alnum($username)) {
         // Check user exists
          $check = mysqli_query("SELECT username FROM users WHERE username='$username'");
    if(mysqli_num_rows($check)===1) {
            $get = mysqli_fetch_assoc($check);
            $username = $get['username'];
          }
          else {
            echo "<h2>User doesn't exist</h2>";
            exit();
          }
        }
      }
    ?>

      <div class="profile-content-container">
         <h1>Profile <?php echo "$username"; ?></h1>
         <p>Welcome</p>    
      </div><!-- end of profile-content-container -->

      <div class="profileMenu">
            <div id="leftsideMenu">
              <ul>
                <li><a href="home.php">Home</a></li>
                <li><a href="profile.php">My Profile</a></li>
                <li><a href="#"></a></li>
                <li><a href="#"></a></li>
                <li><a href="logout.php">Logout</a></li>
              </ul><!-- end of menu -->
            </div><!-- end of leftsideMenu -->
          </div><!-- end of profileMenu -->    
    <?php include("template/footer.php"); ?>

1 个答案:

答案 0 :(得分:2)

mysqli_real_escape_string()mysqli_query()函数都要求将DB连接作为第一个参数传递;你的没有。

mysqli_real_escape_string($con, $_GET['u'])
                          ^^^^^ see that?

所以...

$username = mysqli_real_escape_string($con, $_GET['u']);
                                      ^^^^^ add the db connection variable

和查询

mysqli_query($con, "SELECT ...
             ^^^^^ see that?

我在这里使用了$con,因为没有迹象表明您使用哪个变量来分配连接。

参考文献:

旁注:您可能想要更改此

if(mysqli_num_rows($check)===1)

if(mysqli_num_rows($check) >0 )

我在某些情况下看到===1失败了。

另一件事,改变这段代码

$get = mysqli_fetch_assoc($check);
$username = $get['username'];

to,并使用while循环

while($get = mysqli_fetch_assoc($check)){
         // or mysqli_fetch_array

    $username = $get['username'];

}

另外,您的数据库连接应该基于mysqli_,而不是mysql_或PDO,这对我们来说也是最不为人知的。

  • 那些不同的MySQL API不会混用。

参考文献:

or die(mysqli_error($con))添加到mysqli_query()以检查错误。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

您的代码显示了一个GET数组;不知道从哪里填充,确保它已设置而不是空。

如果使用表单,请确保不暗示POST方法。

如果您的表单使用POST方法,那么您应该使用POST而不是GET。如果您正在使用表单,请确保该元素具有“name”属性。

  • 我们也不为人知。

同样,如果你正在使用带有POST方法的表单,或者其他什么,请确保它有一个name属性。

即:

<input type="text" name="u">

修改

这部分将抛出一个未定义的变量通知:

<h1>Profile <?php echo "$username"; ?></h1>

因此,请使用条件语句:

<h1>Profile 
<?php
if(isset($username) && !empty($username)) {

    echo $username;
}

else{
    echo "Username is empty or not set somewhere.";
}

?>
</h1>

或使用ternary operator

<h1>Profile <?php echo $username ? $username : ""; ?></h1>

<h1>Profile <?php echo $username ? $username : "It is empty"; ?></h1>

<h1>Profile <?php echo !empty($_GET['u']) ? $_GET['u'] : ""; ?></h1>

<h1>Profile <?php echo !empty($_GET['u']) ? $_GET['u'] : "It is empty."; ?></h1>

正如您在评论中所说,您使用的?u="username"应该在没有引号?u=username的情况下阅读,或者作为示例?u=john没有引号,并且可能区分大小写。因此john可能与John的大写“J”不同。