Autor Zpráva
drvaca
Profil
Mám dotaz, s kterým si naprosto nevím rady, proto bych chtěl požádat, jestli to vůbec jde, jestli by mi někdo mohl přímo napsat kód.

Jedná se o to, že v souboru chat_panel.php jsou uživatelé kteří jsou on-line. A když není nikdo on-line, píše to chybovou hlášku.
Já bych chtěl, aby na index.php bylo
<?php include "chat_panel.php"; ?>
a v tom případě, když by soubor chat_panel.php byl prázdný, aby tam namísto toho bylo
<?php include "nikdo.php"; ?>
nebo alespoň text
Nikdo není on-line.

Dokázal by to někdo? Předem díky moc.
Radek9
Profil
drvaca:
A když není nikdo on-line, píše to chybovou hlášku.
Podle toho co sjem pochopil, když není nikdo online, je soubor prázdný. Ale to, že includujete prázdný soubor neznamená, že to vyhodí hlášku. Chyba bude jinde.
Alphard
Profil
drvaca:
Bude to jednoduchá podmínka, ale bez kódu těžkoříct. Jak lze poznat, jestli je někdo online?
Pak už jen
if (isOnline())
{
  include "chat_panel.php";
}
else
{
  include "nikdo.php";
}

A asi myslíte registrované uživatele, protože jinak nemůže nastat situace, že tam nikdo není :-)
drvaca
Profil
Alphard:
Takže, prosím pěkně, když by jste viděl zdrojový kód souboru chat_panel.php , dokázal byste to udělat tak nějak, aby to fungovalo?
Alphard
Profil
drvaca:
Pravděpodobně dokázal, ale jestli budu ochotný záleží na složitosti :-)
drvaca
Profil
chat_panel.php:

<?php
  session_start();
  require_once "functions.php";
  DBconnect();
  usercheck();
  $time=time();
  $u=$_SESSION['id'];
  mysql_query("UPDATE `users` SET `last_active`='$time' WHERE `id`='$u'");
  $online = mysql_query("SELECT * FROM `users` WHERE `status`='1'");
  while($oR=mysql_fetch_array($online)){
    $onlineTime = $oR['last_active'] + (5 * 60);
    if($onlineTime >= time()){
      echo $oR['nick']."<br />";
    }
  }
?>


Zvládl byste to? Předem díky moc.
Alphard
Profil
drvaca:
A jakou chybu to píše? Nevím, jestli je problém v nenastavené session nebo prázdném databázovém dotazu.
drvaca
Profil
Alphard:

Warning: Cannot modify header information - headers already sent by (output started at /home/www/volieera.cz/www/functions.php:2) in /home/www/volieera.cz/www/functions.php on line 10

Znamená to, že by se muselupravit soubor functions.php?
Sedmý až desátý řádek v functions.php:
  function usercheck(){
    if(!isset($_SESSION['logged'])){
      header("Location: index.php");
    }
Alphard
Profil
Před posíláním hlaviček nesmí být žádný výstup, podrobněji je to rozepsané v FAQ. Zdrojem chyby možná nebude tenhle úsek kódu, ale něco předtím. Dejte sem functions.php od začátku.
PS: Pro vás i pro nás by bylo rychlejší, kdybyste tu chybu napsal hned v prvním příspěvku.
drvaca
Profil
<?php
  function DBconnect(){
    @$connection = mysql_connect("banan", "www", "heslo") or die ("<b>Chyba</b>: Nie je možné nadviazať spojenie so serverom ".$DBhost);
    mysql_select_db("www", $connection) or die ("<b>Chyba</b>: Nie je možné nadviazať spojenie s databázou ".$DBname);
    mysql_query("SET NAMES cp1250");
  }
  function usercheck(){
    if(!isset($_SESSION['logged'])){
      header("Location: index.php");
    }
  }
Alphard
Profil
Nemáte před <?php nějakou mezeru apod.? Nevypíše se nějaká další chyba (včetně těch vašich die)?
PHP tvrdí "output started at .../functions.php:2", že výstup začal zde, ale nevidím kde.
drvaca
Profil
Nn, nemám. Nevypíše se žádná jiná chyba.
Alphard
Profil
Hmm, na dálku mě nic nenapadá.
Tohle řešení se mi moc nelíbí, ale ať vám poradím aspoň něco...
Na začátek, za <?php a před session_start(), dejte ob_start() a na konec ob_end_flush(). Snad to pomůže.
drvaca
Profil
Nepomohlo, ale děkuji alespoň za snahu :)
Alphard
Profil
drvaca:
Ach jo, tohle mělo pomoci.
Zkuste to dát hned na index. Máte to někde online, kam by bylo možné se na to podívat?
drvaca
Profil
Napište mi, prosím, na e-mail ***. Děkuji.
Alphard
Profil
Problém byl již ve výstupu v indexu a vyřešilo ho ob_start(). Původní záměr vyřešila úprava výše uvedného kódu ([#6]) na:
$online = mysql_query("SELECT * FROM `users` WHERE `status`='1' and last_active > ".(time() - 5*60));
  if (mysql_num_rows($online) > 0)
  {
    while($oR=mysql_fetch_array($online))
    {
      echo $oR['nick']."<br />";
    }
  }
  else
  {
    echo "Nikdo není online";
  }

Problém vyřešen.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0