Avatar billede henrik_nielsen Nybegynder
13. maj 2005 - 18:23 Der er 10 kommentarer og
1 løsning

Community funktion

Hej Eksperter.

Jeg har lavet et community, hvor jeg gerne ville have brugerne skal kunne blive inde i community'et hele tiden. Altså uden at blive smidt ud af session. Jeg ville osse gerne have sådan at hvis brugeren f.eks. har lukket siden ned, så bliver man offline.

Jeg fik koden:

<?

$online_time = mktime();

$timenow = mktime();

$timedel = mktime()-160;

$side  = "$_SERVER[REQUEST_URI]";

con_db();

mysql_query("DELETE FROM online WHERE tid<'$timedel'");

$query = mysql_query("SELECT user FROM online WHERE ip='$REMOTE_ADDR'");

@$user = mysql_result($query, 0, "user");

$antal = mysql_num_rows($query);



if ($antal > 0) {

    if ($_SESSION[brugernavn]) {

        if ($user == "Gæst") mysql_query("UPDATE online SET side ='$side', tid='$timenow', user='$_SESSION[brugernavn]' WHERE ip='$REMOTE_ADDR'");

        else if ($user == $_SESSION[brugernavn]) mysql_query("UPDATE online SET side ='$side', tid='$timenow' WHERE ip='$REMOTE_ADDR'");

        else mysql_query("INSERT INTO online (user, tid, ip, side, online_time) VALUES ('$_SESSION[brugernavn]', '$timenow', '$REMOTE_ADDR','$side','$online_time')");

    }

    else {

        mysql_query("UPDATE online SET tid='$timenow', user='Gæst' side ='$side',online_time ='$online_time' WHERE ip='$REMOTE_ADDR'");

    }

}

else {

    if ($_SESSION[brugernavn]) mysql_query("INSERT INTO online (user, tid, ip, side, online_time) VALUES ('$_SESSION[brugernavn]', '$timenow', '$REMOTE_ADDR','$side','$online_time')");

    else mysql_query("INSERT INTO online (user, tid, ip, side, online_time) VALUES ('Gæst', '$timenow', '$REMOTE_ADDR','$side','$online_time')");

}

?>

Og mit skulle gerne ligne noget som:

<?
session_start();
if (session_is_registered("brugernavn") AND ("kodeord")) {
include("mysql/mysql.php");
$hent = mysql_query("SELECT * FROM community WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());
$vis = mysql_fetch_array($hent);
?>

<?
}else{
print "<link href='style.css' type='text/css' rel='stylesheet'><font color=red>Du er ikke logget ind!</font>";
}
?>

Altså den første kode øverst er den jeg har fået, jeg ved ikke helt hvordan jeg skal kode den ind i mit, så det virker. Jeg håber nogen kan hjælpe.
Avatar billede barklund Nybegynder
13. maj 2005 - 19:25 #1
Punkt 1. Du kan ikke lave det, så man bare forbliver online sålænge browseren er åben og registreres som offline så snart den lukkes. Så skal du ud i alt mulig rod. Du kan lave noget, der ligner, men aldrig noget, der vil være perfekt og vil bare give mere bøvl for de få brugere, der ikke lige bruger den browser, som du synes.

Punkt 2. Det script, som du baserer hele dit community på (og som starter med session_is_registered("brugernavn") AND ("kodeord")) er noget forfærdeligt rod! Det er simpelthen så grimt kodet og fyldt med fejl, at du ikke får folk til at pille ved det - det kræver en komplet omskrivning, hvis det skal være bare en smule ordentligt, og det er der ikke nogen herinde, der gider.

Find dig et gratis forum et sted på nettet, der rent faktisk virker (og ikke som ovenstående slam-script du har fundet et eller andet mærkeligt sted) og som har de featurse (mere eller mindre) som du ønsker. Eller lær PHP (ordentligt) og lav det selv. Eller betal dig fra det.

Men lige meget hvor meget sminke man putter på en hundelort, så er det stadig en hundelort!

--
Morten Barklund
Avatar billede henrik_nielsen Nybegynder
13. maj 2005 - 19:36 #2
Det er ikke noget rod? Giv mig 1 god grund til at if(session_is_registered er noget rod? Det tester bare om man er logget ind?
Avatar billede henrik_nielsen Nybegynder
13. maj 2005 - 19:44 #3
Men lige meget, barklund. Jeg har før fået følgende fra dig:

<?
session_start();

$brugernavn = $_SESSION['brugernavn'];
$nylig = mysql_query(sprintf("SELECT COUNT(1) FROM community WHERE brugernavn=%d AND tidnu<DATE_SUB(NOW(), INTERVAL 1 MINUTE)", $brugernavn));
if (mysql_result($nylig, 0) != 0) {
    mysql_query(sprintf("UPDATE community SET onlinetid=onlinetid+1, tidnu=NOW() WHERE brugernavn=%d", $brugernavn));
}
?>

Men kan du forklare lidt mere hvad de forskellige ting betyder :S?
Avatar billede barklund Nybegynder
13. maj 2005 - 20:18 #4
Sidst droppede du ud af spørgsmålet fordi du ikke forstod svaret og snuppede bare alle pointene selv. Det gider jeg ikke igen. Desværre, du må finde en anden.

Og hvis du ikke kan se hvorfor linjen:

if (session_is_registered("brugernavn") AND ("kodeord")) {

Er noget forfærdeligt rod, så ved du lige omkring -10% om PHP og programmering generelt!

Det er ikke en kritik af dig, blot en konstatering af, at du har meget at lære endnu :)

--
Morten Barklund
Avatar billede henrik_nielsen Nybegynder
13. maj 2005 - 20:28 #5
Jeg giver mig selv points når jeg ikke har fået noget som helst ud af det. Og jeg har kun haft med php at gøre i 6 måneder -  og ja har sikkert meget at lærer. Og hvis du havde hjulpet noget mere sidste gang ville du have fået pointsene? Men det gjorde du ikke :-/
Avatar billede barklund Nybegynder
13. maj 2005 - 20:53 #6
Jeg forklarede det i detaljer flere gange - præcis hvad ideen var og hvordan man gjorde. Samt jeg gav dig det præcise script, som du skulle bruge - bare rette lidt til i forhold til din db struktur. Du kan ikke forvente mere tålmodighed end det for nogle sølle e-point! Jeg holder dig ikke i hånden mens du lærer PHP og SQL.

Derudover at du ikke har fået noget ud af det, er umiddelbart ikke min skyld. Du har fået korrekte løsninger med forklaringer, som du bare ikke forstår at bruge. Hvis du ikke synes det er point værd, så bør du nok genoverveje, hvad du søger - og hvordan.

--
Morten Barklund
Avatar billede henrik_nielsen Nybegynder
14. maj 2005 - 09:12 #7
Fik jeg forklaring på hvad sprintf gjorde og <date_sub(now) osv gjorde? Nej det gjorde jeg vist ikke. Og jeg kunne godt tænke mig at du forklarede dig lidt bedre. Altså med hvad de forskellige ting betyder, så jeg osse kan lærer noget af det.

Efter min mening så er der ikke noget ved at bare få udleveret scriptet, jeg giver ikke points hvis jeg ikke har fået noget generelt ud af det!

Henrik Nielsen.
Avatar billede barklund Nybegynder
14. maj 2005 - 12:38 #8
Det kan manualen da fortælle dig? Både php[1] og mysql[2] har glimrende manualer til at fortælle dig, hvad de enkelte funktioner gør. Det er sådan alle vi andre finder de funktioner, som vi skal bruge.

Og jeg lægger altid vægt på forståelse frem for færdigt script. Derfor skrev jeg først en ganske lang forklaring på, hvad ideen bag scriptet var (det forstod du vel) og derefter selve scriptet. Det er meget vigtigere at forstå koncepterne bag programmering end praktisk syntaks.

Ud af dine spørgsmål bør du derfor ikke få kendskab til nye funktioner (det kan manualen lære dig om, det gider vi ikke herinde), du bør istedet få ideer til, hvordan man bygger tingene sammen, hvordan man strukturerer sit program bedst muligt, hvordan man bygger en database op med videre - med henblik på brugervenlighed, nydelig kode, hurtig eksekverering og andre forhold.

Men hvis du kun er her for at lære nye funktioners virkemåde, ja såeh... :/

[1] http://dk2.php.net/sprintf
[2] http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html

--
Morten Barklund
Avatar billede henrik_nielsen Nybegynder
14. maj 2005 - 17:56 #9
Du har vel ret, og tak for linkene, lig et svar så kan du få dine points.
Avatar billede barklund Nybegynder
14. maj 2005 - 19:11 #10
Finfin :)
Avatar billede barklund Nybegynder
16. maj 2005 - 11:43 #11
Tark for points :)
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