3

PHP の初心者である私は、大量の調査を行いましたが、この質問に対する答えを見つけることができませんでした。詳細を説明すると、PHP と Javascript を使用する小さなアップロード Web アプリがあります。ユーザー名とパスワードで保護された管理セクションと呼ばれるものでは、ユーザーはアップロードされたファイルにアクセスできます。

この時点で、静的なユーザー名とパスワードを php ファイルに設定し、それらを次の変数として保存しています。

$username = "admin";
$password ="admin";

次に、ログイン ページがフォーム ポストを読み取り、入力されたユーザー名とパスワードが設定されているものと一致するかどうかを確認します。認証されると、セッション トークンが設定されます。これはすべてうまく機能しますが、admin.php セクション内でパスワードを変更できるようにしたいと考えています。

したがって、admin.php にパスワード変更フォームを作成し、ユーザーがそれを送信すると、login.php ファイルの $password 変数が更新されるようにしたいと考えています。既存の login.php ファイルに書き込み、静的変数 $password を更新するにはどうすればよいですか。

どんな助けでも大歓迎です!

更新: 現在の login.php ファイル

ユーザー名とパスワードが静的に設定されていることがわかるように、ユーザーがログイン情報を入力し、セッション変数が設定されていることを確認すると、. admin.php ページのユーザーがフォームを送信して $password 変数を更新できるようにする方法が必要です。私は今これを読んでいます 管理者パスワードを変更します(フォームを作成する必要があります)

<?php //Password Protected Area
session_start();
if($_GET['action'] == 'logout'){
   unset($_SESSION['currentUser']); 
}

$requestMethod = strtolower($_SERVER['REQUEST_METHOD']);
if($requestMethod == 'post'){
    $username = "admin";
    $password ="admin";
    $postUsername = strip_tags($_POST['username']);
    $postPassword = strip_tags($_POST['password']);
    if(($postUsername == $username) && ($postPassword == $password)){
        $_SESSION['currentUser'] = 'admin';
        header("location: admin.php");
    }else{
        $loginError = true;
    }
}

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Login</title>

    <?php include_once "assets/includes/loader.php" ?>

</head>
<body>

    <div id="wrapper">

    <div id="upload-text" >
        <h1>Please Login</h1>


         <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST" id="loginForm"> 

          <?php if($loginError){?>
            <h2>Login Error:</h2>
            <p>Sorry, your username or password was incorrect.</p>
          <?php } ?>
            <br>
            <label><span>Username:</span> <input type="text" name="username" value="<?php echo $_POST['username'];?>" /></label>
            <br>
            <br>
            <label><span>Password:</span> <input type="password" name="password" /></label>
            <br><br>
            <label><input type="submit" value="Login" /></label>
        </form>     

    </div>

    </div>
    <!-- #upload-wrapper -->

</body>
</html>

更新しました:

私は提供された提案に取り組み、それを機能させました。以下の更新されたコードを参照してください。config.php ファイルを作成し、そこにログイン情報を保存しました。login.php ファイルへのインクルードを使用して、情報を呼び出しています。認証されると、admin.php ファイルには fwrite を使用して conif.php ファイルを更新するフォームがあります。

ログイン.php

$requestMethod = strtolower($_SERVER['REQUEST_METHOD']);
if($requestMethod == 'post'){
    include "assets/includes/config.php";
    $postUsername = strip_tags($_POST['username']);
    $postPassword = strip_tags($_POST['password']);
    if(($postUsername == $username) && ($postPassword == $password)){
        $_SESSION['currentUser'] = 'admin';
        header("location: admin.php");
    }else{
        $loginError = true;
    }
}

admin.php

if(isset($_POST['new_pw']) && trim($_POST['new_pw']) != ""){
    $fp = fopen("assets/includes/config.php", 'w');
    fwrite($fp, '<?php');
    fwrite($fp, ' ');
    fwrite($fp, '$username = "admin";');
    fwrite($fp, '$password = "'.trim($_POST['new_pw']).'";');
    fwrite($fp, ' ');
    fwrite($fp, '?>');
    fclose($fp); 
}
?> 

<form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
    <input type="text" name="new_pw">
    <input type="submit">
</form>
4

2 に答える 2

1

更新された回答:

構成ファイルを作成し、Webルートの背後に配置します。内容は次のとおりです。

<?php
$username = 'admin';
$password = 'admin;

次に、ネストされた構成ファイルを含め、条件から$usernameand$password宣言を削除します。$requestMethod

<?php //Password Protected Area
    session_start();

    if($_GET['action'] == 'logout'){
       unset($_SESSION['currentUser']); 
    }

    $requestMethod = strtolower($_SERVER['REQUEST_METHOD']);
    if($requestMethod == 'post'){
        include($_SERVER['DOCUMENT_ROOT']."/path-to-nested-config.php");
        $postUsername = strip_tags($_POST['username']);
        $postPassword = strip_tags($_POST['password']);
        if(($postUsername == $username) && ($postPassword == $password)){
            $_SESSION['currentUser'] = 'admin';
            header("location: admin.php");
        }else{
            $loginError = true;
        }
    }
?>

最後に、ファイルを更新するには、fwriteを使用します

<?php
if(isset($_POST['new_pw']) && trim($_POST['new_pw']) != "")
{
    $fp = fopen($_SERVER['DOCUMENT_ROOT']."/path-to-nested-config.php", 'w');
    fwrite($fp, '<?php');
    fwrite($fp, '$username = "admin"');
    fwrite($fp, '$password = "'.trim($_POST['new_pw']).'");
    fclose($fp); 
}
?> 

これは、システムによって書き込まれるように設定された適切な権限で構成ファイルに書き込むphpスクリプトに「new_pw」を渡すフォームがあることを前提としています。

これはそれを行うための1つの方法にすぎません。構成ファイルには3行のコードが含まれているため、この方法を選択しました。これにより、より高度なシステムは実際には必要ありません。

于 2012-11-19T21:00:24.600 に答える
0

上で述べたように、これは非常に望ましくない方法ですが、本当にこの方法で行う必要がある場合は、次のことを行う必要があります。

$file = file_get_contents('./admin.php', FILE_USE_INCLUDE_PATH);

2-現在のパスワード(セッションに保存されているパスワードを、ユーザーがフォームで提供した新しいパスワードに置き換えます

$file=str_replace($oldPass,$newPass,$file);

ユーザーが一致するものを入力した場合にコードの他の部分を置き換えないように、$oldPass と $newPass の両方に代入セグメントを追加することもお勧めします。

$fp=fopen('admin.php','w');
fwrite($fp,$file,strlen($file));
于 2012-11-19T21:14:54.403 に答える