Как вы обновляете переменную в php файле через форму отправки? Такой как статический пароль
Будучи новичком в PHP, я провел массу исследований и не смог найти ответ на этот вопрос. Чтобы дать некоторые подробности, у меня есть небольшое веб-приложение для загрузки, которое использует PHP и Javascript. В том, что я называю разделом администратора, который защищен именем пользователя и паролем, пользователь может получить доступ к загруженным файлам.
На данный момент я устанавливаю статическое имя пользователя и пароль в php-файле и сохраняю их как следующие переменные.
$username = "admin";
$password ="admin";
Страница входа в систему затем читает сообщение формы, чтобы проверить, соответствуют ли введенные имя пользователя и пароль тому, что было установлено. После аутентификации он устанавливает маркер сеанса. Все это прекрасно работает, но я бы хотел, чтобы люди могли сменить пароль в разделе admin.php.
Поэтому я хочу, чтобы в файле admin.php была форма смены пароля, которая, когда человек отправляет ее, обновляет переменную $password в файле login.php. Как я могу записать в существующий файл 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.
login.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>
2 ответа
ОБНОВЛЕННЫЙ ОТВЕТ:
создайте файл конфигурации и поместите его в корневой каталог. Содержание:
<?php
$username = 'admin';
$password = 'admin;
Затем включите вложенный файл конфигурации и удалите $username
а также $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);
}
?>
Это предполагает, что у вас есть форма где-то, которая передает "new_pw" в скрипт php, который записывает в файл конфигурации с надлежащими разрешениями, установленными для записи системой.
Это всего лишь один из способов сделать это. Я решил сделать это таким образом, потому что файл конфигурации имеет 3 строки кода, поэтому нет необходимости в более сложной системе.
Как уже упоминалось, ребята, это очень нежелательный способ сделать это, но если вам действительно нужно сделать это таким образом, то вам нужно сделать 1- прочитать в файле администратора
$file = file_get_contents('./admin.php', FILE_USE_INCLUDE_PATH);
2- замените текущий пароль (который он хранится в сеансе на новый пароль, который пользователь дал вам в форме
$file=str_replace($oldPass,$newPass,$file);
также желательно добавить сегмент назначения как к $oldPass, так и к $newPass, чтобы избежать замены других частей вашего кода, если пользователи вводят вещи, которые соответствуют 3- запишите файл после замены
$fp=fopen('admin.php','w');
fwrite($fp,$file,strlen($file));