Avatar billede jens12 Nybegynder
12. november 2005 - 13:51 Der er 44 kommentarer og
1 løsning

online eller offline

Hej i php eksperter.
Jeg har et brugersystem som bruger sessions,og når man så logger ind så sætter den 1 i min mysql tabel status,og så når brugeren logger ud så sætter den i min tabel 0. Og nu kommer mit spørgsmål, hvordan kan jeg få den til at visse om brugeren er online eller offline?,altså det jeg mener er at den skal visse online hvis den er 1 i databasen og offline hvis den er 0 databasen.håber i forstår i ekesperter?
Ps.jeg kan godt sætte mere kildekode ind,hvis det behøves´...
MVH:
Jens
databassen :

CREATE TABLE `brugere` (
  `id` int(11) NOT NULL auto_increment,
  `brugernavn` varchar(255) NOT NULL default '',
  `adgangskode` varchar(255) NOT NULL default '',
  `navn` varchar(255) NOT NULL default '',
  `alder` varchar(255) NOT NULL default '',
  `civilstatus` varchar(255) NOT NULL default '',
  `fritid` varchar(255) NOT NULL default '',
  `landsdel` varchar(255) NOT NULL default '',
  `billede` varchar(255) NOT NULL default '',
  `point` varchar(255) NOT NULL default '0',
  `Rang` varchar(255) NOT NULL default 'Bruger',
  `logintid` varchar(255) NOT NULL default '',
  `sidstset` varchar(255) NOT NULL default '',
  `status` int(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=24 ;


Kilde kode af index.php :
<?php
    session_start();
    if(isset($_POST['submit']) && $_POST['submit'] && isset($_POST['brugernavn']) && $_POST['brugernavn'] && isset($_POST['adgangskode']) && $_POST['brugernavn']){
        include("connect.php");
        $db_hent = mysql_query("select * from brugere where brugernavn = '$_POST[brugernavn]'");
        $hent = mysql_fetch_array($db_hent);
        if(($_POST['brugernavn'] == $hent['brugernavn']) && ($_POST['adgangskode'] == $hent['adgangskode'])){
            $_SESSION['loggetind'] = "yes";
            $_SESSION['Brugernavn'] = $hent['brugernavn'];
            $_SESSION['Rang'] = $hent['Rang'];
            $tid = time();
            mysql_query("UPDATE nickin_brugere SET logintid = '$tid' WHERE brugernavn = '$_SESSION[Brugernavn]'");
            mysql_query("UPDATE brugere set status = '1' WHERE brugernavn = '$_SESSION[Brugernavn]'");

            header("Location: inde.php");
        }else{
            print "Forkert brugernavn/adgangskode!";
        }
    }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="../style2.css" type="text/css" />
</head>

<body>
<form name="form1" method="post" action="">
<table width="100%">
  <tr>
    <td width="11%" bgcolor="#4D73C3">Login her: </td>
    <td width="89%" bgcolor="#4D73C3">&nbsp;</td>
  </tr>
  <tr>
    <td>Brugernavn:</td>
    <td><input type="text" name="brugernavn"></td>
  </tr>
  <tr>
    <td>Adgangskode:</td>
    <td><input type="password" name="adgangskode"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="submit" value="Login"></td>
  </tr>
</table>
</form>
<p><a href="opret.php">Opret bruger</a></p>
</body>
</html>
Avatar billede kourinsu Nybegynder
12. november 2005 - 20:47 #1
Hvad gør du så, hvis dine brugere ikke trykker logud? Hænger de bare som online for evigt?
Avatar billede jens12 Nybegynder
13. november 2005 - 16:36 #2
Til kourinsu.
Det har jeg faktisk ikke tænkt på.... men hvordan skal jeg så lave det med at folk bliver logget ud efter nogle minutter ? skal jeg så lave det hele om ? Eller kan du lave det?
Avatar billede kourinsu Nybegynder
13. november 2005 - 16:41 #3
Jeg er glad for du spørger :D
Jeg plejer altid at lave onlinelister sådan:
Hver bruger får en kolonne i databasen, der indeholder et unix timestamp (antal sec siden 1/1 1970). Så laver jeg en funktion, der opdatere dette timestamp hver gang brugeren går ind på en ny side i systemet. Så kan man danne onlinelisten udfra brugere, hvis timestamp er blevet opdateret inden for f.eks. 300 sec (5 min).
Avatar billede jens12 Nybegynder
13. november 2005 - 16:44 #4
Til kourinsu.Det lyder meget svært at lave,er det det? Er det noget du kan lave?
Avatar billede kourinsu Nybegynder
13. november 2005 - 16:52 #5
Nej, det er utrolig nemt at lave. Jeg vil ikke lave selve koden for dig, men jeg kan godt guide dig igennem. Har du selv lavet dit loginsystem? Altså kan jeg forvente, at du ved hvordan man henter/opdatere en database?
Avatar billede jens12 Nybegynder
13. november 2005 - 16:55 #6
Jeg vil godt have du guide mig igennem...Altså det er et system jeg har hentet,Men jeg har lavet det en hel del bedre...Jeg har for eksempel rettet en fejl, som gjorde at man kunne logge ind uden brugernavn og adgangskode....
Avatar billede jens12 Nybegynder
13. november 2005 - 16:56 #7
Men den helt store php-ekspert er jeg altså ikke....
Avatar billede kourinsu Nybegynder
13. november 2005 - 17:05 #8
Okay, jeg kan lige prøve med noget pseudo kode, der måske giver en fornemmelsen af, hvordan man kan bygge det op.

Du skal nok starte med at lave din status-felt i databasen om til en varchar.

Så genbruger vi den linje du allerede har i dit loginsystem, nemlig:
mysql_query("UPDATE brugere set status = '1' WHERE brugernavn = '$_SESSION[Brugernavn]'");

...men istedet for "status = '1', skriver vi status= '". mktime() ."'
mktime er phps funktion, til at lave et unix timestamp. Den linje kan du så indsætte i toppen af alle dine sider under loginsystemet. Så bliver status feltet opdateret hver gang en bruger kommmer ind på en ny side.

Når du så vil lave onlinelisten, kan du gøre det med denne sql:
mysql_query("SELECT * FROM brugere WHERE status > '" . mktime(-300) . "'");

Altså vælger vi alle brugere, hvis timestamp er større end "det nuværende tidspunkt - 300 sekunder" dvs. alle brugere, der har været aktive indenfor de sidste 300 sekunder.
Avatar billede jens12 Nybegynder
13. november 2005 - 17:14 #9
okay..Nu har jeg opdateret databasen til det der varchar..og jeg har opdateret den der linje til  mysql_query("UPDATE brugere set status= '". mktime() ." WHERE brugernavn = '$_SESSION[Brugernavn]'");
Hvordan laver jeg så det med at brugeren er online ?
Avatar billede jens12 Nybegynder
13. november 2005 - 17:18 #10
Og hvordan skal jeg lave det med online-listen,hvor den henter brugerne og hvem der er online/offline...?
Avatar billede kourinsu Nybegynder
13. november 2005 - 17:19 #11
Virker det i databasen? Kommer der et tal i omegnen af 1131898771, når du bruger loginsystemet?
Avatar billede jens12 Nybegynder
13. november 2005 - 17:22 #12
Nej det virker ikke.... der står bare : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/www/frac/users/mwf/community/indextest.php on line 6
Forkert brugernavn/adgangskode!
Avatar billede kourinsu Nybegynder
13. november 2005 - 17:26 #13
Du mangler et tegn i din sql-sætning, nemlig ' efter '". mktime() .":

mysql_query("UPDATE brugere set status= '". mktime() ." WHERE brugernavn = '$_SESSION[Brugernavn]'");
Avatar billede jens12 Nybegynder
13. november 2005 - 17:30 #14
Jeg er forvirret:S.Det virker stadig ikke,der står stadig: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/www/frac/users/mwf/community/indextest.php on line 6
Forkert brugernavn/adgangskode!
Avatar billede kourinsu Nybegynder
13. november 2005 - 17:32 #15
Virkede dit loginsystem før? Efter hvad jeg kan se, så er linje 6:
$db_hent = mysql_query("select * from brugere where brugernavn = '$_POST[brugernavn]'");

og den har jeg ikke sagt skulle ændres...
Avatar billede jens12 Nybegynder
13. november 2005 - 17:37 #16
Nu virker den....Men den opdatere ikke ind i kolonen...:S Kolonen ser sådan ud: status  varchar(255)  not null er det rigtigt sat op?
Avatar billede kourinsu Nybegynder
13. november 2005 - 17:40 #17
Ja, men den burde ligge det timestamp ind i kolennen. Har du tilføjet det manglende ' til sql sætningen?
Avatar billede jens12 Nybegynder
13. november 2005 - 17:45 #18
Hov,det må du undskylde,det glemte jeg at tilføje... men nu opdatere den i databasen....
Avatar billede kourinsu Nybegynder
13. november 2005 - 17:46 #19
Nice :D Så nu kommer der altså et 10-cifret tal i databasen, der bliver opdateret hver gang man logger ind? (Bare så vi er enige om, hvor langt vi er)
Avatar billede jens12 Nybegynder
13. november 2005 - 17:52 #20
Jo,den opdatere et 10-cifret tal,hver gang man logger ind...:D:D
Avatar billede kourinsu Nybegynder
13. november 2005 - 17:54 #21
Super cool :D
Så laver du onlinelisten med denne sætning:
mysql_query("SELECT * FROM brugere WHERE status > '" . mktime(-300) . "'");

Kan du selv lave whileløkken til at hive det ud?
Avatar billede jens12 Nybegynder
13. november 2005 - 17:56 #22
skal det stå sådan her :
<?php
include_once("connect.php");
mysql_query("SELECT * FROM brugere WHERE status > '" . mktime(-300) . "'");
?>
"Whileløkken" Nej den kan jeg ikke lave...(jeg aner ikke hvad du taler om)...:S
Avatar billede kourinsu Nybegynder
13. november 2005 - 18:02 #23
Prøv at smide den her ind på en side:
<?php
include_once("connect.php");

$online = mysql_query("SELECT * FROM brugere WHERE status > '" . mktime(-300) . "'");
while($row = mysql_fetch_array($online))
    {
    print $row['brugernavn'];
    print "<br>";
    }
?>
Avatar billede jens12 Nybegynder
13. november 2005 - 18:07 #24
Den viser admin :D...Som jeg har logget ind som. Men hvordan kan jeg så tilføje at ud for admin står der online?:D Og hvordan kan jeg lave sån at når man går ind på admin´s profil så står der online? Håber du vil/hjælpe mig med det...
Avatar billede kourinsu Nybegynder
13. november 2005 - 18:14 #25
Denne liste viser kun profiler, der er online! Den kan så laves om til noget ala:

<?php
include_once("connect.php");
$online = mysql_query("SELECT * FROM brugere");

while($row = mysql_fetch_array($online))
    {
    print $row['brugernavn'];
   
    if($row['status']>mktime(-300))
      {
      print "Online";
      }
      else
        {
        Print "Offline";
            }
       
      print "<br>";
    }
?>
Avatar billede jens12 Nybegynder
13. november 2005 - 18:21 #26
Nej hvor er du genial:D. Hvordan kan jeg så få lagt en status ind på den profil som man er logget ind på...? det jeg mener er hvis jeg er logget ind som admin så står der at jeg er online ind på min profil..?
Avatar billede kourinsu Nybegynder
13. november 2005 - 18:29 #27
Du skal egentlig bare bruge den samme stykke kode, men specificere hvilken profil i sql-sætningen:

<?php
include_once("connect.php");
$online = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");

while($row = mysql_fetch_array($online))
    {
    Print "Denne profil er:"
    if($row['status']>mktime(-300))
      {
      print "Online";
      }
      else
        {
        Print "Offline";
            }
     
     
    }
?>

Jeg vil dog lige gøre opmærksom på, at det har sine fordele altid at bruge id i stedet for brugernavne i sql-udtræk. Tænkt på, hvis en person bookmarker en profil, men personen senere skifter brugernavn. Hvis man altid bruger id, så får man aldrig det problem, da brugere ikke (normalt) kan skifte id.
Avatar billede jens12 Nybegynder
13. november 2005 - 18:37 #28
Det virker ikke,der kommer denne fejl : Parse error: parse error, unexpected T_IF in /web/www/frac/users/mwf/community/profil.php on line 62 Hvorfor virker den ikke?
Avatar billede kourinsu Nybegynder
13. november 2005 - 18:39 #29
Prøv dette (er ikke testet):

<?php
include_once("connect.php");
$online = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");

while($row = mysql_fetch_array($online))
    {
    Print "Denne profil er:"
    if({$row['status']}>mktime(-300))
      {
      print "Online";
      }
      else
        {
        Print "Offline";
            }
   
   
    }
?>
Avatar billede jens12 Nybegynder
13. november 2005 - 18:43 #30
den siger stadig denne fejl : Parse error: parse error, unexpected T_IF in /web/www/frac/users/mwf/community/profil.php on line 62... :(
Avatar billede kourinsu Nybegynder
13. november 2005 - 18:45 #31
Nå, men så prøv:
<?php
include_once("connect.php");
$online = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");

while($row = mysql_fetch_array($online))
    {
    $timestamp=$row['status'];

    Print "Denne profil er:"
    if($timestamp>mktime(-300))
      {
      print "Online";
      }
      else
        {
        Print "Offline";
            }
   
   
    }
?>
Avatar billede jens12 Nybegynder
13. november 2005 - 18:51 #32
Det er godt nok underlig,den siger at der stadig er en fejl,fejlen : Parse error: parse error, unexpected T_IF in /web/www/frac/users/mwf/community/profil.php on line 64
Her har du hele koden (profil.php) :
<?php include_once("check.php") ?>
<?php
include_once("connect.php");
include("menu.php");
$db_profil = mysql_query("select * from brugere where brugernavn = '$_GET[b]'");
$profil = mysql_fetch_array($db_profil);
if($_GET['admin'] == "1"){
if($_SESSION['Rang'] == "Admin"){
mysql_query("update brugere set Rang = 'Admin' where id = '$_GET[bruger]'");
print "Brugeren blev gjort til admin!";
}
}
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="http://www.mvf.frac.dk/sty1e2.css" type="text/css" />
<style type="text/css">
<!--
.style3 {font-size: large}
-->
</style>
</head>

<body>
<table width="60%" border="0">
  <tr>
    <td width="253" height="164"><?php if($profil['billede'] != ""){ ?><img src="<?php print $profil['billede'] ?>" width="100" height="100"><?php }else{ ?>(Intet billede!)<?php } ?></td>
    <td width="732" valign="top"><div align="left">
      <table width="100%" border="1">
        <tr>
          <td width="25%">Brugernavn:  </td>
          <td width="36%"><?php print $profil['brugernavn'] ?></td>
          <td width="39%"><span class="style3">Point: <?php print $profil['point'] ?> </span></td>
          </tr>
        <tr>
          <td>Navn:</td>
          <td><?php print $profil['navn'] ?></td>
          <td>&nbsp;</td>
          </tr>
        <tr>
          <td>Civilstatus</td>
          <td><?php print $profil['civilstatus'] ?></td>
          <td>&nbsp;</td>
          </tr>
        <tr>
          <td>Alder:</td>
          <td><?php print $profil['alder'] ?> &aring;r. </td>
          <td>&nbsp;</td>
          </tr>
        <tr>
          <td>Fritid:</td>
          <td><?php print $profil['fritid'] ?></td>
          <td>Status:<?php
include_once("connect.php");
$online = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");

while($row = mysql_fetch_array($online))
    {
    $timestamp=$row['status'];

    Print "Denne profil er:"
    if($timestamp>mktime(-300))
      {
      print "Online";
      }
      else
        {
        Print "Offline";
            }
   
   
    }
?></td>
          </tr>
        <tr>
          <td>Landsdel:</td>
          <td><?php print $profil['landsdel'] ?></td>
          <td>&nbsp;</td>
        </tr>
      </table>
      </div>
    </td>
  </tr>
</table>
<table width="574" height="154" border="1">
  <tr>
    <td height="111" valign="top"><?php print $profil['navn'] ?>&acute;s Profil: </td>
  </tr>
  <tr>
    <td valign="top"><a href="http://mvf.frac.dk/community/redigerProfil.php"></a></td>
  </tr>
</table>
<br>
<p><strong>G&aelig;stebog:</strong></p>
<table width="400" border="0">
<?php
$q2 = mysql_query("select * from nickin_taqwall where til = '$profil[id]'");
while($taqwall = mysql_fetch_array($q2)){
?>
  <tr>
    <td width="195" bgcolor="#4D73C3">&nbsp;</td>
    <td width="195" bgcolor="#4D73C3">Dato: <?php print $taqwall['dato'] ?></td>
  </tr>
  <tr bgcolor="#CCCCCC">
    <td colspan="2" bgcolor="#FFFFFF">Brugernavn: <?php print $taqwall['fra'] ?></td>
  </tr>
  <tr bgcolor="#CCCCCC">
    <td colspan="2" bgcolor="#FFFFFF"><?php print $taqwall['besked'] ?></td>
  </tr>
<?php
}
?>
</table>
<p> <a href="taqwall.php?do=skriv&id=<?php print $profil['id'] ?>&bruger=<?php print $profil['brugernavn'] ?>">Skriv
  i denne g&aelig;stebog! </a></p>
<?php
if($profil['brugernavn'] == $_SESSION['Brugernavn']){
?>
<p><a href="editprofil.php?id=<?php print $profil['id'] ?>">Ret profil!</a> Lad v&aelig;re med at trykke hvis du er sammen med nogen, da din kode vil blive vidst n&aring;r du trykker p&aring; ret profil! </p>
<?php
}
?>
</body>
</html>
Avatar billede jens12 Nybegynder
13. november 2005 - 18:51 #33
Håber det er til en hjælp...
Avatar billede kourinsu Nybegynder
13. november 2005 - 19:05 #34
Prøv dette:
<?php
include_once("connect.php");
$online = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");

while($row = mysql_fetch_array($online))
    {
    Print "Denne profil er:";
    if($row['status']>mktime(-300))
      {
      print "Online";
      }
      else
        {
        Print "Offline";
            }
   
   
    }
?>
Avatar billede jens12 Nybegynder
13. november 2005 - 19:11 #35
Så er fejlen der ikke,men tilgængel så viser den ikke noget i status,Jeg er forvirret:S Har du en anelse om hvad der er gjaldt?
Avatar billede kourinsu Nybegynder
13. november 2005 - 19:12 #36
Har du husket at differere $brugernavn i sql'en?
Avatar billede jens12 Nybegynder
13. november 2005 - 19:14 #37
Hvad mener du?
Avatar billede kourinsu Nybegynder
13. november 2005 - 19:16 #38
$online = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");

Du skal være sikker på, at $brugernavn indeholder et valid navn, ellers henter den jo ikke noget ud.
Avatar billede jens12 Nybegynder
13. november 2005 - 19:22 #39
Hmm....Kan du ikke forklare dig lidt mere ? Jeg aner ikke hvad du taler om...
Avatar billede kourinsu Nybegynder
13. november 2005 - 19:24 #40
Hmm...ikk rigtig. Jeg tror bare, du skal sidde og lege med det. Så virker det nok på et tidspunkt. Du har hvertfald fået alle værktøjerne til det. Ved ikke rigtig hvordan, jeg ellers skal forklare det.
Avatar billede jens12 Nybegynder
13. november 2005 - 19:24 #41
Mener du at jeg skal have et script der tjekker om brugernavnet indholder et valid navn?
Avatar billede kourinsu Nybegynder
13. november 2005 - 19:28 #42
Nej, det er ikke det jeg mener. Hvis du læser lidt op på selektionssætninger (if-sætninger) og løkker, kan du sagtens selv finde den evt. fejl tror jeg. Det er desuden også uundværlig viden, hvis man vil arbejde med nogen form for scripting eller programmering.
Avatar billede jens12 Nybegynder
13. november 2005 - 19:33 #43
okay..Jeg siger mange tak for din hjælp.Du har fortjent dine point:D
Avatar billede jens12 Nybegynder
13. november 2005 - 19:34 #44
Så læg lige et svar:D
Avatar billede kourinsu Nybegynder
13. november 2005 - 19:35 #45
Det gør jeg :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester