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 :)
<?php $kysely = "SELECT COUNT(*) AS maara FROM chat"; $maara = mysql_query($kysely, $yhteys); echo mysql_result($maara, 0, 0); ?>
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
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.
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
https://www.ohjelmointiputka.net/koodivinkit/
En tutkinut scriptiä, joten en tiedä, kuinka hyvä se on.
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
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.
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.
Näetkös tuon array_reverse
-kutsun koodin alussa?
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"
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.
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?
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.
Rocceri kirjoitti:
"Kokeilin koodia juuri (time(): 1237576867), se toimi aivan hyvin"
Mihin laitoit siis tuon time() jutun?
Tarkoitukseni oli kertoa, milloin kokeilin.
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ä.
Toimiiko Metabolixin pastaama koodi sinulla, Rocceri?
Tuo aikaisempi toimii, olin kirjoittanut tiedostoon väärin.
Mahtavasti toimii kyllä. Kiitos
Aihe on jo aika vanha, joten et voi enää vastata siihen.