Avatar billede nixxdk Nybegynder
26. juni 2006 - 20:44 Der er 22 kommentarer

Online kode til hver bruger

En der kan fortælle og hjælpe lidt med en lille opgave jeg gerne vil havde på Nixx.dk.
ønsker at lave så man kan se i en andens profil om personen er online! lige som på arto og ung-net.
ved bare ikke hvad det skal bestå af og hvordan det skal sættes op!
Avatar billede jakobdo Ekspert
26. juni 2006 - 21:52 #1
Altså i bund og grund, så kan man ikke vide om en bruger rent faktisk er online eller ej.
Men et trick man tit bruger, er at hver gang en bruger besøger en side, så antager man, at brugeren er online fra nu + X antal minutter.
Så det er "bare" at gemme brugerid + tid nu i en database, og så lave et udtræk fra databasen og sige alle som har været på besøg fra nu og de sidste X antal minutter, er online.
Avatar billede nixxdk Nybegynder
26. juni 2006 - 21:56 #2
er det noget du vil hjælpe med
Avatar billede intenz Novice
26. juni 2006 - 21:57 #3
Sæt et timestamp ind når en bruger der logget ind besøger en side:
Alle variabler er bare noget jeg lige finder på, men det burde give en god ide til hvordan det vil virke.

-----
$time = time();
mysql_query("insert into BRUGER_DATABASE (online_time) values ('$time') where id='$BRUGER_ID'")
-----

På brugers profil:
-----
$is_online_time = time()-(60*15); // brugeren er online hvis der er regisreret timestamp indenfor 15 min

$res = mysql_query("select online_time from BRUGER_DATABASE where id='$BRUGER_ID'");
$row = mysql_fetch_assoc($res);
if ($row[online_time] >=$is_online_time) {
print "bruger online";
} else {
print "bruger offline";
}
-----
Avatar billede jakobdo Ekspert
26. juni 2006 - 21:57 #4
Jeg vil gerne hjælpe ja, men ikke kode det.
Kan du kode selv?
Avatar billede nixxdk Nybegynder
26. juni 2006 - 22:04 #5
ikke specielt godt men du kan vel hjælpe mig lidt med den kode der lige er blevet indsat i spørgsmålet
Avatar billede jakobdo Ekspert
26. juni 2006 - 22:14 #6
Vi kan forsøge, vil dog ikke love noget.
Avatar billede nixxdk Nybegynder
26. juni 2006 - 22:21 #7
okaii!
og tak
funktionen skal være på profil siderne på siden nixx.dk
og det skal kører over min MySQL
Avatar billede jakobdo Ekspert
26. juni 2006 - 22:24 #8
Men har du selv en ide om hvordan du kommer videre, eller hvordan gør vi?
Avatar billede nixxdk Nybegynder
26. juni 2006 - 22:26 #9
troede du vidste lidt indenfor php, men jeg jeg har en ide.
$time stykket skal det være på siden der logger en ind?
Avatar billede intenz Novice
26. juni 2006 - 22:43 #10
Jeg kan godt skrive lidt mere til koden.
$time stykket skal være på alle sider (sæt evt. i en fil der bliver inkluderet på hver side), og kør kun koden hvis det er en bruger der er logget ind, ikke bare en almindelig besøgende.

Sådan noget her:

if ($BRUGER_ER_LOGGET_IND) {
$time = time();
mysql_query("insert into BRUGER_DATABASE (online_time) values ('$time') where id='$BRUGER_ID'")
}
Avatar billede intenz Novice
26. juni 2006 - 22:43 #11
Du skal så oprette feltet "online_time" i din database, med int(10). Går ud fra du har en phpmyadmin eller lign. til rådighed.
Avatar billede nixxdk Nybegynder
26. juni 2006 - 22:47 #12
denne side bliver includeret på alle sider, når man er logget ind, kan du ikke ændre sidekoden så den sender til db (c_users)?
<?php
$servername = "localhost"; //Skift ikke hvis din host ikke har givet dig en anden
$dbusername = ""; //Dit MySQL brugernavn
$dbpassword = ""; //Dit MySQL password
$dbname = ""; //MySQL databasenavn
$dbtable = "c_users"; //Hovedtabel navn

$connection = mysql_connect("$servername","$dbusername","$dbpassword") or die("Kunne ikke forbinde til MySQL");
$result = mysql_select_db("$dbname",$connection) or die("Kunne ikke forbinde til databasen");
?>

<?php
//Opret bruger
if ($_POST['process']) {

if(!$_POST['brugernavn']) {
echo 'Indtast venligst et ønsket brugernavn.';
die;
}
if(!$_POST['passwd']) {
echo 'Indtast venligst et ønsket kodeord.';
die;
}
if(!$_POST['mail']) {
echo 'Indtast venligst en email.';
die;
}
  $brugernavn = $_POST['brugernavn'];
  $brugernavn = strtolower($brugernavn);
  $passwd = $_POST['passwd'];
  $ip = $_SERVER['REMOTE_ADDR'];
    $mail = $_POST['mail'];
  $navn = $_POST['navn'];
  $alder = $_POST['alder'];
  $hp = $_POST['hp'];
  $date = time();

  $tjekUser = "SELECT * FROM c_users WHERE brugernavn = '$brugernavn'";
  $tjekQuery = mysql_query($tjekUser);

  if (mysql_num_rows($tjekQuery)) {

  echo "Det valgte brugernavn er optaget, vælg venligst et andet.\n";

  } else {

  $sql = "INSERT INTO c_users (brugernavn, passwd, ip, mail, navn, alder, hp, date) VALUES ('$brugernavn',password('$passwd'),'$ip','$mail','$navn','$alder','$hp','$date')";

  $result = mysql_query($sql);

  echo "<meta http-equiv=\"refresh\" content=\"0;URL=oprettet.php\">\n";
  }

} else{
echo "$errormessage";
}
?>
Avatar billede intenz Novice
26. juni 2006 - 22:49 #13
Er du sikker på det er den rigtige fil?
Det ligner ret meget en fil til at oprette en ny bruger. Ellers er det i hvert fald lidt rodet lavet hvis den skal inkludere den funktion her gang. Men pyt med det.

Der skal være en form for login funktion der efterfølgende tjekker om den besøgende der er på siden har logget sig ind.
Avatar billede nixxdk Nybegynder
26. juni 2006 - 22:51 #14
selve db connection er på denne side!
Avatar billede intenz Novice
26. juni 2006 - 22:52 #15
Ja det kan jeg se. Men hvis jeg skal indsætte koden i din eksisterende kode skal jeg kunne se hvordan systemet tjekker om brugeren er logget ind.
Avatar billede nixxdk Nybegynder
26. juni 2006 - 22:59 #16
<?php
session_start();

if (!session_is_registered("brugernavn")) {

echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/index.css\">
<div align=\"center\">
<table width=\"550\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"background-image: url(_design/loginBoxBg.gif); background-repeat: repeat-x; border: 1px solid #E3EEFF;\">
  <tr>
    <td><div align=\"center\" class=\"menuLogin\"><strong>Info besked </strong></div></td>
  </tr>
  <tr>
    <td align=\"left\" valign=\"top\" class=\"menuLogin\"><p align=\"center\">Du er ikke logget ind!</p>
      <p align=\"center\">Log ind i menuen til h&oslash;jre.<br />
      <em>Opret evt. en bruger <a href=\"class_opret.php\">her</a>.</em></p></td>
    </tr>
  <tr>
    <td valign=\"top\" style=\"background-image: url(_design/loginBoxBgBottom.gif); background-repeat: repeat-x; background-position: bottom;\" class=\"menuLogin\"><div align=\"center\">&nbsp;</div></td>
    </tr>
</table>
</div>";

die();

}

?>
Avatar billede nixxdk Nybegynder
26. juni 2006 - 23:09 #17
er det noget du kan hjælpe med?
Avatar billede nixxdk Nybegynder
26. juni 2006 - 23:27 #18
HALLO???
nogen der kommenterer?
Avatar billede nixxdk Nybegynder
26. juni 2006 - 23:55 #19
er der ikke nogen der gider at hjælpe mere+?
Avatar billede jakobdo Ekspert
27. juni 2006 - 08:01 #20
For det første bør du gennemgå dine session.
Disse funktioner bruges ikke længere: session_is_registered("brugernavn")
Avatar billede nixxdk Nybegynder
27. juni 2006 - 12:59 #21
vilke sider skal jeg indsætte kode på og hvordan skal den se ud og indsættes?
Avatar billede jakobdo Ekspert
27. juni 2006 - 18:05 #22
Du skal lave en funktion i toppen af hver side, så laver følgende:

//Er brugeren logget ind.
//Forbinder til mysql.
mysql_query(REPLACE online_tabel SET userid = $_SESSION['user'], action=NOW()");

Så vil brugeren som besøger en side, altid have id og tiden lige nu gemt i en tabel.
Så er det "bare" at trække info ud.
F.eks.:
mysql_query("SELECT * FROM online_tabel WHERE DATE_ADD(action, INTERVAL 10 MINUTE) > NOW()");
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