Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Jäseniä online

Sivun loppuun

MIB [24.07.2009 18:15:18]

#

Tässä jatkoin tuon foorumin tekoa, ja laitoin sellaisen jutun, että ketkä ovat online. Muuten tämä juttu toimii hyvin, mutta yksi pilkku tulee aina liikaa.
Esim. "Pekka, Jussi, Matti,", kun pitäisi olla "Pekka, Jussi, Matti".

<?php
$kyst = mysql_query("SELECT * FROM users WHERE online = 'true'");
$kystt = mysql_fetch_array($kyst);
for($i = 0; $i < mysql_num_rows($kyst); $i++) {
echo "<a href=\"/sw/main.php?act=modules/profiili&id=".$kystt["id"].">".$kystt["tunnus"]."</a>";
echo ", ";
}
?>

Koodini näyttää tälle hetkellä tältä. En ole keksinyt, miten tulostaisin pilkun kaikkien muiden jälkeen paitsi viimeisen nimen.

Smuliii [24.07.2009 18:18:11]

#

Kun päästään loppuun poistetaan viimeinen merkki (eli tässä tapauksessa pilkku).

MIB [24.07.2009 18:20:31]

#

Joo, tämän tajusin itsekkin, mutta en tiedä miten tämä tehdään.

temu92 [24.07.2009 18:21:10]

#

<?php
$kyst = mysql_query("SELECT * FROM users WHERE online = 'true'");
$kystt = mysql_fetch_array($kyst);
for($i = 0; $i < mysql_num_rows($kyst); $i++) {
echo "<a href=\"/sw/main.php?act=modules/profiili&id=".$kystt["id"].">".$kystt["tunnus"]."</a>";
if($i<mysql_num_rows($kyst)-1) echo ", ";
}
?>

Yksinkertainen if-lauseke riittää.

MIB [24.07.2009 18:33:11]

#

Kiitos, tuo auttoi kummasti.

Antti Laaksonen [24.07.2009 18:44:06]

#

Taulussa oleva online-kenttä ei ehkä ole hyvä idea. Mitä jos käyttäjä sulkee selaimen yhtäkkiä ja kenttään jää väärä arvo? Yksi ratkaisu on säilyttää kentässä viimeistä ajanhetkeä, jolloin käyttäjä on ladannut keskustelusivun. Tällöin paikalla olevat käyttäjät saa selville hakemalla käyttäjät, jotka ovat ladanneet keskustelusivun riittävän äskettäin.

Tässä on vielä kätevä tapa tulostaa taulukossa olevat tiedot pilkuilla erotettuina:

<?php
$taulu = array("apina", "banaani", "cembalo");
echo join(", ", $taulu);
// tulostus: apina, banaani, cembalo
?>

(Tämä ei sovellu suoraan tapaukseesi, koska taulukkosi on erimuotoinen.)

MIB [24.07.2009 18:52:04]

#

Joo, en tullutkaan ajatelleeksi tuota. Muutakin sen heti. :) Kiitos Antti!

Edit: Kun käyttjä lataa sivun, niin päivitetään tätä viimeisintä latausta kannassa. Sitten vaikka kaikki käyttäjät jotka ovat päivittäneet sivun 10 minuutin sisällä ovat "kirjautuneena". Nyt pitäisi laskea: Jos kannassa on aika 1248451010 ja sitä verrataan... niin, joo meinasin seota omiin sormiini. Enpäs enään tiedäkkään miten sitä verrataan.

temu92 [24.07.2009 18:55:28]

#

<?php
    $kyst = mysql_query("SELECT * FROM users WHERE online > ".time()-300);
?>

Joo tossa vielä tommonen. Joka sivunlatauksella kirjautuneen käyttäjän online sarakkeen aika päivitetään sen hetkiseen aikaan. Sitten tämä lause ottaa taulukosta kaikki ne käyttäjät jotka on päivittänyt sivunsa viimeisen 300 sekunnin eli 5 minuutin aikana.

Muuta en voi sanoa kun että MySQL on todellinen aarre kun tekee tällaisia systeemejä. Kun ottaa käyttöön vielä tämän yhden PHP.netistä löytämäni funktion niin se on vieläkin helpompaa ja saa vähän tietoturvaakin:

<?php

// Here is a simple named binding function for queries that makes SQL more readable:
// $sql = "SELECT * FROM users WHERE user = :user AND password = :password";
// mysql_bind($sql, array('user' => $user, 'password' => $password));
// mysql_query($sql);

function mysql_bind(&$sql, $vals) {
    foreach ($vals as $name => $val) {
        $sql = str_replace(":$name", "'" . mysql_real_escape_string($val) . "'", $sql);
    }
}

?>

MIB [24.07.2009 19:02:32]

#

Tuo aikaisemman viestin edit kohta meni nyt umpeen. Unohdin kokonaan < ja > vertausten olemassa olon. :D Kiitos temu92!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta