Autor Zpráva
Eflyax
Profil
Ahoj,

potřeboval bych ve své aplikaci pomoct s funkcí změna hesla.
Hesla a jména nemám uloženy v databázi ale v souboru, a to takto:

<?php 
...
nějáké příkazy
...
if 
(($Njmeno == "jmeno1" && $Nheslo == "heslo1") || 
($Njmeno == "jmeno2" && $Nheslo == "heslo2") ||
($Njmeno == "jmeno3" && $Nheslo == "heslo3") ||
($Njmeno == "jmeno4" && $Nheslo == "heslo4") ||
($Njmeno == "jmeno5" && $Nheslo == "heslo5") ||
($Njmeno == "jmeno6" && $Nheslo == "heslo6"))
....
další příkazy
....
?>


Představoval bych jsi to takto:
Otevírat soubor po řádcích v cyklu.
Během toho porovnávat jméno v souboru se jménem v session (jeho přihlašovacím jménem).
Pokud se jeho jméno najde, vyhledá se jeho straré heslo (přijde formulářem) a nahradí se novým heslem a celé se to uloží.

Formulářem tedy přijde staré heslo a 2x nové (kontrola překlepu).
-------------

Jak mám ten soubor číst po řádcích, hledat v něm a následně nahrazovat?
Řekl bych, že to bude vypadat zhruba takto:
<?php
$jmeno = $_SESSION['jmeno'];
$stare = $_REQUEST['stare'];
$nove1 = $_REQUEST['nove1'];
$nove2 = $_REQUEST['nove2'];

if($nove1 !== $nove2)
    {
    echo "Nová hesla nejsou stejná";
    }
    else  // nová hesla jsou stejná -  vyhledání řádku se jménem uživatele
    { 
      $soubor = file('login.php');
      do {
        $linka = fgets($soubor);
        $hledáníJména = strpos ($linka, $jmeno);
        ???  ...
        ...
      }
   while ($hledáníJména);  	
   }         
}
?>
johnl
Profil
$jmeno[1] = 'jmeno1'; $heslo[1] = 'heslo1';
$jmeno[2] = 'jmeno2'; $heslo[2] = 'heslo2';
$jmeno[3] = 'jmeno3'; $heslo[3] = 'heslo3';

...
$kolik = count($jmeno);
for($i=1;$i<=$kolik;$i++){
if($_POST["login"]==$jmeno[$i] and $_POST["password"]==$heslo[$i]){/* Údaje jsou shodné */}
}

Dá se to napsat mnohem elegantněji, třeba pomocí foreach..

Uložení třeba (to je jedna z těch horších variant):
file_put_contents("usr.php",str_replace("$heslo[3] = 'heslo3';","$heslo[3] = 'heslo4';", file_get_contents("usr.php")));
Tori
Profil
johnl:
V tom replace mají být buď oba řetězce v apostrofech, anebo escapovat dolary.

Šlo by použít i standardní formát .ini souborů (ale uložený jako PHP):
; <php // středník = komentář v .ini
jmeno1 = "tajné heslo"
jmeno2 = "jiné heslo"
Číst do pole (jmeno=>heslo) funkcí parse_ini_file a pro zápis si dopsat vlastní.
Eflyax
Profil
johnl:
Pořád mi to nějak nechce fungovat...

Obsah souboru list.php
<?php
if 
       (
($Njmeno[1] == "nějakéjméno1" && $Nheslo[1] == "nějakéheslo2") || 
($Njmeno[4] == "nějakéjméno1" && $Nheslo[4] == "nějakéheslo2")
        )
?>

(tento soubor je includovan v jiném souboru, takže není celý - funguje to)

A zde skript zmenahesla.php:
(převezme data z formuláře a změní heslo)
<?php
 

$uzivatel = $_SESSION['jmeno'];
$stare = $_REQUEST['stare'];
$nove1 = $_REQUEST['nove1'];
$nove2 = $_REQUEST['nove2'];

if($nove1 !== $nove2)
    {
    echo "Nová hesla nejsou stejná";
    }
    else  
    // nová hesla jsou stejná 
    { 
     $soubor = file("list.php");
     
    $kolik = count($Njmeno);
        for($i=1;$i<=$kolik;$i++)
        {
        
            if($uzivatel == $Njmeno[$i] and $stare == $Nheslo[$i])
            {
             str_replace("$stare","$nove2","$soubor");
              echo "Heslo změněno!";
            }
        }
    }
?>


Když to takto spustím, je bílá obazovka.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: