Vinnaren i pepparkakshustävlingen!
2018-03-03, 15:14
  #1
Medlem
Vetenskapspojkens avatar
Hej!

Jag sitter för tillfället med en skoluppgift, där jag ska kunna "registrera" en eller flera användare, och spara både användarnamn och tillhörande lösenord i en textfil. Denna textfil är min "databas" tillsvidare, då vi inte börjat arbeta med MySQL ännu.

Följande kod sparar en användare:

Kod:
<?php

if(isset($_POST["register"])) {

    
$username $_POST["username"];
    
$password $_POST["password"];
    
$database "Database.txt";

    
$userdata $username " | " password_hash($passwordPASSWORD_DEFAULT)
    . 
PHP_EOL;

    
file_put_contents($database$userdataFILE_APPEND);

}

?>

Användardatan sparas i "databasen" precis som sig bör. Jag kan dessutom skapa fler än en användare. Nu måste jag extrahera enbart användarnamnet ur min string $userdata, varpå någon föreslog att jag kan använda mig av funktionen explode() för att göra $userdata till en array. Detta fungerar, såtillvida att jag enbart har en användare i databasen, men så fort jag har flera användare i databasen så blir det bara en array av en användare.

Kod:

Kod:
$userdataArray explode(" | "$userdata);

print_r($userdataArray); 

Index 0 i min array är användarnamnet i den senast tillagda användaren, men jag vill kunna kontrollera ett inmatat användarnamn med samtliga sparade användare i databasen. Hur ska jag bära mig åt för att lösa detta?
Citera
2018-03-03, 15:52
  #2
Medlem
Vetenskapspojkens avatar
Okej, om jag lyckats spara hela databasen som en string med file_get_contents, hur jämför jag sedan ett inmatat användarnamn med strängen? Användarnamnet får förekomma EN gång, för annars skulle det ju inte gå att registrera några användare, men det får inte förekomma mer än en gång.
Citera
2018-03-03, 16:33
  #3
Medlem
Tvillingens avatar
Jag skulle läsa filen rad för rad och lägga till varje användare i en array.

Kod:
$users = [];
$file fopen('Database.txt''r');
while(!
feof($file)) {
    
$users[] = explode('|'fgets($file));
}
fclose($file);
print_r($users); 

Ett annat alternativ är att du använder dig av json_encode och json_decode istället. Då kan du spara en array direkt i filen och slippa krångla lika mycket.
Citera
2018-03-03, 16:33
  #4
Medlem
DigiFlaxs avatar
Skulle använda en associativ array och exportera det som JSON.
Citera
2018-03-04, 21:10
  #5
Moderator
Protons avatar
Citat:
Ursprungligen postat av Vetenskapspojken
Hej!

Jag sitter för tillfället med en skoluppgift, där jag ska kunna "registrera" en eller flera användare, och spara både användarnamn och tillhörande lösenord i en textfil. Denna textfil är min "databas" tillsvidare, då vi inte börjat arbeta med MySQL ännu.

Följande kod sparar en användare:

Kod:
<?php

if(isset($_POST["register"])) {

    
$username $_POST["username"];
    
$password $_POST["password"];
    
$database "Database.txt";

    
$userdata $username " | " password_hash($passwordPASSWORD_DEFAULT)
    . 
PHP_EOL;

    
file_put_contents($database$userdataFILE_APPEND);

}

?>

Användardatan sparas i "databasen" precis som sig bör. Jag kan dessutom skapa fler än en användare. Nu måste jag extrahera enbart användarnamnet ur min string $userdata, varpå någon föreslog att jag kan använda mig av funktionen explode() för att göra $userdata till en array. Detta fungerar, såtillvida att jag enbart har en användare i databasen, men så fort jag har flera användare i databasen så blir det bara en array av en användare.

Kod:

Kod:
$userdataArray explode(" | "$userdata);

print_r($userdataArray); 

Index 0 i min array är användarnamnet i den senast tillagda användaren, men jag vill kunna kontrollera ett inmatat användarnamn med samtliga sparade användare i databasen. Hur ska jag bära mig åt för att lösa detta?
Vad är det för fel med att använda samma approach du hade i tråden (FB) Skriva data till textfil med hjälp av PHP - Textfilen blir korrupt om jag får fråga?

Gör du det kan du ju läsa upp din associativa array från fil och sen köra nån slags find på arrayen, det finns inbyggda grejjer för sådant.

Uppfinn inte ett fyrkantigt hjul när det finns färdiga runda fullt fungerande hjul inbyggt i språket är kontentan.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback