11. september 2011 - 16:09Der er
18 kommentarer og 1 løsning
Online liste, registrering af myusername?
Hej eksperter. Jeg har et online script, som angiver hvor mange personer der er online, men ikke HVEM der er online. Jeg har oprettet et "myusername"-felt i min tabel (user_online). Jeg ved bare ikke, hvordan jeg skal få den til at registrere det der myusername.
dne skal vel kaldes for hver side der besøges, for at være retvisende...?
du har efterhånden stillet en del spørgsmål her og fælles for dem alle er at alle dine filer starter med en hel masse database-kode - det ville gøre det meget nemmere for dig at lave en funktion der forbinder til databasen som du kan kalde i starten af hver fil der skal bruge databasen.
I tråden http://www.eksperten.dk/spm/946979 foreslog jeg kode til at vise navnene på de brugere der er online, givet at feltet 'myusername' i tabellen 'user_online' indeholder brugernavnene. Du stillede så i tråden det yderligere spørgsmål hvordan du fik brugernavnene ind i tabellen. Det kunne jeg ikke svare på, fordu du ikke havde fortalt hvordu får brugernavnene fra.
Det fortæller du så i denne tråd. Filen main_login.php indeholder en formular, hvor brugeren, blandt andet, udfylder sit brugernavn. Formularen kalder så filen checklogin.php. I den fil definerer du variabelen $myusername´$?_POST['myusername']. Så en måde at gøre det på kunne være, i checklogin.php linie 33 (efter at det er checket at username og password matcher) at fylde brugernavnet i user_online tabellen. For eksempel:
mysql_query("INSERT INTO user_online(session, time) VALUES('session_id', '$myusername')");
Milla-Tigerdyr, giv genlyd! Hjalp mit (eller de andres) indlæg og kan du nu lukke? Eller fortæl hvor langt du kommer og hvor der opstår problemer. Eller har du lagt det til side? (Er du kommet et skridt forud for dig selv - endnu ikke nok generel php kendskab til at kunne stykke scripts sammen?)
Hvis du tager en pause, så luk venligst spørgsmålet i mellemtiden og opret et nyt når du er klar. Så bliver vi ikke hængende i et åbent spørgsmål.
Jeg opretter dette som et svar du kan acceptere hvis jeg har hjulpet (efter at have bedt om svar fra andre der har hjulpet.) Alternativt opretter du selv et svar og accepterer det.
Hvad er situationen? Kan du logge på? Bruger du koderne main_login.php, checklogin.php, og login_success.php som du viser, eller har du lavet noget om? Bruger du en webside man kan kikke på? Er det så koden user_login.php der giver en blank side? Kan du vise user_login.php koden som den ser ud nu?
Jeg kan godt logge på, og jeg havde lavet checklogin.php om, ved at placere den kode du sendte i linje 33, som du anbefalede. Men når jeg så gik ind på "user_login.php" så var der blot en blank side.
Hvis user_online.php siden er blank, er det sansynligvis fordi serveren ikke kan forstå koden. Så du skal igang med at debugge trin for trin.
1. For det første lavede jeg en fejl i #3:
mysql_query("INSERT INTO user_online(session, time) VALUES('session_id', '$myusername')");
skulle naturligvis have været
mysql_query("INSERT INTO user_online(session, myusername) VALUES('session_id', '$myusername')");
Ret det og se om user_login.php så virker. Sandsynligvis ikke - jeg kan ikke se nogen forbindelse mellem de to koder således at fejl i den ene skulle gøre den anden ulæselig.
2. Så lægger jeg mærke til at koden starter med det forkortede <? i stedet for med <?php . Der er nogle servere, der ikke accepterer den forkortede notatie, så prøv at starte med <?php . Man ved aldrig, måske virker det.
3. Ellers prøv trin for trin at isolere problemet i user_login.php. Du ved uden tvivl, at php kode mellem /* og */ betragtes som kommentar. Hvis man sætter /* og */ rundt om en kodefejl, så er den isoleret og påvirker ikke resten af koden.
Det jeg nok selv ville gør som trin 1 er følgende:
Altså du sætter session_start() udenfor /* og */. Hvis du så får en blank side, så må det være koden $session=session_id(); det er galt med. Hvis du får abc at se, så flytter du endnu en (eller nogle få) linier af koden udenfor /* og */, og det bliver du ved med indtil du får den blanke side. Så kan du være temmelig sikker på, at problemet, eller et af dem, ligger i den kode du sidst flyttede ud.
Når det er lykkedes dig at isolere fejlen (eller den første fejl,) så fortæl om det her.
Jamen til lykke med resultatet ved at de-bugge, især med at du ikke alene fandt frem til fejlen, men også rettede den. Jeg har lidt travlt lige nu, jeg kikker videre senere på dagen.
Jeg er tilbage. Du bruger formodenlig stadig koden i http://pastebin.com/byvDARPQ , din oprindelige kode. Jeg foreslog i http://www.eksperten.dk/spm/946979 hvordan du retter den kode til så den viser hvem der er logget på i stedet for blot hvor mange. Eller har du prøvet mit forslag, men det virker ikke?
Jeg har lige fundet ud af at første gang man går ind på "user_online", der siger den f.eks "Brugere online: Admin" men hvis man så går ind på en anden side, og tilbage på "online brugere", så står der ikke længere at jeg er online?
Jeg går ud fra, at du bruger formularen på main_login.php til at logge på som admin. Derved startes en session. Når du trykker på knappel 'Login' sendes du til checklogin.php. Sessionen overføres til den side.
Hvis checklogin.php finder ud af, at du er god nok, sendes du videre til login_success.php. Sessionen overføres også til den side.
På login_success.php bliver admin indsat som bruger i tabellen user_online sammen med session_id.
Når du så åbner user_online.php, så overføres sessionen til den side, og tabellen user_online forespørges for brugere med denne session.
Den gode nyhed du fortæller er, at programmet virker: du får det korrekte resultat. Det er jeg glad for at høre.
Den dårlige nyhed er så, at når du går til en anden side og derefter kommer tilbage til user_online.php, så får du ikke vist, at admin er online. Det lyder for mig som om du taber sessionen undervejs. Hvis den session du oprettede har session_id = 'xyz25' og hvis du så kommer tilbage til user_online.php med session_id = NULL, så forespørges user_online for brugere med session_id NULL, og dem står der ingen af. I så fald giver programmet stadig det korrekte resultat, nemlig ingenting.
Nu er sessions ikke mit speciale. Jeg ved, at i nogle tilfælde overføres sessionen til en side blot ved at begynde med 'session_start' og i andre tilfælde skal der mere til, men jeg er ikke helt sikker på hvad der er hvad.
Jeg tror vi har arbejdet os frem til kode der giver navnene på de der er online, men at du nu har endnu et problem, nemlig at du taber sessionen. Det problem skal der nok friske øjne til. Jeg foreslår, at du lukker dette spørgsmål, opretter et nyt om ikke at kunne vedligeholde sessionen, viser koden som den nu er, og forklarer hvad det er for andre sider du går på og måske viser din session behandling på de sider.
Ja, det må vel være det der sker. Jeg acceptere dit svar længere oppe, tak for hjælpen :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.