0

すべての PHP マスターの皆さん、こんにちは...誰にも迷惑をかけていなければいいのですが...私の質問が間違っていたり、このセクションにふさわしくない場合は申し訳ありません。私の英語はそれほど上手ではありません。この問題を数日間解決しようとしましたが、答えを探してみましたが、問題を解決できる解決策が見つかりませんでした。正直なところ、私は PHP の初心者であり、本当に初心者であり、あなたの指導が必要です。

すでにログイン ページ (login.php) を持っています。ユーザーがログインすると、ユーザー ページ (useracc-test.php) にリダイレクトされます。ユーザー名とパスワード セッションに基づいて個人データを表示することを想定していますが、エラーが表示されます ( 注意: 未定義のインデックス: C:\xampp のユーザー名\htdocs\eventsite\useracc-test.php 行 42

警告: mysql_fetch_array() は、パラメーター 1 がリソースであると想定します。これは、51 行目の C:\xampp\htdocs\eventsite\useracc-test.php で指定されたオブジェクト Hello, ().) です。

「useracc-test.php」にすべてのユーザーデータを表示できるため、DB接続の問題は問題ありません。唯一の問題は、ユーザーのログイン セッションに基づいて SELECTED データを表示できないことです。ユーザーが全員のデータではなく、自分のデータを取得するようにしたい。

以下はユーザーページ「useracc-test.php」です。これは、ユーザーのログインが成功した後のページであり、自分の個人データを表示することを想定しています。あなたの助けが必要.. Tq 再び.. リンダ メイ。

    <?php

//useracc-test.php

/**
 * Start the session.
 */
session_start();

 /**
 * Include our MySQL connection.
 */
// require 'lib/password.php';
require 'connect-test.php';

/*
THIS ONE WORKS FINE..BUT IT DISPLAY ALL ROWS...BUT THE ONE BELOW "$_SESSION['user_id']"
DISPLAYS ERROR

$sql = "SELECT name, telno, username FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "name: " . $row["name"]. " - telno: " . $row["telno"]. " username" . $row["username"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();

*/



//THIS ONE BELOW DOES NOT WORK FINE..DISPLAY 2 ERRORS
/*Warning: mysql_fetch_array() expects parameter 1 to be resource, object given in C:\xampp\htdocs\eventsite\useracc-test.php on line 49
Hello, (). */
//Notice: Undefined index: username in C:\xampp\htdocs\eventsite\useracc-test.php on line 42

//$sql = "SELECT name, username FROM users WHERE id = " . $_SESSION['user_id'] . ;
$sql = "SELECT name, username FROM users WHERE username = '" . $_SESSION['username'] . "'";
$result = $conn->query($sql);
//$result = mysql_query($sql);

if (!$result) { // add this check.
    die('Invalid query: ' . mysql_error());
}
else{

$row = mysql_fetch_array($result);
echo "Hello, " . $row['name'] . " (" . $row['username'] . ").";
}



?>

login.php

<?php

//login.php

/**
 * Start the session.
 */
session_start();



/**
 * Include password_compat library.
 */
require 'lib/password.php';

/**
 * Include our MySQL connection.
 */
require 'connect.php';



//define variables and define to null.
$usernameError = $passwordError = "";


//If the POST var "login" exists (our submit button), then we can
//assume that the user has submitted the login form.
if(isset($_POST['login'])){

    //Retrieve the field values from our login form.
    $username = !empty($_POST['username']) ? trim($_POST['username']) : null;
    $passwordAttempt = !empty($_POST['password']) ? trim($_POST['password']) : null;

    //Retrieve the user account information for the given username.
    $sql = "SELECT id, username, password FROM users WHERE username = :username";
    $stmt = $pdo->prepare($sql);

    //Bind value.
    $stmt->bindValue(':username', $username);

    //Execute.
    $stmt->execute();

    //Fetch row.
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    //If $row is FALSE.
    if($user === false){
        //Could not find a user with that username!
        //PS: You might want to handle this error in a more user-friendly manner!
         $usernameError = "Invalid username. Username is required";
          $passwordError = "Invalid password. Password is required";
    } else{
        //User account found. Check to see if the given password matches the
        //password hash that we stored in our users table.

        //Compare the passwords.
        $validPassword = password_verify($passwordAttempt, $user['password']);

        //If $validPassword is TRUE, the login has been successful.
        if($validPassword){

            //Provide the user with a login session.
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['logged_in'] = time();

            //Redirect to our protected page, which we called useracc.php
            header('Location: useracc-test.php');
            exit;

        } else{
            //$validPassword was FALSE. Passwords do not match.
           $passwordError = "Invalid password. Password is required";
        }
    }

}

?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Login</title>


         <style> 

.error { 
 color: #CB1313; 
  font-family:arial; 
  font-size: 10pt; }


    </style>



    </head>
    <body>
        <h1>Login</h1>
        <form action="login.php" method="post">

            <label for="username">Username</label>
            <input class="input" name="username" maxlength="50" input type="text" type="text" value="" autocomplete="off"   > <span class="error">* <?php echo $usernameError; ?></span> <br>

            <label for="password">Password</label>
            <input class="input" name="password" maxlength="16" input type="password" type="text" value="" autocomplete="off"  > <span class="error">* <?php echo $passwordError; ?></span><br>

            <input type="submit" name="login" value="Login">
        </form>
    </body>
4

2 に答える 2

0
<?php

//login.php

/**
 * Start the session.
 */
session_start();



/**
 * Include password_compat library.
 */
require 'lib/password.php';

/**
 * Include our MySQL connection.
 */
require 'connect.php';



//define variables and define to null.
$usernameError = $passwordError = "";


//If the POST var "login" exists (our submit button), then we can
//assume that the user has submitted the login form.
if(isset($_POST['login'])){

    //Retrieve the field values from our login form.
    $username = !empty($_POST['username']) ? trim($_POST['username']) : null;
    $passwordAttempt = !empty($_POST['password']) ? trim($_POST['password']) : null;

    //Retrieve the user account information for the given username.
    $sql = "SELECT id, username, password FROM users WHERE username = :username";
    $stmt = $pdo->prepare($sql);

    //Bind value.
    $stmt->bindValue(':username', $username);

    //Execute.
    $stmt->execute();

    //Fetch row.
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    //If $row is FALSE.
    if($user === false){
        //Could not find a user with that username!
        //PS: You might want to handle this error in a more user-friendly manner!
         $usernameError = "Invalid username. Username is required";
          $passwordError = "Invalid password. Password is required";
    } else{
        //User account found. Check to see if the given password matches the
        //password hash that we stored in our users table.

        //Compare the passwords.
        $validPassword = password_verify($passwordAttempt, $user['password']);

        //If $validPassword is TRUE, the login has been successful.
        if($validPassword){

            //Provide the user with a login session.
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['logged_in'] = time();

            //Redirect to our protected page, which we called useracc.php
            header('Location: useracc-test.php');
            exit;

        } else{
            //$validPassword was FALSE. Passwords do not match.
           $passwordError = "Invalid password. Password is required";
        }
    }

}

?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Login</title>


         <style> 

.error { 
 color: #CB1313; 
  font-family:arial; 
  font-size: 10pt; }


    </style>



    </head>
    <body>
        <h1>Login</h1>
        <form action="login.php" method="post">

            <label for="username">Username</label>
            <input class="input" name="username" maxlength="50" input type="text" type="text" value="" autocomplete="off"   > <span class="error">* <?php echo $usernameError; ?></span> <br>

            <label for="password">Password</label>
            <input class="input" name="password" maxlength="16" input type="password" type="text" value="" autocomplete="off"  > <span class="error">* <?php echo $passwordError; ?></span><br>

            <input type="submit" name="login" value="Login">
        </form>
    </body>
于 2015-12-20T06:01:06.113 に答える
0

次のように、作業ファイルで使用しているのと同じ while ループを使用するだけです。

if (!$result) { // add this check.
    die('Invalid query: ' . mysql_error());
} else{
    while($row = $result->fetch_assoc()) {
        echo "Hello, " . $row['name'] . " (" . $row['username'] . ").";
    }
}

未定義のインデックス エラーは、$_SESSION 値が欠落している ($_SESSIONusernameで定義されていない) ために発生します。

$_SESSION['user_id']クエリで既に定義されているものを使用するか、$_SESSION['username']適切に定義すると、機能するはずです。


その他の注意事項

$_SESSION を使用するだけでなく、Cookie などを保存する必要があります。$_SESSION は、ユーザーを useracc-test.php にリダイレクトするまで有効です。

リダイレクトする代わりに、次のように useracc-test.php を含めるだけで機能することがわかります。

        //Include the page instead of redirect
        include('useracc-test.php');
        exit;
于 2015-12-20T05:45:27.997 に答える