Arathor 1 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 O čem Bude Tutoriál ? Jak vytvořit u uživatele na webu třeba v shoutboxu puntík jestli je nebo neni Online co budete Potřebovat ? Databázi - a neco k jejímu uvládání ( Navicar, SQLyog ) PsPad Internet Pozor aby script fungoval musíte mít v databázi kolonku Online pro zkoušku využít tuhle DROP TABLE IF EXISTS `hraci`; CREATE TABLE `hraci` ( `id` int(255) NOT NULL AUTO_INCREMENT, `jmeno` varchar(255) DEFAULT NULL, `online` int(1) DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of hraci -- ---------------------------- INSERT INTO `hraci` VALUES ('1', 'Arathor', '0'); INSERT INTO `hraci` VALUES ('2', 'Arathore', '1'); Takže Začneneme Zapneme si PsPad dále nový a vybereme PHP smažeme obsah dokumentu jestli se vám tam něco ukáze začneme tím že si napíšeme začátek a konec PHP scriptu <?php ?> a ted budeme psát mezi ně musíme si připojit databázi $pripojeni = mysql_connect("IP Kde máš MySql DB","Jméno do DB","Heslo do DB"); if (!$pripojeni) { die('Chyba: ' . mysql_error()); } mysql_select_db("Jméno Databáze", $pripojeni); tak to bychom měly ted budeme potřebovat nadefinovat výběr z naší tabulky $vyber = mysql_query("SELECT * FROM TABULKA"); dále budeme muset nadefinovat proměnou kterou budeme používat k výpisu jestli je online Switch využívá udaje ktere získá z databáze a pak je dále využívá. pouze na čísla !!! while($online = mysql_fetch_array($vyber)) { echo "".$online['jmeno'].""; switch ($row['online']) { case 0: echo "Offline "; break; case 1: echo "Online "; } } a ukončíme připojení k db mysql_close($pripojeni); Kdyby někdo nevěděl jak tady je celý Script <?php $pripojeni = mysql_connect("IP Kde je DB","Jméno do DB","Heslo do DB"); if (!$pripojeni) { die('Chyba: ' . mysql_error()); } mysql_select_db("Vaše DB", $pripojeni); $vyber = mysql_query("SELECT * FROM hraci"); while($row = mysql_fetch_array($vyber)) { echo "".$row['jmeno']." "; switch ($row['online']) { case 0: echo "Offline "; break; case 1: echo "Online "; } } mysql_close($pripojeni); ?> 1 Link to comment Share on other sites More sharing options...
Emeres 0 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 10/10 Pro lajky je to good TuT Já bych si stým poradil sam Link to comment Share on other sites More sharing options...
Arathor 1 Odesláno: 29. Říjen, 2011 Author Share Odesláno: 29. Říjen, 2011 snad to pochopí když někdo Dělá php 8 let je pro něj problém napsat TuT tak aby to pochopil i ten kdo vidí php poprvé a hlavne aby se ten tut nesládal z Ctrl+Cizí a Ctrl+Vlastní Link to comment Share on other sites More sharing options...
Emeres 0 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 :DDDDDDDDDDDDDDDD "lol" Link to comment Share on other sites More sharing options...
G4NG 1 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 Nice tut ale nevyuziju Link to comment Share on other sites More sharing options...
ParadoXX 3 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 Dobře vysvětlené,ale tohle jsem už někdě viděl. Link to comment Share on other sites More sharing options...
Daffy 8 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 Je to možná dobré jako "výpis" nic více to neumí, kdybys udělal tut na Online lidi, udělal bys k tomu i nějaký timestamp, zjištování jestli je ONLINE - OFFline apod. echo "".$row['jmeno']." "; lze i jednoduše echo $row['jmeno']; ne ? Link to comment Share on other sites More sharing options...
Arathor 1 Odesláno: 29. Říjen, 2011 Author Share Odesláno: 29. Říjen, 2011 Neni to jedno funguje to stejně Link to comment Share on other sites More sharing options...
mimic 27 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 Sice je to funkční, ale kód dost na ho*no, takhle by to žádnej rozumnej člověk nenapsal... 1) proč proboha prochážíš celou tabulku, když potřebuješ jen stav uživatele? 2) proč proboha máš stav přes switch, když víc hodnot než 2 neni 3) pokud nám jde pouze o tohle, tak je zbytečný se připojovat k DB (použuji hned v query) 4) tabulka pro uživatele je nesmyslně definovaná... proč proboha id jeint(255) ?? další perla je jméno na varchar(255) a aby jsem to uzavřeli, tak joke je online jako int(1) 5) ukončení připojeni k mysql je podstatě zbytečný (je to automaticky) 6) nějak ti tam chybějí funkce, tohle by člověk musel kopírovat Xkrát, pokud bude zjišťovat stav na více místech a nějak se mi zdá, že tomu moc nerozumíš a jen vysvětluješ takový primitovní věci, jako že kód musí být mezi <?php ... ?>, ale vůbec nevysvětlíš základní a důležitý informace k tomu kódu cos napsal Link to comment Share on other sites More sharing options...
DooM 93 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 se nediv ze to lajci nepochopi kdyz to pises stylem "a dame toto,a pak tohle ..." vubec nevysvetlujes co dana funkce dela.. to si pak muzes nekde vzit nejaky skript akorat ho okopcit.. Link to comment Share on other sites More sharing options...
mimic 27 Odesláno: 29. Říjen, 2011 Share Odesláno: 29. Říjen, 2011 Vzhledem k tomu, že mě deptala verze autora, tak sem uvedu správný způsob, jak by to mělo v praxi vypadat, protože autorova verze je podstate v praxi nepoužitelná 1) Vytvoření databáze Tento krok sem psát nebudu, to snad dokáže každý, jen zdůraznim, aby databáze byla v kódování utf8_unicode_ci (povinné to není, ale v budoucnu se vyhneme dalším problémům) Dejme tomu, že naše databáze bude mojeDB 2) Vytvoření tabulky CREATE TABLE `users` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `nick` VARCHAR(30) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci', `online` TINYINT(1) UNSIGNED ZEROFILL NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `nick` (`nick`) ) COLLATE='utf8_unicode_ci' ENGINE=InnoDB ROW_FORMAT=DEFAULT AUTO_INCREMENT=0 - stručné info... vytvoří to v DB tabulku s názvem users, která má 3 sloupce (id, nick, online) - sloupec id nás nezajímá, ten se zvyšuje společně s novým uživatelem - sloupec nick je pro nick uživatele/hráče, který může nabývat max. 30 znaků - a poslední sloupec online je stav uživatele, zda je 1 = online nebo 0 = offline 3) Přidání uživatele do databáze INSERT INTO mojeDB.users(nick) VALUES ('user1'); INSERT INTO mojeDB.users(nick) VALUES ('user2'); INSERT INTO mojeDB.users(nick, online) VALUES ('user3', 1); INSERT INTO mojeDB.users(nick, online) VALUES ('user4', 1); - zde přidáme 4 uživatele, kde první 2 budou offline a poslední 2 online 4) PHP skript <?php class Mysql { // uchovava pripojeni + nazev tabulky private $con, $tab; // pri vytvoreni objektu se pripojuje k mysql serveru + databazi public function __construct($user, $pass, $db, $table, $host = '127.0.0.1') { $this->con = mysql_connect($host, $user, $pass) or die(mysql_error()); mysql_select_db($db, $this->con) or die(mysql_error()); $this->tab = $table; } // odesila dotaz mysql serveru public function query($sql) { return @mysql_query($sql); } // ziska cely sloupec/e vsech uzivatelu public function getColumn($table) { return $this->query("SELECT ".$table." FROM ".$this->tab); } // zjistuje stav uzivatele public function isOnline($nick) { $q = $this->query("SELECT online FROM ".$this->tab." WHERE nick = '".$nick."' LIMIT 1"); return @mysql_result($q, 0); } } // vytvoreni objektu pro mysql $mysql = new Mysql('dbJmeno', 'dbHeslo', 'mojeDB', 'users'); // meni bool hodnotu na vlastni string function changeBool($val, $yes = 'Online', $no = 'Offline') { return $val ? $yes : $no; } // vypise list vsech uzivatelu + jejich stav (online/offline) function showUsersState() { $q = $GLOBALS['mysql']->getColumn('nick, online'); while ($u = mysql_fetch_assoc($q)) echo $u['nick'].' is '.changeBool($u['online']).' '; } showUsersState(); // vypise vsechny nicky pod sebe + status // vypise graficky stav uzivatele function getUserState($user) { $state = $GLOBALS['mysql']->isOnline($user); return changeBool($state, 'Online', 'Offline'); } echo getUserState('user3'); // vypise zelene Online Takhle nějak bych si představoval zjištění stavu uživatele... pokud něco neni jasný, tak koment... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now