| 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: 16 let
|
|||
0