简体   繁体   English

在PHP中使用mysql_query显示用户名不起作用

[英]Using mysql_query in PHP to show the user name is not working

I am currently trying to create a registration form, and I have the form itself working and people can create user's in my database, but when they sign up and it redirects them to the admin.php . 我目前正在尝试创建注册表单,并且表单本身可以运行,人们可以在我的数据库中创建用户的表单,但是当他们注册后,它将他们重定向到admin.php

The name they used to create an account doesn't show up, down by row user name. 他们用来创建帐户的名称不会显示,只能按行用户名显示。 It should say "Welcome, user_name , you are now logged in!" 它应该显示“ Welcome, user_name ,您现在已经登录!”

I just can't get the name to show up but everything else works! 我只是无法显示名字,但其他一切正常!

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\\path\\to\\admin.php on line 25 警告:mysql_fetch_array()期望参数1为资源,在第25行的C:\\ path \\ to \\ admin.php中给出布尔值
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\\path\\to\\login.php on line 36 警告:mysql_fetch_array()期望参数1为资源,在第36行的C:\\ path \\ to \\ login.php中给出布尔值

Admin: 管理员:

<?php
require('db_config.php');
require_once('functions.php');

//if the cookie is still valid, recreate the session
if( $_COOKIE['logged_in'] == true ){
    $_SESSION['logged_in'] = true;
    $_SESSION['user_id'] = $_COOKIE['user_id'];
    $_SESSION['is_admin'] = $_COOKIE['is_admin'];

}
if( $_SESSION['logged_in'] != true ){
    //not logged in! send them back to the form]
    header('location:login.php');   
}

//extract the data for the logged in user, so we can use it on all page
$user_id = $_SESSION['name'];
$query_user = "SELECT * FROM users
                WHERE name = $user_id
                LIMIT 1";

$result_user = mysql_query($query_user);
$row_user = mysql_fetch_array($result_user);
//this going to be a handy variable to have throughout all pages
$user_id = $row_user['user_id'];

?>
<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="css/reset.css" />
<link rel="stylesheet" type="text/css" href="css/format.css" />
<title>Schell Shock Design's Portfolio</title>
</head>

<body>
 <div id="login">
 <?php
    include('login.php');
    ?>
  </div>
  <div id="utilities">
   <?php include('utilities.php'); ?>
  </div>

<div id="container">
  <header>
   <?php include('header.php'); ?>
   </header>
       <div id="slider">
       <?php include('slider.php'); ?>
          </div>
        <div id="content">
      <?php include('content.php'); ?>

  </div>
  <div id="bottomcontent">
      <?php include('bottomcontent.php'); ?>
  </div>
  <div id="footer">
      <?php include('footer.php'); ?>
</div>
</body>
</html>

Login: 登录:

<?php
 //show an error if there is a problem with the login
if($error == true){ ?>

    <div class="error">
        Sorry, Your username and password are incorrect. Try again. 
    </div>  

<?php } //end if error ?>


<?php //show the form only if NOT logged in
if( !$_SESSION['logged_in'] ){

?>
  <div class="form1">
  <form action="?action=" method="post">
    <label for="username">Username:</label>
    <input type="text" name="username" id="username" />
    <label for="password">Password</label>
    <input type="password" name="password" id="password" />
    <input type="submit" value="Log in" />
    <input type="hidden" name="did_login" value="1" />
</form>
<?php } //end if not logged in 

else{ 
//get info of logged in person
     $user_id = $_SESSION['user_id'];
    $query_user = "SELECT name
                    FROM users
                    WHERE user_id = $user_id";

$result_user = mysql_query( $query_user );
$row_user = mysql_fetch_array( $result_user );
?>
    <div id="loggedin">
    <a href="?action=logout">Log Out</a>

    <?php //show a welcome message if they logged in successfully
    echo 'Welcome '.$row_user['name'].', You are now logged in!';
 ?> 


<?php } ?>
</div>

Registration 注册

<?php
//register parse. all this logic MUST go before the doctype or any other text output.
require('db_config.php');
require_once('functions.php');

//if they submitted the form, parse it
if( $_POST['did_register'] == 1 ){
    //extract amd sanitize all fields
    $username = clean_input($_POST['username']);
    $email = clean_input($_POST['email']);
    $password = clean_input($_POST['password']);
    $repassword = clean_input($_POST['repassword']);
    $policy = clean_input($_POST['policy']);

    //encrypted version of the password, for storing in the database
    $sha_password = sha1($password);

    //begin validation
    $valid = true;

    //did they forget to check the box?
    if( $policy != 1 ){
        $valid = false;
        $msg = 'You must agree to the TOS and PP before signing up. <br />';
    }

    //repeated password does not match
    if( $password != $repassword ){
        $valid = false;
        $msg .= 'The passwords provided do not match. <br />';
    }

    //make sure the username and password are at least 5 characters long, than check the database
    if( strlen($username) >= 5 AND strlen($password) >= 5 ){
        //check to see if username is already taken
        $query_username = "SELECT name
                            FROM users
                            WHERE name = '$username'
                            LIMIT 1";

        $result_username = mysql_query($query_username);
        //if one result is found, username is taken.
        if( mysql_num_rows($result_username) == 1 ){
            $valid= false;
            $msg .= 'That username is already taken. Try another. <br />';  
        }
    }else{
        $valid = false;
        $msg .= 'Username and Password must be at least 5 characters long. <br />'; 
    }

    //check for valid email, than check for match in database
    if( check_email_address($email) == true ){
        //look for match in database
        $query_email = "SELECT email
                        FROM users
                        WHERE email = '$email'
                        LIMIT  1";
        $result_email = mysql_query($query_email);
        //if 1 result is found, email is taken.
        if( mysql_num_rows($result_email) == 1 ){
            $valid = false;
            $msg .= 'Looks like an account with that email already exists. Do you want to login? <br />';

        }
    }else{
        //invalid email
        $valid = false;
        $msg .= 'Please provide a valid email address. <br />'; 
    }

    //if the data passed ALL tests, add the user to the database
    if( $valid == true ){
        $query_insert = "INSERT INTO users
                        (name, password, email, join_date, is_admin)
                        VALUES
                        ('$username', '$sha_password', '$email', now(), 0)";

        $result_insert = mysql_query($query_insert);
        //check to see if it worked
        if( mysql_affected_rows() == 1 ){
            //SUCCESS! Log the user in and send them to their profile.
            $_SESSION['logged_in'] = true;
            setcookie( 'logged_in', 'true', time() + 60*60*24*7 );
            header( 'location:index.php' );

        }else{
            $msg .= 'There was a problem adding the user to the Database';
        }
    }
} //end if submitted form
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sign up for an account</title>

</head>

<body>
    <?php
    if( isset($msg) ){
        echo $msg;
    }
    ?>
    <form action="registration.php" method="post">
        <label for="username">Choose a Username:</label>
        <input type="text" name="username" id="username" />
        <span class="hint">Minimum of five characters</span>

        <label for="email">Your Email Address:</label>
        <input type="text" name="email" id="email" />      

        <label for="password">Choose a Password:</label>
        <input type="password" name="password" id="password" />
        <span class="hint">Minimum of 5 characters</span> 

        <label for="repassword">Repeat Password:</label>
        <input type="password" name="repassword" id="repassword" />

        <input type="checkbox" name="policy" id="policy" value="1" />
        <label for="policy">Yes, I have read the Terms of Service and Privacy Policy.</label>

        <input type="submit" value="Sign up" />
        <input type="hidden" name="did_register" value="1" />
    </form>


</body>
</html>

What do I need to fix? 我需要解决什么?

  1. You should check what the error is: 您应该检查错误是什么:

     if (!$result_user) { die('MySQL Error: '.mysql_error()); } 
  2. Call session_start() at the top of each of your pages. 在每个页面的顶部调用session_start()

  3. And ensure session's values are returned correctly: 并确保正确返回会话的值:

     print_r($_SESSION); 

In admin.php , this query is failing: admin.php ,此查询失败:

$query_user = "SELECT * FROM users WHERE name = $user_id LIMIT 1";

Maybe $user_id is empty, or it needs to be quoted ( '$user_id' ). 也许$user_id为空,或者需要用引号( '$user_id' )。

In any case you should be checking the result of the query to make sure it was successful: 无论如何,您都应检查查询结果以确保查询成功:

$user_id = $_SESSION['name'];
$query_user = "SELECT * FROM users
                WHERE name = $user_id
                LIMIT 1";

$result_user = mysql_query($query_user);
if (!$result_user) {
    die('Query failed: ' . mysql_error());
}

mysql_query() only returns a resource result on success. mysql_query()仅在成功时返回资源结果。 On failure, it returns (bool)FALSE which cannot be passed to any mysql_fetch_* functions. 失败时,它返回(bool)FALSE ,它不能传递给任何mysql_fetch_*函数。

The same is the case for the error in login.php. login.php中的错误也是如此。

You don't seem to be showing the code that runs upon login, my guess is you are not assigning the right variables to the session. 您似乎没有显示登录时运行的代码,我想您没有为会话分配正确的变量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM