Jump to content

návod Online Lidi


Arathor

Recommended Posts

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);
?>

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

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é :d

 

a hlavne aby se ten tut nesládal z Ctrl+Cizí a Ctrl+Vlastní

Link to comment
Share on other sites

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

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) :d

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...