Avatar billede codemanager Nybegynder
10. august 2004 - 22:49 Der er 16 kommentarer og
1 løsning

hjælp til og rette kode til

Hej

jeg er igang md og lave et online system
nu kunne jeeg godt tænke mig og få lidt hjælp til og kigge det hele igemmen for fejl og hvad der ellers skulle være

begynder lige på og hørt med koden

Her er koden jeg bruger på mine undersider

<?php
aabn_forbindelse_og_vaelgdb();
/* dette skal indsættes på alle undersider */
function InsertUser() {
    global $REMOTE_ADDR, $PHP_SELF;
   
    $ip            = $REMOTE_ADDR;
    $host          = gethostbyaddr($ip);
    $sidenavn        = "Online bruger";
    $page          = $PHP_SELF;
    $time          = explode(" ", microtime());
    $usersec        = (double)$time[1];
    $dato          = date("H:i:s");
    mysql_query("DELETE FROM online_users WHERE ip like '$ip'") or die (mysql_error());
    mysql_query("INSERT INTO online_users (ip,host,date,sidenavn,page,dato) VALUES ('$ip','$host','$usersec','$sidenavn','$page','$dato')") or die (mysql_error());
}
InsertUser();
/* her til */
luk_forbindelse();

?>

det virker fint nok

som kommer koden til og vise hvem der er online


<?
function ShowUsers() {
aabn_forbindelse_og_vaelgdb();
    $time      = explode(" ", microtime());
    $usersec  = (double)$time[1];
    mysql_query("DELETE FROM online_users WHERE date < $usersec -100") or die (mysql_error());
    $countusers  = mysql_fetch_array(mysql_query("SELECT count(*) as total FROM online_users"));
   
   
    echo"<div class='boxheader'>Online bruger ".$countusers[total]."</div>";

   
    $result = mysql_query("SELECT * FROM online_users") or die (mysql_error());
    while ($row = mysql_fetch_array($result)) {
        echo" <div id='onlinekasse'>"; 
        $q1 = mysql_query("SELECT brugernavn FROM bruger WHERE ip = '$row[ip]'");
        $ip_row = mysql_fetch_array($q1);
        echo $ip_row['brugernavn'];
        echo (" Er sidst set på <a href=".$row[page].">".$row[sidenavn]."</a> ");
        echo ("Kl ".$row[dato]."<br></div>");

       
    }
}
luk_forbindelse();

showUsers();
?>
</div>

nu begynder det og gå lidt galt det skal være sådan at dem der er logget ind i systemet skal vise og dem der ikke er skal vises med ip'en den skriver også ens bruger navn men dt er dr endnu når man logger ud så jeg skal bruge noget kode til og fjerne ens ip når man logger ud min kode til log ud siden ser sådan ud

<?php
session_start();
$_SESSION = array();
session_destroy();
header("Location:http://www.4fune2lose.dk");
exit;
?>

så kommer koden der viser hvor mange der er online på forsiden

<?php
               
                aabn_forbindelse_og_vaelgdb();
           
                  mysql_query("DELETE FROM online_users WHERE date < $usersec -100");
                $countusers  = mysql_fetch_array(mysql_query("SELECT count(*) as total FROM online_users"));
               
                echo"<a href='../online/index.php'>&nbsp;Online bruger: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (".$countusers[total].")</a>";
               
                ?> 

det virker også meget fint hvad jeg slev kan se men kan det laves på en anden måde er du velkommen til og fortælle det

hele siden kan ses her www.4fune2lose.dk
Avatar billede codemanager Nybegynder
10. august 2004 - 23:10 #1
er der ikke nogle der kan hjælpe
Avatar billede detox Nybegynder
11. august 2004 - 00:07 #2
Tja... I stedet for: $REMOTE_ADDR og $PHP_SELF ville jeg nok vælge $_SERVER['REMOTE_ADDR'] og $_SERVER['PHP_SELF']. De er jo osse superglobale i sig selv, så du behøver ikke definere dem globale i din funktion.
Disse 3 linier vil:

    $countusers  = mysql_fetch_array(mysql_query("SELECT count(*) as total FROM online_users"));
    echo"<div class='boxheader'>Online bruger ".$countusers[total]."</div>";
    $result = mysql_query("SELECT * FROM online_users") or die (mysql_error());

vil jeg ændre til:

  $result = mysql_query("SELECT * FROM online_users") or die (mysql_error());
  echo"<div class='boxheader'>Online bruger ".mysql_num_rows($result)."</div>";

Så sparer du et kald til databasen, når du alligevel skal bruge de andre oplysninger.
Avatar billede codemanager Nybegynder
11. august 2004 - 16:14 #3
Det ville sig at dette skal rettes til

<?php
aabn_forbindelse_og_vaelgdb();
/* dette skal indsættes på alle undersider */
function InsertUser() {
   
    $ip            =  $_SERVER['REMOTE_ADDR'];
    $host          = gethostbyaddr($ip);
    $sidenavn        = "Online bruger";
    $page          = $_SERVER['PHP_SELF'];
    $time          = explode(" ", microtime());
    $usersec        = (double)$time[1];
    $dato          = date("H:i:s");
    mysql_query("DELETE FROM online_users WHERE ip like '$ip'") or die (mysql_error());
    mysql_query("INSERT INTO online_users (ip,host,date,sidenavn,page,dato) VALUES ('$ip','$host','$usersec','$sidenavn','$page','$dato')") or die (mysql_error());
}
InsertUser();
/* her til */
luk_forbindelse();

?>
Avatar billede intel4004 Novice
11. august 2004 - 16:34 #4
codemanager>

Jeg har lige en generel kommentar til din InsertIser() funktion.

Du bruger to musql-kald hvor du først sletter rækken med pågældende IP og derefter tilføjer du en nye række med de nye infos. Dette skal nok virke men jeg tror at UPDATE er hvad du egentlig søger.

Er det med vilje du har gjort det uden at bruge UPDATE?

mysql_query("
  UPDATE online_users
  SET ip='$ip',
      host='$host',
      date='$usersec',
      sidenavn='$sidenavn',
      page='$page',
      dato='$dato'
  WHERE WHERE ip = '$ip'
") or die (mysql_error();

Intel4004
Avatar billede codemanager Nybegynder
11. august 2004 - 16:40 #5
hmm nej jeg må indrømm at jeg ikke lige havde tænkt over den måde mn jeg kan godt se at det vil spar lidt tid på den måde da dn så ikke skal ind i db'en to gang
Avatar billede intel4004 Novice
11. august 2004 - 19:56 #6
codemanager>

Nemlig :)

Du kan evt. downloade hele Mysql manualen som en Windows hjælp fil her:

  http://phlab.net/myman/

Intel4004
Avatar billede codemanager Nybegynder
11. august 2004 - 21:30 #7
kan du se nogle fejl i denne kode

<?php
aabn_forbindelse_og_vaelgdb();
/* dette skal indsættes på alle undersider */
function InsertUser() {
   
    $ip          =  $_SERVER['REMOTE_ADDR'];
    $host        = gethostbyaddr($ip);
    $sidenavn    = "Online bruger";
    $page        = $_SERVER['PHP_SELF'];
    $time        = explode(" ", microtime());
    $usersec      = (double)$time[1];
    $dato        = date("H:i:s");
    mysql_query("UPDATE online_users SET ip='$ip', host='$host', date='$usersec', sidenavn='$sidenavn', page='$page', dato='$dato' WHERE ip = '$ip'") or die (mysql_error());

}
InsertUser();
/* her til */
luk_forbindelse();

?>
Avatar billede detox Nybegynder
11. august 2004 - 21:48 #8
Du sætter date til brøkdele af et sekund, er det meningen?
Og dato til et tidspunkt?
Avatar billede codemanager Nybegynder
11. august 2004 - 21:49 #9
hmm det kan jeg ikke helt se hvad skal gøre godt for men der er også en anden ting den ville ikke ligge noget i db'en mere
Avatar billede codemanager Nybegynder
11. august 2004 - 21:52 #10
er det ikke meningen at den skal ligge noget ind i databasen og så når bruger kommer på en ny side skal den bare opdater
Avatar billede detox Nybegynder
11. august 2004 - 23:22 #11
Tja, problemet er måske når ip adressen ikke findes er der ikke noget at opdatere.
Så ideen med DELETE/INSERT var måske bedre. I de helt nye versioner (MySQL>4.1) kan man INSERT bla, bla.. ON DUPLICATE KEY UPDATE bla, bla...
Avatar billede codemanager Nybegynder
12. august 2004 - 16:30 #12
jamen kunne man ikke tag og lave en insert og så er Update bagfeter
Avatar billede detox Nybegynder
12. august 2004 - 22:19 #13
Ja, medmindre du kører med >4.1, skal du bruge to forespørgsler. Enten DELETE/INSERT som du havde i starten ellers kan du prøve med en SELECT af et givent ip-nr og derefter lave INSERT hhv. UPDATE.
Avatar billede codemanager Nybegynder
12. august 2004 - 22:58 #14
hmm kan du vise et eks på det

min side ligger på starthotel ved ikke lige hvad de kør med
Avatar billede detox Nybegynder
12. august 2004 - 23:52 #15
INSERT/DELETE havde du i starten. Alternativet ville være:

<?php
aabn_forbindelse_og_vaelgdb();
/* dette skal indsættes på alle undersider */
function InsertUser() {
    global $REMOTE_ADDR, $PHP_SELF;
   
    $ip            = $REMOTE_ADDR;
    $host          = gethostbyaddr($ip);
    $sidenavn        = "Online bruger";
    $page          = $PHP_SELF;
    $time          = explode(" ", microtime());
    $usersec        = (double)$time[1];
    $dato          = date("H:i:s");
    if (mysql_result(mysql_query("SELECT ip FROM online_users WHERE ip like '$ip'"),0)==0) {
    mysql_query("INSERT INTO online_users (ip,host,date,sidenavn,page,dato) VALUES ('$ip','$host','$usersec','$sidenavn','$page','$dato')") or die (mysql_error());
    } else {
      mysql_query("UPDATE online_users SET date='$usersec',sidenavn='$sidenavn',page='$page',dato='$dato'") or die (mysql_error());
    }
}
Avatar billede codemanager Nybegynder
13. august 2004 - 12:57 #16
så ligger den det ind igen men når man kommer ind på http://www.4fune2lose.dk/online/index.php viser den ikke kl og hvad for en sid man er på før man har trykket f5 hvorfor
Avatar billede codemanager Nybegynder
19. september 2004 - 20:37 #17
lukker
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