2018-02-13, 10:09
  #13
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av Proton
Det är inget konstigt med denna output, det är resultatet av att ha serialiserat din array, då ser den ut sådär.

Du ska inte röra den det där datat, gör du det kommer du inte kunna köra unserialize på det och få tillbaka det som en associativ array, s8 och s50 anger ett offset i strängen, i detta fall hur många tecken som ingår i ditt username respektive password.


Serialize är således inte direkt avsett att vara human readable, men fördelen är att när du kör en unserialize på det kommer det tillbaka som en associativ array som du kan använda direkt utan att behöva själv lista ut var ditt password och usernamn börjar och slutar.

Serialize och fopen har inte mycket med varandra att göra btw, fopen öppnar en fil, serialize serialiserar ett objekt, variabel eller array så du kan spara den på fil i serialiserad form och sedan läsa tillbaka den och använda den som om inget hänt med unserialize. Hur hade du annars tänkt att spara exempelvis en array på disk? Visst, det går ju såklart att hitta på sitt eget sätt att spara det, men varför uppfinna hjulet igen, speciellt eftersom det riskerar att bli fyrkantigt, när det finns inbygga konstruktioner för att göra samma sak, fast mycket bättre?

Läs php-manualen nu om serialize och fopen så ska du se att det klarnar.

Okej, jag fattar. Jag skiter således i att snygga till min databas. Och ja, jag läste på om serialize() och fopen() och dess tillhörnade fwrite() och fclose() osv i PHP-manualen inatt. Jag förstår vad du menar nu.

Nu ska jag se om jag kan lista ut hur man kan läsa denna data, samt implementera någon slags form validation för att möjliggöra inloggning alternativt utestängning. Tack för din hjälp!
Citera
2018-02-13, 10:17
  #14
Medlem
Protons avatar
Citat:
Ursprungligen postat av Vetenskapspojken
Okej, jag fattar. Jag skiter således i att snygga till min databas. Och ja, jag läste på om serialize() och fopen() och dess tillhörnade fwrite() och fclose() osv i PHP-manualen inatt. Jag förstår vad du menar nu.

Nu ska jag se om jag kan lista ut hur man kan läsa denna data, samt implementera någon slags form validation för att möjliggöra inloggning alternativt utestängning. Tack för din hjälp!
Kom ihåg att har du inte petat på datat så funkar unserialize alldeles utmärkt.

Detta, tillsammans med inläggen i tråden, blir en bra start på ditt loginförfarande tror jag, men lite ska du väl göra själv med. Det verkar dock som om du är på rätt spår i denna övning.
Citera
2018-02-13, 10:23
  #15
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av Proton
Kom ihåg att har du inte petat på datat så funkar unserialize alldeles utmärkt.

Detta, tillsammans med inläggen i tråden, blir en bra start på ditt loginförfarande tror jag, men lite ska du väl göra själv med. Det verkar dock som om du är på rätt spår i denna övning.

Exakt, datan låter jag vara. Måste erkänna att jag har lite problem med att få tillgång till datan i min associativa array, men detta är ingen vädjan efter hjälp, jag vill försöka lösa det själv först!

Men om jag kör fast totalt så ropar jag på hjälp! Det lär ju gå att googla sig fram till det eller hitta det på StackOverflow/PHP-manualen.
Citera
2018-02-16, 14:04
  #16
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av Proton
Det är inget konstigt med denna output, det är resultatet av att ha serialiserat din array, då ser den ut sådär.

Du ska inte röra den det där datat, gör du det kommer du inte kunna köra unserialize på det och få tillbaka det som en associativ array, s8 och s50 anger ett offset i strängen, i detta fall hur många tecken som ingår i ditt username respektive password.


Serialize är således inte direkt avsett att vara human readable, men fördelen är att när du kör en unserialize på det kommer det tillbaka som en associativ array som du kan använda direkt utan att behöva själv lista ut var ditt password och usernamn börjar och slutar.

Serialize och fopen har inte mycket med varandra att göra btw, fopen öppnar en fil, serialize serialiserar ett objekt, variabel eller array så du kan spara den på fil i serialiserad form och sedan läsa tillbaka den och använda den som om inget hänt med unserialize. Hur hade du annars tänkt att spara exempelvis en array på disk? Visst, det går ju såklart att hitta på sitt eget sätt att spara det, men varför uppfinna hjulet igen, speciellt eftersom det riskerar att bli fyrkantigt, när det finns inbygga konstruktioner för att göra samma sak, fast mycket bättre?

Läs php-manualen nu om serialize och fopen så ska du se att det klarnar.

Nu har jag kört fast lite. Har försökt att på alla möjliga sätt köra unserialize() på min data (variabeln $userData) utan att lyckas. Jag vet att jag behöver ännu en parameter, men förstår inte riktigt vad detta ska vara. Efter lite försök så inser jag nu att unserialize($userData) inte fungerar.

Jag har läst PHP-manualen och googlat som en galning, men många blandar in urldecode()-funktionen. Är denna verkligen nödvändig för mitt syfte? Jag har ju aldrig, och vill heller, inte köra urlencode().

PS. Jag ber om ursäkt för om jag har googlat dåligt, men har varit en del personligt knas i och med att jag varit på psykakuten och är i en främmande stad, blivit rånad, etc.
Citera
2018-02-16, 14:25
  #17
Medlem
Protons avatar
Citat:
Ursprungligen postat av Vetenskapspojken
Nu har jag kört fast lite. Har försökt att på alla möjliga sätt köra unserialize() på min data (variabeln $userData) utan att lyckas. Jag vet att jag behöver ännu en parameter, men förstår inte riktigt vad detta ska vara. Efter lite försök så inser jag nu att unserialize($userData) inte fungerar.

Jag har läst PHP-manualen och googlat som en galning, men många blandar in urldecode()-funktionen. Är denna verkligen nödvändig för mitt syfte? Jag har ju aldrig, och vill heller, inte köra urlencode().

PS. Jag ber om ursäkt för om jag har googlat dåligt, men har varit en del personligt knas i och med att jag varit på psykakuten och är i en främmande stad, blivit rånad, etc.
Jag skådar både i min kristallkula och kaffesump men är trots detta oförmögen att ta kontakt med andarna för att på ett magiskt vis få reda på vad som pågår i din kod, antar att jag inte betalat kristallkuleavgiften i tid den här gången heller.

Hur vore det således med lite kod att kolla på, det hade ju underlättat felsökningen betydligt mer än "det funkar inte".
Citera
2018-02-16, 19:31
  #18
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av Proton
Jag skådar både i min kristallkula och kaffesump men är trots detta oförmögen att ta kontakt med andarna för att på ett magiskt vis få reda på vad som pågår i din kod, antar att jag inte betalat kristallkuleavgiften i tid den här gången heller.

Hur vore det således med lite kod att kolla på, det hade ju underlättat felsökningen betydligt mer än "det funkar inte".

Jag får be om ursäkt, jag tänkte givetvis posta kod när jag började skriva inlägget, men min nya medicin gör mig lite glömsk. Sorry för OT, här kommer koden:

[PHP]
<?php

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

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

/* Jag trollar lite med trollspöt jag fick av gurun vid namn Proton och gör om användardatan till en assosicativ array */

$userData = array("username" => $username, "password" => password_hash($password, PASSWORD_DEFAULT);

$database = fopen("Database.txt", "w");

fwrite($database, serialize($userData);
fclose($database);

// Nu blir det svårt...

unserialize($userData);

/* Jag är ganska misstänksam mot min egen kod, tror det saknas en parameter i unserialize, är väldigt osäker på vilken dock och mina googlingar har inte givit resultat... */

print_r($userData);

// Detta genererar bara en massa otrevliga felmeddelanden.

?>
[/PHP]

Visst, jag skulle kunna googla (vilket tar för evigt då min medicin gör mig typ hög), eller fråga på StackOverflow (men där är alla dryga fittor och downvotar mina frågor och svar trots att jag är ödmjuk och så saklig som möjligt).

Därför vädjar jag om din hjälp, för du är fan bäst i hela världen Proton.
Citera
2018-02-16, 19:49
  #19
Medlem
Citat:
Ursprungligen postat av Vetenskapspojken
[PHP]
unserialize($userData);
[/PHP]

Du ska göra unserialize på det som finns i filen, typ:

Citat:
[PHP]
$restoredUserData = unserialize(file_get_contents('Database.txt'));
[/PHP]
Citera
2018-02-16, 20:16
  #20
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av alamos
Du ska göra unserialize på det som finns i filen, typ:

Okej, tack!

Måste jag specificera någonting mer än just textfilens namn? Alltså, öppnar jag textfilen, som till skillnad från när man bara använder typ fwrite(), utan istället när man använder serialize(), så är det inte human readable som Proton redan konstaterat. Det finns däremot några indikatorer på vad som är vad? Eller räcker det med koden du publicerade, och sedan har man en array man kan jobba med?
Citera
2018-02-16, 22:25
  #21
Medlem
Protons avatar
Citat:
Ursprungligen postat av Vetenskapspojken
Okej, tack!

Måste jag specificera någonting mer än just textfilens namn? Alltså, öppnar jag textfilen, som till skillnad från när man bara använder typ fwrite(), utan istället när man använder serialize(), så är det inte human readable som Proton redan konstaterat. Det finns däremot några indikatorer på vad som är vad? Eller räcker det med koden du publicerade, och sedan har man en array man kan jobba med?
Raden
[PHP]
$restoredUserData = unserialize(file_get_contents('Database.txt'));
[/PHP]Kommer ta innehållet i filen database.txt och avserialiserra den till vad det nu kan vara, läs dokumentationen till unseialize.

I ditt fall seerialiserade du en associativ array, vilket kommer innebära att efter att ovanstående rad körts kommer vaiabeln $restoredUserData vara den associativa arrayen du serialiserade. Funktionen file_get_contents gör vad den låter som, den kommer läsa innehållet i filen och skita ur sig det precis som det lästes in.

Du kommer således med raden
[PHP]
$userName = $restoredUserData["username"];
[/PHP]få tag på just username precis som du sparade det.

När du landat efter din medicintripp lär det bli klarare för dig.
Citera
2018-02-17, 00:43
  #22
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av Proton
Raden
[PHP]
$restoredUserData = unserialize(file_get_contents('Database.txt'));
[/PHP]Kommer ta innehållet i filen database.txt och avserialiserra den till vad det nu kan vara, läs dokumentationen till unseialize.

I ditt fall seerialiserade du en associativ array, vilket kommer innebära att efter att ovanstående rad körts kommer vaiabeln $restoredUserData vara den associativa arrayen du serialiserade. Funktionen file_get_contents gör vad den låter som, den kommer läsa innehållet i filen och skita ur sig det precis som det lästes in.

Du kommer således med raden
[PHP]
$userName = $restoredUserData["username"];
[/PHP]få tag på just username precis som du sparade det.

När du landat efter din medicintripp lär det bli klarare för dig.

Okej, jag förstår exakt. Skulle det vara möjligt att med samma tillvägagångssätt istället deklarera en vanlig array, och sedan när man vill få tillgång till det första föremålet i array:en anropa index 0? Eller varför ska datan vara i just en associativ array? Vad har det för syfte?

Vill för övrigt påpeka att jag fullt förstår koden du skrev, med andra ord så har medicinen gått ur
Testade att skriva ut den associativa array:en med print_r() och det fungerade utmärkt. Tack så mycket!
Citera
2018-02-17, 08:36
  #23
Medlem
Protons avatar
Citat:
Ursprungligen postat av Vetenskapspojken
Okej, jag förstår exakt. Skulle det vara möjligt att med samma tillvägagångssätt istället deklarera en vanlig array, och sedan när man vill få tillgång till det första föremålet i array:en anropa index 0? Eller varför ska datan vara i just en associativ array? Vad har det för syfte?

Vill för övrigt påpeka att jag fullt förstår koden du skrev, med andra ord så har medicinen gått ur
Testade att skriva ut den associativa array:en med print_r() och det fungerade utmärkt. Tack så mycket!
Du kan serialisera snudd på vilka typer som helst, arrayer, strängar, objekt... Läs manualen!

Fördelen med att använda en asociativ array i det här fallet är att det är mer talande för innehållet. Raden
[PHP]
$username = $myArray["username"];
[/PHP]säger ju betydligt mer om vad man kan tänkas få ut än raden
[PHP]
$username = $myArray[0];
[/PHP]håller du inte med om det?

Dessutom blir det ju enklare framöver att läsa koden, speciellt om $username inte heter så utan något annat framöver. För det tredje så blir ordningen i arrayen av mindre betydelse, sparar du data i den med [PHP]$username = $myArray["username"];[/PHP]lär det bli svårt för dig framöver att motivera varför buggen uppstog när det helt plötsligt kom ut ett skonummer eller politisk åskådning på detta index, det är däremot inte lika självklart med [PHP]$username = $myArray[0];[/PHP].

En fråga om läsbarhet med andra ord.
Citera
2018-02-17, 10:20
  #24
Medlem
Vetenskapspojkens avatar
Citat:
Ursprungligen postat av Proton
Du kan serialisera snudd på vilka typer som helst, arrayer, strängar, objekt... Läs manualen!

Fördelen med att använda en asociativ array i det här fallet är att det är mer talande för innehållet. Raden
[PHP]
$username = $myArray["username"];
[/PHP]säger ju betydligt mer om vad man kan tänkas få ut än raden
[PHP]
$username = $myArray[0];
[/PHP]håller du inte med om det?

Dessutom blir det ju enklare framöver att läsa koden, speciellt om $username inte heter så utan något annat framöver. För det tredje så blir ordningen i arrayen av mindre betydelse, sparar du data i den med [PHP]$username = $myArray["username"];[/PHP]lär det bli svårt för dig framöver att motivera varför buggen uppstog när det helt plötsligt kom ut ett skonummer eller politisk åskådning på detta index, det är däremot inte lika självklart med [PHP]$username = $myArray[0];[/PHP].

En fråga om läsbarhet med andra ord.

Jag fattar. Syntaxmässigt är båda tillvägagångssätt likvärdiga, men associativa arrayer bidrar till bättre semantik.

Nu har ju egentligen den första if-satsen egentligen bara uppgiften att samla in data från användaren, spara den i en textfil (i samband med att lösenordet blir en hash), och sen är det klart.

Jag ville testa unserialize()-funktionen för att den vid ett senare tillfälle ska användas i ytterligare en if-sats i samband med inloggningsknappen, för att se om inmatad data stämmer överens med datan i textfilen. Nu när jag börjar få kläm på att skriva och läsa data till hårddisken med hjälp av PHP så ska nog detta inte vara något problem.

Oavsett om jag lyckas eller inte så kommer jag posta koden här i tråden så andra får beskåda mitt verk.

Tack Proton!
__________________
Senast redigerad av Vetenskapspojken 2018-02-17 kl. 10:24.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in