Dobrý den,
dělam si chat a potřeboval bych vědět, jak mam zařídit, aby se zobrazovalo jen 30 nejnovějších vzkazů a ostatní se mazaly?
Dál nevim, pomocí čeho udělat, aby se nicky(přezdívky) předávaly mezi stránkama. Jestli to mam udělat pomocí cookie nebo PHPLIB. Problém je, že ani pořádně nevím, jak PHPLIB funguje a co všechno umí. Potřebuju totiž, aby se mi přezdívky lidí, kteří na tom chatu zrovna jsou, setřídili do seznamu (do selectu), aby si mohli lidi vybrat, komu napíšou (jako je to třeba na xchatu). A taky aby mohl správce místnosti někoho (nějakej nick) vyhodit. Pak tam ještě chci povolit šeptání mezi jednotlivejma lidma, ale to už by neměl bejt problém.
Předem dík
mam dojem ze na svy vedomosti si davas trochu velky cile, zkus si nejdriv procist php manual a pak se do toho pust .. btw chat neni zrovna to nejlepsi co muzes vytvoris, da to pomerne dost prace a ta navstevnost je bidna - to rikam z vlastnich zkusenosti :-)
Jo, to s těma nickama je pěkně těžký, ale já ten chat chci už dodělat, už toho mom dost udělanýho, chybí mi akorát právě vše okolo těch nicků a neregistrovaných hostů.
Jak víš, jaký mám zkušenosti? Máš ale pravdu, moc jsem toho neudělal, mám za sebou dvě větší aplikace: logování (http://vkdc.unas.cz/logovani/zobrazit.php) a jednoduchej weblog.
Jakej manuál myslíš? Já jsem přečet akorát Koskovu knížku, manuál doma nějakej mam, ale je napůl anglicky a to ja nezvládam.
lol... www.php.net <- to je manual... kosek je sice bezva, ale precejen... jestli mas stare vydani (ktere mam ja a nevim jestli je jiz nejake novejsi) tak je ti to pomerne k nicemu...
:) podivej na ten php.net je tam fsecko, muzes hledat fce :) hodne se odtamtud naucis
no tak dobre k tem uzivatelum .. kdyz se ti do databaze ulozi pod nejakym id tak jim ho pridelis hned po prihlaseni a budes ho davat za kazdou URL .. a ted cesky - misto <A href="blabla.php3"> bude <A href="blabla.php3?ID=..."> a jelikoz by se takhle moh nalogovat kdokoliv muzes tam pridat jeste ?ID=...&auth=... pricemz 'auth' bys mel automaticky menit pri kazdym prihlaseni nebo odhlaseni
nebo je moznost pouzit sessions ktery uzivatelovi nastavis hned po prihlaseni - a hodnota zas muze byt treba 16712&aor4i6gh564ny78xcjgyfg (ID&auth), vyhoda toho je ze muzes nastavit kdy se cookie smaze a neaktivni uzivatel bude odlogovan
a ohledne tech 30ti radku at ti radsi poradi nekdo jinej me to napada moc slozite a na dva prikazy
Dík za odpovědi, na php.net se asi budu muset kouknout,no :-)
to s těma nickama nějak zkusim, teď zrovna zase nějak nemam čas a tak dva tejdny ho mít nebudu, dělam nový stránky.
Dík a zatim
Pro lynxe:
Tak jsem si pořádně pročet a představil tvuj nápad na ty přístupy a musim říct, že zprvu to vypadalo reálně, ale pak jsem našel nedostatek. Já bych totiž pak ještě potřeboval zjistit a seřadit do seznamu lidi, který jsou on-line, aby si pak mohli mezi sebou např. šeptat a to u té tvé verze s předáváním jako GET nejde. Dál jsem nepochopil, co by mělo být obsahem proměnné auth, myslíš takové to 32bitové číslo?
Co se týče té tvé druhé verze se session, tak to tak nějak nechápu. Myslíš jako uživatelům vložit cookie a nastavit ho třeba na 5 minut, on bude v klidu chatovat a když odejde třeba za deset minut, tak se bude muset znovu při příštím přístupu registrovat? To je kravina, on by pak mohl dát třeba po 10 minutách "Aktualizovat" a zase by se musel registrovat. To je blbost....
Taky jsem čet v Koskovi, že je dobrá PHPLIB, že tam toho jde dost, ale taky tam je napsáno, že PHPLIB je samostatná distribuce a já nevim, jestli je zde na WZ, co mam v phpinfo() hledat?
Já se jednou ptal jednoho chlapa (co má www.interchat.cz) jak tam má ty nicky udělaný a on řek, že má speciální tabulku, kam se zapíše přístup po vyplnění formuláře (nick a heslo), ale problém je, že se pak musí řádně odlogovat (v jeho případě kliknutím na tlačítko).
Tak teď nevim, co s tim :-(
Ehm, predpokladam, ze usery overujes proti nejaky db - tak do tbl users pridej column "online" a "last_echo" (nebo tak neco:)) - "online" nastavis na 1, kdyz se user naloguje, a do "last_echo" zaznamenas time. select * from users where online = 1 ti da vsechny nalogovany usery. Samozrejme, ze musis nejakym zpusobem kontrolovat, jestli nevyprsel nejakej timeout, na kazdy strance zavolej nejakou fci, ktera projde tbl users a u toho usera, kterej bude mit "last_echo" starsi jak rekneme 10min, nastav "online" na 0 :) Jinak, co se tyce autentikace useru a jejich pohyb po strankach (pri zachovani jejich autentizacnich udaju) - to mam vyreseno, je-li zajem, ozvi se na maila, poslu :)
Mno, tak si to ted ctu a moh jsem to teda vymyslet elegantnejsim zpusobem, ale co byste lidi nechteli vo pul druhy rano ;-)))
No mam tři tabulky. Do jedné se vypisujou vzkazy, do druhé údaje o registrovaných přezdívkách a do třetí lidi, kteří jsou online.
Když člověk přijde, na první stránce se přihlásí (buď je registrovaný, nebo jako host), vleze na další stránku, tam ho to zapíše do tý tabulky online a zobrazí formulář, kde je <input type="hidden" name="nick" value="$nick">, to samý s heslem a tlačítko submit. Když na něj klikne, otevře se hlavní stránka chatu. Tam jí to uloží cookie s nickem a 30ti sekundovým limitem. V ifrejmu, kde se zobrazujou vzkazy je stejný SetCookie() a jeho refreš je 10 sekund (takže to cookie stíhá). Udělam to tak, jak to má xchat. Tlačítko odejít a kdyby někdo na něj neklikl (zavřel by jen okno), tak se smaže z tabulky po 10ti minutách nečinnosti. A to je právě to, co teď nevim, jak udělat. Jak mam zjistit nečinnost těch lidí? Můžete mi někdo pomoct?
Tady Vám dávám strukturu těch tabulek:
MySQL_Query("CREATE TABLE nick (
id int(10) NOT NULL auto_increment,
nick varchar(60) NOT NULL,
jmeno varchar(60) NOT NULL,
prijmeni varchar(60) NOT NULL,
email varchar(100) NOT NULL,
heslo varchar(10) NOT NULL,
pohlavi varchar(1) NOT NULL,
narozeni int(20) NOT NULL default '0',
povolit varchar(1) NOT NULL,
PRIMARY KEY (id, nick))");
MySQL_Query("CREATE TABLE vzkazy (
id int(10) NOT NULL auto_increment,
datum int(20) NOT NULL default '0',
nickod varchar(60) NOT NULL,
nickpro varchar(60) NOT NULL,
vzkaz text NOT NULL,
barva varchar(10),
septani varchar(1),
PRIMARY KEY (id))");
MySQL_Query("CREATE TABLE chat_online (
nick varchar(60) NOT NULL,
PRIMARY KEY (nick))");
Když mi pomůžete, budu Vám strašně vděčný.
ta table 'online' je na..., jak uz tady nekdo rikal udelej jen sloupce treba 'lasttalk' a 'online' v tabulce 'nick' .. do lasttalk se pri kazdym obnoveni urcity stranky aktualizuje cas posledni aktivity -
MySQL_Query ("UPDATE nick SET lasttalk = '".time()."', online = '1' WHERE id = '$ID'");
$timeout = time()-900;
MySQL_Query ("UPDATE nick SET online = '0' WHERE lasttalk <= $timeout");
# online uzivatele pak najdes:
MySQL_Query ("SELECT * FROM `nick` WHERE `online` = 1");
sorry jestli to tady uz nekdo rikal ale kdybyste byli "trochu" strucnejsi mozna bych si toho vsim :-)
Jo, ta tabulka online je možná na...., ale když tam mam povolený vstup i bez registrace- jako host, tak ty hosty přece nebudu zapisovat do tý normální tabulky mezi registrovaný nicky.
ja sem si udelal dve podobny tabulky users a guests ale delej jak TY uznas za vhodny .. ja sem mel taky neco jako tabulku online jenze to bylo kvuli tomu ze sem mel vic mistnosti a z jednoho sloupce bys tezko poznal v jaky mistnosti kdo je
ale velka nevyhoda toho je ze musis mit i nejakej sloupec id coz sou data navic ne-li dokonce sloupec nick :-), a musis pak znova selectovat z dalsi tabulky abys zjistil jmeno, pohlavi atd..
To Lynx: Jo, tak ňák jsem to měl naplánovaný. Dokonce možná časem udělam i víc místností, ještě uvidim
Lynx: je videt ze procteni meho clanku o Odlogovani na chatech ti neco prineslo :))))
zdravi byvaly: Nookie ;-)
To zobrazeni triceti zpraz zajistis tim ze pred vypsanim zprav pridas
mysql_query("DELETE FROM vzkazy LIMIT 30,100");
Smaze vsechny zpravy 31-99.
Master: mozna tvuj clanek, mozna nekonecna prace na chatu a vubec i na ostatnich webech :-)
Pro bohyna: No nevim, jestli to bude fungovat. Ještě to chce nějaký WHERE, aby to smazalo ty nejstarší příspěvky (takhle by to mohlo smazat i nový, nebo ne?)
Mas pravdu ale lepsi nez WHERE bude ORDER BY.
mysql_query("DELETE FROM vzkazy ORDER BY id DESC LIMIT 30,100");
LIMIT funguje tak ze prvni cislo je cislo prvniho radku ktery vybere (prvni radek je 0) a druhy cilo je pocet radku ktery vybere.
a mohli byste mi pls říct jak by to mělo vypadat (to umazávání po třiceti zprávách) když můj chat (čistě php chat) vůbec mysql nepoužívá ?
moc to potřebuju plls poraďte
Jde o to, jak to máš udělaný. Prostě musíš nějak zajistit, aby to až po nějakej blbej znak, nebo řetězec byl jeden vzkaz (dobrý je až po ukončenej řádek). Pak je necháš nějakou fcí spočítat (jako v některejch dobrejch knihách návštěv bez databáze- kvůli stránkování) a ty nejstarší smazat. Jinak je chat bez databáze docela kravina.
mozna to kravina je ale kdyz ma nekdo fantazii de to i pres soubor a mit skoro celych 50MB k dispozici .. problem je ze si ten soubor muze precist kazdej :-)
no mysql: exploduj celej soubor podle rozdelujicich znaku a do promenny uloz poslednich 30prvku $pole [(Count($pole)-30)] az $pole [Count($pole)] .. soubor vymaz a zapis do nej promennou
Aha tak těď už mi to je úúplně jasný díky :-D
blabla .. dokud nedostanes promennou $data s obsahem souboru ..
..vety mas rozdeleny treba podle '#' (Hello lidi#Taky te zdravim#atd)..
$array = explode ('#', $data);
$x = Count ($array)-30;
$zapis = Array ();
for ($i=0;$i<30;$i++) {
array_push ($zapis, $array[$x+$i])
}
$zapis = implode ("#", $zapis);
sorry vubec se me nechce premejslet omluv chyby :-)
Furt mi to ňák nefachčí :o(. Vložil jsem tam to DELETE FROM pomocí limitu a furt to nic nemaže. Ani chybovou hlášku to nehází a v pohodě to vypíše všechny vzkazy.
Takhle to mam
include "db.php";
/* SMAZÁNÍ VZKAZŮ 30-100 */
MySQL_Query("DELETE FROM vzkazy ORDER BY datum DESC LIMIT 30,100");
// řazení podle data bude lepší než id :o)
/* VYPSÁNÍ VZKAZŮ- to už funguje v pohodě */
$query = MySQL_Query("SELECT * FROM vzkazy ORDER BY datum DESC");
while...
..
....
......
........
..........