Autor | Zpráva | ||
---|---|---|---|
drvaca Profil |
#1 · Zasláno: 26. 12. 2009, 09:42:03
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 |
#2 · Zasláno: 26. 12. 2009, 09:46:58
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 |
#3 · Zasláno: 26. 12. 2009, 10:38:01
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 |
#4 · Zasláno: 26. 12. 2009, 12:35:22
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 |
#5 · Zasláno: 26. 12. 2009, 15:13:41
drvaca:
Pravděpodobně dokázal, ale jestli budu ochotný záleží na složitosti :-) |
||
drvaca Profil |
#6 · Zasláno: 26. 12. 2009, 16:51:59 · Upravil/a: drvaca
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 |
#7 · Zasláno: 26. 12. 2009, 17:01:49
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 |
#8 · Zasláno: 26. 12. 2009, 17:51:17
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 |
#9 · Zasláno: 26. 12. 2009, 18:05:11
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 |
#10 · Zasláno: 26. 12. 2009, 18:32:49
<?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 |
#11 · Zasláno: 26. 12. 2009, 19:10:07
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 |
#12 · Zasláno: 26. 12. 2009, 19:18:41
Nn, nemám. Nevypíše se žádná jiná chyba.
|
||
Alphard Profil |
#13 · Zasláno: 26. 12. 2009, 19:46:54
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 |
#14 · Zasláno: 26. 12. 2009, 20:27:02
Nepomohlo, ale děkuji alespoň za snahu :)
|
||
Alphard Profil |
#15 · Zasláno: 26. 12. 2009, 20:30:38
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 |
#17 · Zasláno: 26. 12. 2009, 22:20:47
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. |
||
Časová prodleva: 14 let
|
0