0

我目前正在尝试创建一个注册表单,并且我的表单本身可以工作,人们可以在我的数据库中创建用户,但是当他们注册时,它会将他们重定向到admin.php.

他们用于创建帐户的名称不显示,按行用户名向下显示。它应该说“欢迎,user_name您现在已登录!”

我只是无法显示名称,但其他一切正常!

警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在第 25 行的 C:\path\to\admin.php 中给出
警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在 C:\path\to\ 中给出第 36 行的 login.php

行政:

<?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>

登录:

<?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>

登记

<?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>

我需要解决什么问题?

4

2 回答 2

1
  1. 您应该检查错误是什么:

    if (!$result_user) {
       die('MySQL Error: '.mysql_error());
    }
    
  2. session_start()在每个页面的顶部调用。

  3. 并确保正确返回会话的值:

    print_r($_SESSION);
    
于 2012-07-07T21:07:30.020 回答
0

admin.php中,此查询失败:

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

也许$user_id是空的,或者它需要被引用 ( '$user_id')。

在任何情况下,您都应该检查查询结果以确保它成功:

$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()仅在成功时返回资源结果。失败时,它返回(bool)FALSE不能传递给任何mysql_fetch_*函数的值。

login.php 中的错误也是如此。

您似乎没有显示登录时运行的代码,我猜您没有为会话分配正确的变量。

于 2012-07-07T21:06:07.833 回答