Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Montako kävijää online

Sivun loppuun

Rocceri [20.03.2009 18:42:37]

#

Terve

Koitin Googlettaa vastausta ongelmaani, mutta en löytänyt mitään järkevää tapaa toteuttaa tätä.
Tarvitsisin koodin, joka näyttää montako kävijää juuri sillä sivulla on millä koodi on.
Tarvitsisin tätä, koska tein chatin ja sen pitäisi näyttää onko kukaan sivulla.

-Rocceri
Kiitos jo etukäteen :)

Teuro [20.03.2009 18:52:44]

#

<?php
$kysely = "SELECT COUNT(*) AS maara FROM chat";

$maara = mysql_query($kysely, $yhteys);

echo mysql_result($maara, 0, 0);
?>

Rocceri [20.03.2009 18:56:05]

#

Entäpä jollei ole MySQL tukea serverillä? Tätä ei sitten pysty tekemään, vai..?
En ole saanut sitä asennettua serverilleni, joku estää sitä. :S

Teuro [20.03.2009 18:59:04]

#

Mihin viestit tallentuvat, sekä miten käyttäjät tunnistetaan muutoin? Ymmärsin jotenkin, että chat olisi jo pystyssä jossakin ja luultavasti itse hyödyntäisin tietokantaa viestien tallennukseen. Voi tämän luultavasti tehdä ilman tietokantaakin, mutta toiminta on toki varsin erilainen ainakin ohjelmoinnin puolella.

Rocceri [20.03.2009 19:14:04]

#

Oikeastaan, tämä on "chat-muotoiltu" vieraskirja scripti jonka tein eilen.
Se tallentaa ne tekstitiedostoon näin:
nimi|email|aika|viesti
nimi|email|aika|viesti
jne.
Tarvitsisin vain pelkän jutun mikä näyttäisi montako kävijää on sivúlla

Juhko [20.03.2009 19:16:04]

#

https://www.ohjelmointiputka.net/koodivinkit/23818-php-käyttäjät-online

En tutkinut scriptiä, joten en tiedä, kuinka hyvä se on.

Rocceri [20.03.2009 19:22:52]

#

Juhko kirjoitti:

https://www.ohjelmointiputka.net/koodivinkit/23818-php-käyttäjät-online

En tutkinut scriptiä, joten en tiedä, kuinka hyvä se on.

Testasin jo, tulin 2 eri ip osoitteesta samaan aikaan, ja näyttää että 1 kävijä paikalla. :S

Metabolix [20.03.2009 19:32:37]

#

Mistään ei voi tietää, onko joku yhä sivulla. Voit vain selvittää, milloin viimeksi on ladattu tietty sivu.

Oletan, että viestit ovat aikajärjestyksessä.

<?php
// Ladataan viestit uusimmasta vanhimpaan
$viestit = array_reverse(file("viestit.txt"));

// Poimitaan käyttäjiä, kunnes tulee jo liian vanhoja viestejä.
$kayttajat = array();
foreach ($viestit as $viesti) {
  list($nimi, $email, $aika, $viesti) = explode("|", $viesti, 4);
  if ($aika < time() - 15 * 60) {
    // Viestistä on yli 15 minuuttia, vanhemmat eivät varmaan ole enää sivulla.
    break;
  }
  // Merkitään käyttäjä läsnäolevaksi
  $kayttajat[$nimi] = true;
}
// Käyttäjät ovat taulukossa avaimina, otetaan ne arvoiksi ja aakkostetaan.
$kayttajat = array_keys($kayttajat);
natcasesort($kayttajat);

// Tulostetaan lista.
if (empty($kayttajat)) {
  $sisalla = "Sisällä ei ole ketään.";
} else {
  $viimeinen = array_pop($kayttajat);
  $muut = implode(", ", $kayttajat);
  if (empty($muut)) {
    $sisalla = "Sisällä on vain {$viimeinen}.";
  } else {
    $sisalla = "Sisällä ovat {$muut} ja {$viimeinen}.";
  }
}
echo "<p>$sisalla</p>\n";
/*
Esimerkkitulostuksia:
Sisällä ei ole ketään.
Sisällä on vain a.
Sisällä ovat a ja b.
Sisällä ovat a, b ja c.
*/
?>

En testannut.

Rocceri [20.03.2009 19:35:05]

#

Metabolix kirjoitti:

Mistään ei voi tietää, onko joku yhä sivulla. Voit vain selvittää, milloin viimeksi on ladattu tietty sivu.

Oletan, että viestit ovat aikajärjestyksessä.
En testannut.

Öm.. Tämä koodini laittaa viestit viestit.txt tiedostoon niin, että vanhin on ekana, mutta php koodi kääntää järjestyksen.

Metabolix [20.03.2009 19:39:09]

#

Näetkös tuon array_reverse-kutsun koodin alussa?

Rocceri [20.03.2009 19:41:10]

#

Metabolix kirjoitti:

Näetkös tuon array_reverse-kutsun koodin alussa?

Näen, mutta tämä koodi ei toimi vaikka mitä tekisin. Näyttää kokoajan "Sisällä ei ole ketään"

Metabolix [20.03.2009 21:20:22]

#

Sitten alkuperäiset tietosi eivät selvästikään vastaa todellisuutta. Kokeilin koodia juuri (time(): 1237576867), se toimi aivan hyvin.

viestit.txt:

A||1237575621|Moi!
B||1237575823|No moi!
C||1237576324|Mitä kuuluu!
D||1237576425|Hyvää.
C||1237576626|Jee kiva.

"Sisällä ovat C ja D."

Tietenkään tarkistus ei toimi, jos teet niin tyhmästi, että tallennat ajan jotenkin muotoiltuna ("3. maaliskuuta 2009 klo 15.23"). Kannattaa käyttää aikaleimoja, niin käsittely on helpompaa.

Rocceri [20.03.2009 21:55:58]

#

Tämä on tallennettu juuri tuolla tavalla. nimi|email|1237576626|viesti
"Kokeilin koodia juuri (time(): 1237576867), se toimi aivan hyvin"
Mihin laitoit siis tuon time() jutun?

jmp [20.03.2009 22:27:48]

#

Rocceri kirjoitti:

Tämä on tallennettu juuri tuolla tavalla.

Jos kopioit Metabolixin viestissä olevan aikaleiman omaan tiedostoosi, niin todennäköisesti se oli jo vanhentunut, joten eihän se tietenkään toimi.

Rocceri kirjoitti:

Mihin laitoit siis tuon time() jutun?

Teepä vaikka uusi php-tiedosto ja lisää sinne rivi ö<?php echo time();ö. Lisää sen tulostama aikaleima siihen viestitiedostoosi ja katso, toimiiko koodi sitten. Pitäisi toimia, koska toimii täälläkin. Muussa tapauksessa teet jotain väärin.

Metabolix [20.03.2009 23:36:44]

#

Rocceri kirjoitti:

"Kokeilin koodia juuri (time(): 1237576867), se toimi aivan hyvin"
Mihin laitoit siis tuon time() jutun?

Tarkoitukseni oli kertoa, milloin kokeilin.

<?php
echo date('d.m.Y \k\l\o H.i.s', 1237576867), "\n";
// 20.03.2009 klo 21.21.07
?>

jmp juuri selittikin, miksi kokeiluaika ja viestit.txt:n sisältö ovat olennaisia lopputuloksen kannalta. Koodihan kertoo viestien lähettäjät viimeisen 15 minuutin (15 * 60 sekunnin) ajalta, joten jos tiedoston uusimmatkin rivit ovat (aikaleiman mukaan) tuota vanhempia, ketään ei ole sisällä.

Olli [21.03.2009 13:00:29]

#

Toimiiko Metabolixin pastaama koodi sinulla, Rocceri?

Rocceri [21.03.2009 15:38:34]

#

Tuo aikaisempi toimii, olin kirjoittanut tiedostoon väärin.
Mahtavasti toimii kyllä. Kiitos


Sivun alkuun

Vastaus

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

Tietoa sivustosta