PHP-fråga om $_SESSION-funktionen

Permalänk

PHP-fråga om $_SESSION-funktionen

Har ett PHP script som ser ut som nedan. Den läser in en sträng med 16 st tal separerade med tab. En rad.
Mitt problem är nu att datat, som tycks bli uppdelat efter explode, inte bibehålles tills då jag ska spara datat.

Scriptets funktion: Datat från filen fyller på en tabell och sen är det meningen att jag ska kunna ändra i valfri cell och sen spara.

Har jag missuppfattat $_SESSION?

<?php session_start(); $dta=array(); $_SESSION['dta']=$dta; if(isset($_POST['Öppna'])) { ...fopen... $var=fgets($fil); $_SESSION['dta']=explode("\t", $var); ...fclose... echo $_SESSION['dta'][0].", ".$_SESSION['dta'][1]; //Kontroll av att indatat har delats upp....funkar! } else if(isset($_POST['Spara'])) { echo $_SESSION['dta'][0].", ".$_SESSION['dta'][1]; //Här finns inte datat kvar! } ?>

Förtydligade rubrik från: "$_SESSION ??????" eftersom den tolkades som spam/TY
Permalänk

Jag tror det har nåt med rad 2 & 3 i scriptet att göra. Andra klicket på knappen "spara" raderar arrayen. Men hur skriva?

Skickades från m.sweclockers.com

Permalänk
Medlem

Skriptet börjar med att omedelbart och ovillkorligt skriva över hela innehållet i $_SESSION['dta'] med en tom array. Varför gör du det om du vill ha beständig data där?

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk

Ja. Jag insåg det när jag kom hem som jag skrev i kommentaren. Jag har tyvärr inte så stor erfarenhet än men detta gör jag inte om igen.

Skickades från m.sweclockers.com

Permalänk
Skrivet av LemonIllusion:

Skriptet börjar med att omedelbart och ovillkorligt skriva över hela innehållet i $_SESSION['dta'] med en tom array. Varför gör du det om du vill ha beständig data där?

Hur gör man då för att inte den ska skrivas över mellan varje gång?

Permalänk
Medlem
Skrivet av Sweedland:

Hur gör man då för att inte den ska skrivas över mellan varje gång?

Det beror på vad du vill göra. Det är högst oklart utifrån koden eftersom du inte inkluderat den i sin helhet och du ger ingen förklaring som jag förstår heller. Duger det inte att ta bort de två raderna? Vad tycker du att de fyller för syfte?

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Skrivet av LemonIllusion:

Det beror på vad du vill göra. Det är högst oklart utifrån koden eftersom du inte inkluderat den i sin helhet och du ger ingen förklaring som jag förstår heller. Duger det inte att ta bort de två raderna? Vad tycker du att de fyller för syfte?

Jag är i botten C programmerare och definierar och deklarerar variabler. Din sista fråga leder in mig på spåret att det inte behövs? Jag goolade och leddes in på det spåret att det skulle skrivas så i början men det funkar inte i den applikationen.
Jag för min del undrar ju om SESSION-variabeln fattar att den ska vara en array.
Mitt inlägg innehåller en enkel förklaring om man jag vill göra. Läsa in fil till en array. Ändra och sen spara.

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av Sweedland:

Jag är i botten C programmerare och definierar och deklarerar variabler. Din sista fråga leder in mig på spåret att det inte behövs? Jag goolade och leddes in på det spåret att det skulle skrivas så i början men det funkar inte i den applikationen.
Jag för min del undrar ju om SESSION-variabeln fattar att den ska vara en array.
Mitt inlägg innehåller en enkel förklaring om man jag vill göra. Läsa in fil till en array. Ändra och sen spara.

PHP är ett anktypat språk. Det är "går det så går det" hela vägen. Du behöver aldrig berätta att något ska vara en en speciell typ på förhand. Det är först när du försöker använda ett objekt eller värde på ett sätt som det inte går att använda på som det skiter sig.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Skrivet av LemonIllusion:

PHP är ett anktypat språk. Det är "går det så går det" hela vägen. Du behöver aldrig berätta att något ska vara en en speciell typ på förhand. Det är först när du försöker använda ett objekt eller värde på ett sätt som det inte går att använda på som det skiter sig.

Jag har börjat förstå det. Använder mycket Echo för att testa om det funkar. Jag är imponerad av php. Kraftfullt på nåt skumt sätt.

BTW, Det var mkt bra att du förklarade det där med "går det så går det". Det ger mig en förståelse.

Skickades från m.sweclockers.com

Permalänk
Medlem

Php är ett kraftfullt språk som kan användas till mycket. Många webappar bygger på php även om det kommer mer och mer nya språk och metoder att bygga applikationer.

Jag försöker tolka ditt script men blir inte så klar av vad du vill göra. När du lagrar något i en session får du med dig innehållet på alla dina sidor om du har session_start() ; överst i din kod.

Om du vid tex en inloggning sparar följande $_SESSION['user'] = "marmelad". Så kommer du på en annan sida kunna skriva echo $_SESSION['user'] ; om du har session_start() ovanför.

Hoppas detta förklarar lite mer och kan peka dig i rätt riktning? Annars får du förklara hur du tänker så blir det lättare att hjälpa

Permalänk
Skrivet av robbzor:

Php är ett kraftfullt språk som kan användas till mycket. Många webappar bygger på php även om det kommer mer och mer nya språk och metoder att bygga applikationer.

Jag försöker tolka ditt script men blir inte så klar av vad du vill göra. När du lagrar något i en session får du med dig innehållet på alla dina sidor om du har session_start() ; överst i din kod.

Om du vid tex en inloggning sparar följande $_SESSION['user'] = "marmelad". Så kommer du på en annan sida kunna skriva echo $_SESSION['user'] ; om du har session_start() ovanför.

Hoppas detta förklarar lite mer och kan peka dig i rätt riktning? Annars får du förklara hur du tänker så blir det lättare att hjälpa

Orsaken till att jag använder php/apache2 är just det att man slipper förlita sig på nån tredjeparts app för mobiltelefoni utan istället kan använda browsern. Dessutom har jag bara ett ställe och underhålla. Intelligensen samlad på en plats om du förstår.

Angående SESSION. För mig innebär det att den lagrar variabler otroligt globalt. Scoopet när över hela siten låter det som. Du kanske måste starta om apache2 för att släppa variablerna och minnet?
Det är session_start() som möjliggör för koden att accessa variablerna.

Min app ska helt enkelt läsa in en datarad med 16 st data separerade med tab när jag trycker knappen Öppna. I samband med det ska den fylla 16 st fält.
I det läget hamnar sidan i standby s.a.s. Då kan jag ändra datat i fälten (om jag vill) och trycka Spara. Då skriver den ut data till samma fil i samma format.
Thats it.

Tacksam för input.

Permalänk
Medlem

Session är väl mellan en klient och din server, varje klient ska ha en egen session vad jag vet och den ör global i php, startsession hämtar den sessionen eller skapar en om den inte fanns ungefär.

Jag är långt från en expert på php eller session men det är så jag fattat det iaf

Skickades från m.sweclockers.com

Permalänk
Medlem

För att döda en sessions variabel kan du använda session_destroy() eller unset($_SESSION) dessa används ofta vid en logout funktion eller liknande.

Jag förstår fortfarande inte riktigt varför du ska använda sessioner? Du kan ju öppna filen via ett php script och använda jquery/ajax för att hämta/editera och spara filen..

Permalänk
Skrivet av robbzor:

För att döda en sessions variabel kan du använda session_destroy() eller unset($_SESSION) dessa används ofta vid en logout funktion eller liknande.

Jag förstår fortfarande inte riktigt varför du ska använda sessioner? Du kan ju öppna filen via ett php script och använda jquery/ajax för att hämta/editera och spara filen..

SESSIONer har jag anv. mig av tidigare med lyckats resultat. Generellt, jag använder den metod jag känner till och som gör jobbet på kortaste tid och som blandar in minimalt med ny teknik. Rätt eller fel? Vet ej då jag inte har gått nån "kurs" eller "studerat på universitet" denna genre av programmering (server, php, html, browsers....). Jag försöker hålla mig till EN sak i taget och för tillfället är det PHP/HTML.
CSS hade jag gärna satt mig in i men har inte möjlighet till det nu. Dessutom lite overkill just nu då funktion, budget, lev.tid är viktigare än designen.

destroy() låter som nåt å anropa när man klickar "Huvudmeny".

Permalänk
Skrivet av Sweedland:

Min app ska helt enkelt läsa in en datarad med 16 st data separerade med tab när jag trycker knappen Öppna. I samband med det ska den fylla 16 st fält.
I det läget hamnar sidan i standby s.a.s. Då kan jag ändra datat i fälten (om jag vill) och trycka Spara. Då skriver den ut data till samma fil i samma format.
Thats it.

Eftersom datan finns i din fil hela tiden, och du endast läser ut den och presenterar den för användaren som ska kunna ändra den, så finns det ingen anledning till att använda sessioner alls.

Det borde räcka med att helt enkelt läsa ut datan från filen och presenstera den i form av input-fält eller liknande. När användaren sen väljer att spara så läser du ut värdena från input-fälten och skriver tillbaka till filen.

Permalänk
Skrivet av protovaffe:

Eftersom datan finns i din fil hela tiden, och du endast läser ut den och presenterar den för användaren som ska kunna ändra den, så finns det ingen anledning till att använda sessioner alls.

Det borde räcka med att helt enkelt läsa ut datan från filen och presenstera den i form av input-fält eller liknande. När användaren sen väljer att spara så läser du ut värdena från input-fälten och skriver tillbaka till filen.

Det är väl här det brister för mig. När jag läste in datat från filen (efter att jag valt fil och klickat Öppna) så läste jag in filen i separata variabler typ $s1, $s2.... och sen i HTML-koden så hade jag <?php echo $s1; ?> etc. Funkade bra.
När jag sen ändrade i fälten och klickade på Spara så hade datat i $s1..$s16 försvunnit. POST[] gav nada ut. I min värld så tänkte jag att Spara kör scriptet igen och datat från föregående körning inte fanns kvar. Därför använder jag SESSION.
Här har jag nog en kunskapslucka...men så vitt jag förstår så finns ju bef. och ändrat data jag vill ha i browsern och inte i servern efter andra klicket på Spara? Jag kan få datat till servern genom en POST...
hmm....nu börjar jag förstå dig. Jag får ju datat skickat till Servern efter klicket på Spara genom POST. Varför ska datat som läses in sparas i en SESSION när det redan sparas i fältet i browsern? Jag kan inte svara på det nu. Varför krånglade det för mig?

Permalänk

@Sweedland: Har du dubbelkollat att det står method="post" i form-taggen? Och vad händer om du dumpar ut POST-globalen? Alltså var_dump($_POST);

Permalänk
Skrivet av protovaffe:

@Sweedland: Har du dubbelkollat att det står method="post" i form-taggen? Och vad händer om du dumpar ut POST-globalen? Alltså var_dump($_POST);

Jag kollade och NU står det POST men nu har jag uppdaterat hela koden. Det var i nåt läge jag minns att jag "missade" nåt sånt tidigare. Det kan ha varit att det saknades en POST. Jag tror inte det faktiskt eftersom FORM omslöt alla kontroller på sidan och eftersom första knapptryckn. som läste in filen fungerade men nästa klick på Spara inte fungerade.
Jag ska vid tillfälle backa bandet. Jag har revisionshantering på koden onboard.