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.
Kun päästään loppuun poistetaan viimeinen merkki (eli tässä tapauksessa pilkku).
Joo, tämän tajusin itsekkin, mutta en tiedä miten tämä tehdään.
<?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ää.
Kiitos, tuo auttoi kummasti.
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.)
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.
<?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); } } ?>
Tuo aikaisemman viestin edit kohta meni nyt umpeen. Unohdin kokonaan < ja > vertausten olemassa olon. :D Kiitos temu92!
Aihe on jo aika vanha, joten et voi enää vastata siihen.