Как написать функцию для смены пароля точного пользователя в текстовом файле - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть три поля ввода, одно для электронной почты, другой пароль, третье - поле для смены пароля, но в текстовом файле я написал код, но он не работает. Что мне добавить в код для смены текущего пароля точного пользователя? который находится внутри txt файла уже не только один и почему мне нужно взорвать и взорвать функцию

 <?php
    if(isset($_POST['change_log'])){
    $fread2=[];
        $email =$_POST['email'];
        $old_password =$_POST['password'];
        $new_password =$_POST['new_password'];
        $file = fopen( "data.txt","w",FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES );
        //  $file=fopen("data.txt","w") or die("Cannot open"); 
            if(filesize('data.txt')>0){
                $read=fread($file,filesize('data.txt'));
                $fread2=explode(" ",$read);
                fclose($file);

            }

            for($i=0;$i<count($fread2);$i++){
                if($fread2[$i] == $email){
                    $fread2==$email;
                    $i++;
                    if($fread2[$i]== $old_password){
                        $fread2==$new_password;
                    }
                //  $fread2 = implode(' ',$fread2);
                    $file = fopen("newfile.txt", "w") or die("Unable to open file!");
                    fwrite($file, $fread2);
                    fclose($file);

                }
                else{
                    echo 'Password does  not match ';
                }
                break;
            }
        }
    ?>

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Эта функция выполняет то, что вы просили, с некоторыми дополнительными функциями, которые упростят ее в будущем, если вы захотите расширить свой код, например, обновить базу данных, что намного проще, чем хранить в текстовом файле.

Этот ответ предполагает, что ваш data.txt файл имеет следующую структуру:

user1.email@site.com password user2.email@site.com otherpassword

вот код:

<?php

//Your variables
$email = $_POST['email'];
$old_password = $_POST['password'];
$new_password = $_POST['new_password'];

//Call the function to change the password
changePassword( $email, $old_password, $new_password );

function changePassword( $email, $old_password, $new_password){

    //The status will be updated to true if successful.
    //This function returns boolean.
    $status = false;

    //The new password can't have spaces
    if( strpos( $new_password, " " ) !== false ){
        return $status;
    }

    //Read the file.
    $file = fopen( "data.txt", "r+", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES );
    $read = fread( $file, filesize( "data.txt" ));

    //Close the file
    fclose( $file );

    //Explode the data. There are two values which make up a user, so chunk into users.
    $data = array_chunk( explode( " ", $read ), 2 );

    //The names of each element (purely to make code easier)
    $keys = array(
            "email",
            "password"
        );

    //For every user in the data file.
    foreach( $data as $userID=>$user ){
        //Combine the user data with keys
        $user = array_combine( $keys, $user );

        //If the current credentials are correct
        if( $user["email"] == $email && $user["password"] == $old_password ){
            //Change the password on this user
            $user["password"] = $new_password;

            //Update the user record
            $data[$userID] = $user;

            //We have changed the user password, change status
            $status = true;

            //Since we updated the user, we don't need to proceed through the loop
            break 1;
        }
    }

    //This is the output data
    $outputData = array();

    //Since we broke the array into users, we need to put it back into a 1d array
    foreach($data as $userID=>$user){
        $outputData[] = implode( ' ', $user );
    }

    //Implode the array so we can put it back in the file
    $outputData = implode( " ", $outputData );

    //Write the data to the file.
    file_put_contents( "data.txt", $outputData );

    //Return the status, which will be true.
    return $status;
}
0 голосов
/ 01 ноября 2018
public function passAddOrChange($user, $pass)
{
    // $this->storage <--- path to file with <user:pass> data
    // json_last_error() != true, file_get_content() != false; 
    $passwords = (array)json_decode(file_get_contents($this->storage));
    $passwords[$user] = $pass;
    file_put_contents($this->storage, json_encode($passwords));
}
...