Vinnaren i pepparkakshustävlingen!
  • 3
  • 4
2018-03-02, 10:49
  #37
Medlem
Vetenskapspojkens avatar
Okej, som jag har skrivit i vissa inlägg här i tråden så kan jag inte använda mig av serialize() för att spara datan i en textfil. Jag ser inga andra alternativ än att använda mig av fwrite().

Min kod hittills:

Kod:
<?php

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

    
$username $_POST["username"];
    
$password $_POST["password"];
    
$database fopen("DB.txt""w");

    
fwrite($database"Username: " $username " | Password: " 
    
password_hash($passwordPASSWORD_DEFAULT));

    
fclose($database);

?>

Mitt nuvarande problem är att jag inte kan spara ytterligare en användare, istället så ersätts innehållet i textfilen med en ny användare. Jag gissar att jag måste använda mig av någon if-sats för att ta reda på om användarnamnet redan är upptaget. Hur gör jag detta på bästa sätt?

EDIT: Jag ändrade writemode i fwrite() till "a". Jag har dock ett litet problem med linebreaks. Jag har lagt till "PHP_EOL" i slutet av min fwrite(), för att få info om varje användare på en separat rad, men det verkar inte fungera. Några tips?
__________________
Senast redigerad av Vetenskapspojken 2018-03-02 kl. 10:56.
Citera
2018-03-02, 10:57
  #38
Medlem
Citat:
Ursprungligen postat av Vetenskapspojken
Okej, som jag har skrivit i vissa inlägg här i tråden så kan jag inte använda mig av serialize() för att spara datan i en textfil. Jag ser inga andra alternativ än att använda mig av fwrite().

Min kod hittills:

Kod:
<?php

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

    
$username $_POST["username"];
    
$password $_POST["password"];
    
$database fopen("DB.txt""w");

    
fwrite($database"Username: " $username " | Password: " 
    
password_hash($passwordPASSWORD_DEFAULT));

    
fclose($database);

?>

Mitt nuvarande problem är att jag inte kan spara ytterligare en användare, istället så ersätts innehållet i textfilen med en ny användare. Jag gissar att jag måste använda mig av någon if-sats för att ta reda på om användarnamnet redan är upptaget. Hur gör jag detta på bästa sätt?

Läste du mitt förra inlägg? Det är väldigt smidigt att använda file_put_contents() tillsammans med flaggan FILE_APPEND. Då kommer inte filen skrivas över varje gång, utan varje användare hamnar på en ny rad (om du avslutar varje insättning med PHP_EOL). Men om du prompt vill använda dig av fwrite() så måste du öppna filen i append-läge (a) och inte skrivläge (w) som du gör nu.

EDIT:

Citat:
EDIT: Jag ändrade writemode i fwrite() till "a". Jag har dock ett litet problem med linebreaks. Jag har lagt till "PHP_EOL" i slutet av min fwrite(), för att få info om varje användare på en separat rad, men det verkar inte fungera. Några tips?

Visa gärna kod.
Citera
2018-03-02, 12:18
  #39
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av Nich
Läste du mitt förra inlägg? Det är väldigt smidigt att använda file_put_contents() tillsammans med flaggan FILE_APPEND. Då kommer inte filen skrivas över varje gång, utan varje användare hamnar på en ny rad (om du avslutar varje insättning med PHP_EOL). Men om du prompt vill använda dig av fwrite() så måste du öppna filen i append-läge (a) och inte skrivläge (w) som du gör nu.

EDIT:



Visa gärna kod.

Jag följer nog ditt råd och använder file_put_contents istället. Skulle man kunna säga att det är en motsvarighet till fopen(), fwrite() och sedan fclose()?

I sådana fall är det ju lite mer praktiskt då man inte måste hålla på och öppna/stänga exempelvis en textfil.

Jag återkommer med kod om en liten stund!

EDIT: Jag kommer att använda det du föreslog. Såhär ser min kod ut hittills:

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

    
$username $_POST["username"];
    
$password $_POST["password"];

    
$database "DB.txt";

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

    
file_put_contents($database$userdataFILE_APPEND);



Det jag nu skulle vilja göra är att skapa en if-sats som kollar om ett användarnamn är upptaget eller inte. Det skulle vara mycket enklare om användarnamnet sparades i en array, då jag skulle kunna hitta den med hjälp av array-index, men i det här exemplet så sparas ju allting som en lång string i variabeln $userdata, hur bör jag gå tillväga då?
__________________
Senast redigerad av Vetenskapspojken 2018-03-02 kl. 12:32.
Citera
2018-03-02, 12:51
  #40
Medlem
Citat:
Ursprungligen postat av Vetenskapspojken
Jag följer nog ditt råd och använder file_put_contents istället. Skulle man kunna säga att det är en motsvarighet till fopen(), fwrite() och sedan fclose()?

Ja precis, det är egentligen samma sak som att anropa de funktionerna du nämner. Fördelen är att du slipper hålla koll på öppning och stängning, som du säger.

Citat:
Ursprungligen postat av Vetenskapspojken
Det jag nu skulle vilja göra är att skapa en if-sats som kollar om ett användarnamn är upptaget eller inte. Det skulle vara mycket enklare om användarnamnet sparades i en array, då jag skulle kunna hitta den med hjälp av array-index, men i det här exemplet så sparas ju allting som en lång string i variabeln $userdata, hur bör jag gå tillväga då?

Ja, det är ju en konsekvens av att du inte ville jobba med serialiserade data. Du måste nu hämta varje rad i filen (tips: titta på funktionen file()) och bygga en array av dina data. Sen måste du hitta ett sätt att lista ut vad som är användarnamn och vad som är lösenord. Om du bygger strängen genom att bara skilja användarnamnet från lösenordet med till exempel vertikalstreck eller annat tecken (alltså "Nich | 022aca8f22af201e0715a7354be08bcd") så kan du förslagsvis använda explode().
Citera
  • 3
  • 4

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