DataBase.php
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:22k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. <?php
  2. require_once "pwd.php";
  3. /*****************************************************************************
  4.  * Generic mySQL database access management class.  This can be used for  *
  5.  * implementing database access in other classes requiring it.  Features  *
  6.  * include:  *
  7.  * - suppressing of error messages and error management  *
  8.  * - methods to control showing of error messages  *
  9.  * - methods to perform and manage database connections and queries  *
  10.  *  *
  11.  * The goal behind this class was to have an easy to extend mySQL management *
  12.  * class.  Hopefully, others will find it useful.  *
  13.  *  *
  14.  * Note: Although not tested on systems running PHP3, it should be  *
  15.  * compatible. If you run into any trouble, e-mail me with exact  *
  16.  * details of the problem.  This "class" is being provided as is  *
  17.  *  without any written warranties whatsoever.  *
  18.  *  *
  19.  * Methods:  *
  20.  * - string get_dbhost()  *
  21.  * - string get_dblogin()  *
  22.  * - string get_dbpass()  *
  23.  * - string get_dbname()  *
  24.  * - void set_dbhost(string $value)  *
  25.  * - void set_dblogin(string $value)  *
  26.  * - void set_dbpass(string $value)  *
  27.  * - void set_dbname(string $value)  *
  28.  * - constructor void DB(string $dblogin, string $dbpass, string $dbname)  *
  29.  * - int connect()  *
  30.  * - void disconnect()  *
  31.  * - string return_error(string $message)  *
  32.  * - void showErrors()  *
  33.  * - boolean hasErrors()  *
  34.  * - void resetErrors()  *
  35.  * - int query($sql)  *
  36.  * - array fetchRow()  *
  37.  * - int fetchLastInsertId()  *
  38.  * - int resultCount()  *
  39.  * - boolean resultExist()  *
  40.  * - void clear(int $result = 0)  *
  41.  *****************************************************************************
  42.  * Author: Amir Khawaja  *
  43.  * E-mail: amir@gorebels.net  *
  44.  * Date Created: May 15, 2001  *
  45.  * Last Modified: June 05, 2001  *
  46.  * Version: 1.0.1  *
  47.  *****************************************************************************
  48.  * Change Log:  *
  49.  *  *
  50.  * Version 1.0.1 -- June 05, 2001  *
  51.  * + added new method "int fetchLastInsertId()"  *
  52.  * + minor bug fixes  *
  53.  *****************************************************************************/
  54. class DB
  55. {
  56. /**
  57.   * global variables
  58.   */
  59. var $dbhost = ISDB_HOST; //default database host
  60. var $dblogin; //database login name
  61. var $dbpass; //database login password
  62. var $dbname; //database name
  63. var $dblink; //database link identifier
  64. var $queryid; //database query identifier
  65. var $error = array(); //storage for error messages
  66. var $record = array(); //database query record identifier
  67. var $totalrecords; //the total number of records received from a select statement
  68. var $last_insert_id; //last incremented value of the primary key
  69. /**
  70.   * get and set type methods for retrieving properties.
  71.   */
  72. function get_dbhost()
  73.     {
  74.         return $this->dbhost;
  75.     } //end function
  76. function get_dblogin()
  77.     {
  78.         return $this->dblogin;
  79.     } //end function
  80. function get_dbpass()
  81.     {
  82.         return $this->dbpass;
  83.     } //end function
  84. function get_dbname()
  85.     {
  86.         return $this->dbname;
  87.     } //end function
  88. function set_dbhost($value)
  89. {
  90.      return $this->dbhost = $value;
  91. } //end function
  92. function set_dblogin($value)
  93.     {
  94.         return $this->dblogin = $value;
  95.     } //end function
  96. function set_dbpass($value)
  97.     {
  98.         return $this->dbpass = $value;
  99.     } //end function
  100. function set_dbname($value)
  101.     {
  102.         return $this->dbname = $value;
  103.     } //end function
  104. /**
  105.   * End of the Get and Set methods
  106.   */
  107. /**
  108.       * Constructor
  109.       *
  110.       * @param      String $dblogin, String $dbpass, String $dbname
  111.       * @return     void
  112.       * @access     public
  113.       */
  114. function DB($dblogin, $dbpass, $dbname)
  115.     {
  116.      // REMOVEME
  117. if(isset($_ENV['COMPUTERNAME']) && $_ENV['COMPUTERNAME'] == 'AMD3500')
  118.      $this->dbhost = 'localhost';
  119.      $this->set_dblogin($dblogin);
  120. $this->set_dbpass($dbpass);
  121. $this->set_dbname($dbname);
  122.     } //end function
  123. /**
  124.       * Connect to the database and change to the appropriate database.
  125.       *
  126.       * @param      none
  127.       * @return     database link identifier
  128.       * @access     public
  129.       * @scope      public
  130.       */
  131. function connect()
  132.     {
  133.         $this->dblink = @mysql_pconnect($this->dbhost, $this->dblogin, $this->dbpass, MYSQL_CLIENT_COMPRESS);
  134. if(!$this->dblink)
  135. {
  136. $this->return_error("Unable to connect to the database.");
  137. }
  138. $t = @mysql_select_db($this->dbname, $this->dblink);
  139. if(!$t)
  140. {
  141. $this->return_error("Unable to change databases.");
  142. }
  143. if($this->dblink)
  144. mysql_query("SET NAMES 'utf8'", $this->dblink);
  145. return $this->dblink;
  146.     } //end function
  147. /**
  148.       * Disconnect from the mySQL database.
  149.       *
  150.       * @param      none
  151.       * @return     void
  152.       * @access     public
  153.       * @scope      public
  154.       */
  155. function disconnect()
  156.     {
  157.         if($this->dblink)
  158. { //check to see that a connection exists.
  159. $test = @mysql_close($this->dblink);
  160. if(!$test)
  161. {
  162. $this->return_error("Unable to close the connection.");
  163. }
  164. }
  165. else
  166. {
  167.     $this->return_error("No connection open.");
  168. }
  169. unset($this->dblink);
  170.     } //end function
  171. /**
  172.       * Stores error messages
  173.       *
  174.       * @param      String $message
  175.       * @return     String
  176.       * @access     private
  177.       * @scope      public
  178.       */
  179. function return_error($message)
  180. {
  181. return $this->error[] = $message." ".mysql_error().".";
  182. } //end function
  183. /**
  184.       * Show any errors that occurred.
  185.       *
  186.       * @param      none
  187.       * @return     void
  188.       * @access     public
  189.       * @scope      public
  190.       */
  191. function showErrors()
  192.     {
  193.         if($this->hasErrors())
  194. {
  195. reset($this->error);
  196. $errcount = count($this->error); //count the number of error messages
  197. echo "<p>Error(s) found: <b>'$errcount'</b></p>n";
  198. //print all the error messages.
  199. while(list($key, $val) = each($this->error))
  200. {
  201. echo "<li>$val</li><br>n";
  202. }
  203. $this->resetErrors();
  204. }
  205.     } //end function
  206. /**
  207.       * Checks to see if there are any error messages that have been reported.
  208.       *
  209.       * @param      none
  210.       * @return     boolean
  211.       * @access     private
  212.       */
  213. function hasErrors()
  214.     {
  215.         if(count($this->error) > 0)
  216. {
  217. return true;
  218. }
  219. else
  220. {
  221. return false;
  222. }
  223.     } //end function
  224. /**
  225.       * Clears all the error messages.
  226.       *
  227.       * @param      none
  228.       * @return     void
  229.       * @access     public
  230.       */
  231. function resetErrors()
  232.     {
  233.         if($this->hasErrors())
  234. {
  235. unset($this->error);
  236. $this->error = array();
  237. }
  238.     } //end function
  239. /**
  240.       * Performs an SQL query.
  241.       *
  242.       * @param      String $sql
  243.       * @return     int query identifier
  244.       * @access     public
  245.       * @scope      public
  246.       */
  247. function query($sql)
  248.     {
  249. if(empty($this->dblink))
  250. { //check to see if there is an open connection. If not, create one.
  251. $this->connect();
  252. }
  253. $t = @mysql_select_db($this->dbname, $this->dblink);
  254. if(!$t)
  255. {
  256. $this->return_error("Unable to change databases.");
  257. }
  258.         $this->queryid = @mysql_query($sql, $this->dblink);
  259. if(!$this->queryid)
  260. {
  261. $this->return_error("Unable to perform the query <b>'$sql'</b>.");
  262. }
  263. return $this->queryid;
  264.     } //end function
  265. /**
  266.       * Grabs the records as a array.
  267.       *
  268.       * @param      none
  269.       * @return     array of db records
  270.       * @access     public
  271.       */
  272. function fetchRow()
  273.     {
  274. if(isset($this->queryid))
  275. {
  276.          return $this->record = @mysql_fetch_array($this->queryid);
  277. }
  278. else
  279. {
  280. $this->return_error("No query specified.");
  281. }
  282.     } //end function
  283. /**
  284.   * If the last query performed was an "INSERT" statement, this method will
  285.   * return the last inserted primary key number. This is specific to the
  286.   * MySQL database server.
  287.   *
  288.   * @param none
  289.   * @return int
  290.   * @access public
  291.   * @scope public
  292.   * @since version 1.0.1
  293.   */
  294. function fetchLastInsertId()
  295. {
  296. $this->last_insert_id = @mysql_insert_id($this->dblink);
  297. if(!$this->last_insert_id)
  298. {
  299. $this->return_error("Unable to get the last inserted id from MySQL.");
  300. }
  301. return $this->last_insert_id;
  302. } //end function
  303. /**
  304.       * Counts the number of rows returned from a SELECT statement.
  305.       *
  306.       * @param      none
  307.       * @return     Int
  308.       * @access     public
  309.       */
  310. function resultCount()
  311.     {
  312.         $this->totalrecords = @mysql_num_rows($this->queryid);
  313. if(!$this->totalrecords)
  314. {
  315. $this->return_error("Unable to count the number of rows returned");
  316. }
  317. return $this->totalrecords;
  318.     } //end function
  319.     
  320. function affectedRows()
  321.     {
  322.         $rows = @mysql_affected_rows($this->dblink);
  323.         if($rows < 0)
  324.         {
  325.          $this->return_error("Unable to get the number of affected rows");
  326.          $rows = 0;
  327.         }
  328.         return $rows;
  329.     } //end function
  330. /**
  331.       * Checks to see if there are any records that were returned from a
  332.   * SELECT statement. If so, returns true, otherwise false.
  333.       *
  334.       * @param      none
  335.       * @return     boolean
  336.       * @access     public
  337.       */
  338. function resultExist()
  339.     {
  340. if(isset($this->queryid) && ($this->resultCount() > 0))
  341. {
  342. return true;
  343. }
  344. return false;
  345.     } //end function
  346. /**
  347.       * Clears any records in memory associated with a result set.
  348.       *
  349.       * @param      Int $result
  350.       * @return     void
  351.       * @access     public
  352.       */
  353. function clear($result = 0)
  354.     {
  355. if($result != 0)
  356. {
  357. $t = @mysql_free_result($result);
  358. if(!$t)
  359. {
  360. $this->return_error("Unable to free the results from memory");
  361. }
  362. }
  363. else
  364. {
  365. if(isset($this->queryid))
  366. {
  367. $t = @mysql_free_result($this->queryid);
  368. if(!$t)
  369. {
  370. $this->return_error("Unable to free the results from memory (internal).");
  371. }
  372. }
  373. else
  374. {
  375.     $this->return_error("No SELECT query performed, so nothing to clear.");
  376. }
  377. }
  378. } //end function
  379. function enumsetValues($table, $column, $bitmaskkeys = false)
  380. {
  381. $values = array();
  382. $this->query("show columns from ".$table." like '".$column."'");
  383. if($row = $this->fetchRow())
  384. {
  385. /* $values = $row["Type"];
  386. $values = substr($values, 6, strlen($values)-8); 
  387. $values = str_replace("','",",",$values);
  388. $values = explode(",",$values);
  389. */
  390. $values = explode("','",preg_replace("/(enum|set)('(.+?)')/","\2",$row[1]));
  391. if($bitmaskkeys)
  392. {
  393. $tmp = array();
  394. foreach($values as $i => $val) $tmp[1<<$i] = $val;
  395. $values = &$tmp;
  396. }
  397. }
  398. return $values;
  399. }
  400. function count($table, $field = '*')
  401. {
  402. $req = "select count($field) from $table";
  403. if(!$this->query($req) || !($row = $this->fetchRow()))
  404. return false;
  405. return $row[0];
  406. }
  407. function fetchAll($req, &$rows)
  408. {
  409. $this->query($req);
  410. $rows = array();
  411. while($row = $this->fetchRow())
  412. $rows[] = $row;
  413. }
  414. function begin() {return $this->query("BEGIN");}
  415. function commit() {return $this->query("COMMIT");}
  416. function rollback() {return $this->query("ROLLBACK");}
  417. }    //end class
  418. define('ISDB_VERSION', 1);
  419. define('ONEYEAR', 60*60*24*365);
  420. class SubtitlesDB extends DB 
  421. {
  422. function Create()
  423. {
  424. if(!ereg('localhost', $this->dbhost))
  425. return;
  426.         ($dblink = @mysql_connect($this->dbhost, $this->dblogin."_init", $this->dbpass, MYSQL_CLIENT_COMPRESS)) or die(mysql_error());
  427.         @mysql_query(
  428. "CREATE DATABASE IF NOT EXISTS `subtitles`",
  429. $dblink)
  430. or die(mysql_error());
  431. @mysql_query(
  432. "USE `subtitles`",
  433. $dblink)
  434. or die(mysql_error());
  435. @mysql_query(
  436. "CREATE TABLE IF NOT EXISTS `comments` ( ".
  437. "  `id` bigint(20) NOT NULL auto_increment, ".
  438. "  `subtitle_id` bigint(20) NOT NULL default '0', ".
  439. "  `nick` varchar(32) NOT NULL default '', ".
  440. "  `at` datetime NOT NULL default '0000-00-00 00:00:00', ".
  441. "  `content` mediumtext NOT NULL, ".
  442. "  `rating` tinyint(4) NOT NULL default '5', ".
  443. "  PRIMARY KEY  (`id`), ".
  444. "  KEY `subtitle_id` (`subtitle_id`), ".
  445. "  KEY `nick` (`nick`) ".
  446. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  447. "",
  448. $dblink)
  449. or die(mysql_error());
  450. @mysql_query(
  451. "CREATE TABLE IF NOT EXISTS `file` ( ".
  452. "  `id` bigint(20) NOT NULL auto_increment, ".
  453. "  `hash` varchar(16) NOT NULL default '', ".
  454. "  `size` varchar(16) NOT NULL default '', ".
  455. "  PRIMARY KEY  (`id`), ".
  456. "  KEY `hash` (`hash`), ".
  457. "  KEY `size` (`size`) ".
  458. ") ENGINE=InnoDB DEFAULT CHARSET=utf8  ".
  459. "",
  460. $dblink)
  461. or die(mysql_error());
  462. @mysql_query(
  463. "CREATE TABLE IF NOT EXISTS `file_subtitle` ( ".
  464. "  `id` bigint(20) NOT NULL auto_increment, ".
  465. "  `file_id` bigint(20) NOT NULL default '0', ".
  466. "  `subtitle_id` bigint(20) NOT NULL default '0', ".
  467. "  PRIMARY KEY  (`id`), ".
  468. "  KEY `file_id` (`file_id`), ".
  469. "  KEY `subtitle_id` (`subtitle_id`) ".
  470. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  471. "",
  472. $dblink)
  473. or die(mysql_error());
  474. @mysql_query(
  475. "CREATE TABLE IF NOT EXISTS `mirror` ( ".
  476. "  `id` bigint(20) NOT NULL auto_increment, ".
  477. "  `scheme` varchar(16) NOT NULL default '', ".
  478. "  `host` varchar(64) NOT NULL default '', ".
  479. "  `port` bigint(20) NOT NULL default '0', ".
  480. "  `path` varchar(64) NOT NULL default '', ".
  481. "  `name` varchar(64) NOT NULL default '', ".
  482. "  `lastseen` datetime NOT NULL default '0000-00-00 00:00:00', ".
  483. "  PRIMARY KEY  (`id`), ".
  484. "  KEY `lastseen` (`lastseen`) ".
  485. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  486. "",
  487. $dblink)
  488. or die(mysql_error());
  489. @mysql_query(
  490. "CREATE TABLE IF NOT EXISTS `movie` ( ".
  491. "  `id` bigint(20) NOT NULL auto_increment, ".
  492. "  `imdb` bigint(20) NOT NULL default '0', ".
  493. "  PRIMARY KEY  (`id`), ".
  494. "  UNIQUE KEY `imdb_2` (`imdb`), ".
  495. "  KEY `imdb` (`imdb`) ".
  496. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  497. "",
  498. $dblink)
  499. or die(mysql_error());
  500. @mysql_query(
  501. "CREATE TABLE IF NOT EXISTS `movie_subtitle` ( ".
  502. "  `id` bigint(20) NOT NULL auto_increment, ".
  503. "  `movie_id` bigint(20) NOT NULL default '0', ".
  504. "  `subtitle_id` bigint(20) NOT NULL default '0', ".
  505. "  `name` varchar(192) NOT NULL default '', ".
  506. "  `userid` bigint(20) NOT NULL default '0', ".
  507. "  `date` datetime NOT NULL default '0000-00-00 00:00:00', ".
  508. "  `notes` text NOT NULL, ".
  509. "  `format` enum('srt','sub','smi','ssa','ass','xss','other') NOT NULL default 'other', ".
  510. "  `iso639_2` varchar(3) NOT NULL default '', ".
  511. "  PRIMARY KEY  (`id`), ".
  512. "  KEY `movie_id` (`movie_id`), ".
  513. "  KEY `subtitle_id` (`subtitle_id`), ".
  514. "  KEY `format` (`format`), ".
  515. "  KEY `iso639_2` (`iso639_2`) ".
  516. " ) ENGINE=InnoDB DEFAULT CHARSET=utf8  ".
  517. "",
  518. $dblink)
  519. or die(mysql_error());
  520. @mysql_query(
  521. "CREATE TABLE IF NOT EXISTS `subtitle` ( ".
  522. "  `id` bigint(20) NOT NULL auto_increment, ".
  523. "  `discs` tinyint(4) NOT NULL default '0', ".
  524. "  `disc_no` tinyint(4) NOT NULL default '0', ".
  525. "  `sub` mediumblob NOT NULL, ".
  526. "  `hash` varchar(32) NOT NULL default '', ".
  527. "  `mime` varchar(64) NOT NULL default '', ".
  528. "  `downloads` bigint(20) NOT NULL default '0', ".
  529. "  PRIMARY KEY  (`id`), ".
  530. "  UNIQUE KEY `hash` (`hash`), ".
  531. "  KEY `discs` (`discs`) ".
  532. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  533. "",
  534. $dblink)
  535. or die(mysql_error());
  536. @mysql_query(
  537. "CREATE TABLE IF NOT EXISTS `title` ( ".
  538. "  `id` bigint(20) NOT NULL auto_increment, ".
  539. "  `movie_id` bigint(20) NOT NULL default '0', ".
  540. "  `title` varchar(255) NOT NULL default '', ".
  541. "  PRIMARY KEY  (`id`), ".
  542. "  KEY `movie_id` (`movie_id`), ".
  543. "  KEY `title` (`title`) ".
  544. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  545. "",
  546. $dblink)
  547. or die(mysql_error());
  548. @mysql_query(
  549. "CREATE TABLE IF NOT EXISTS `user` ( ".
  550. "  `userid` bigint(20) NOT NULL auto_increment, ".
  551. "  `nick` varchar(16) NOT NULL default '', ".
  552. "  `passwordhash` varchar(32) NOT NULL default '', ".
  553. "  `email` varchar(64) NOT NULL default '', ".
  554. "  PRIMARY KEY  (`userid`), ".
  555. "  KEY `nick_pwh` (`nick`,`passwordhash`) ".
  556. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  557. "",
  558. $dblink)
  559. or die(mysql_error());
  560. @mysql_query(
  561. "CREATE TABLE IF NOT EXISTS `settings` ( ".
  562. "  `param` varchar(16) NOT NULL default '', ".
  563. "  `value` varchar(255) NOT NULL default '', ".
  564. "  PRIMARY KEY  (`param`) ".
  565. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  566. "",
  567. $dblink)
  568. or die(mysql_error());
  569. @mysql_query(
  570. "CREATE TABLE IF NOT EXISTS `accesslog` ( ".
  571. "  `http_user_agent` varchar(128) NOT NULL default '', ".
  572. "  `remote_addr` varchar(16) NOT NULL default '', ".
  573. "  `at` datetime NOT NULL default '0000-00-00 00:00:00', ".
  574. "  `php_self` varchar(255) NOT NULL default '', ".
  575. "  `userid` bigint(20) NOT NULL default '0' ".
  576. ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ".
  577. "",
  578. $dblink)
  579. or die(mysql_error());
  580. @mysql_close($dblink);
  581. }
  582. var $userid = 0;
  583. var $nick = '';
  584. var $passwordhash = '';
  585. var $email = '';
  586. function pwdhash($password)
  587. {
  588. return md5($password.'qwerty');
  589. }
  590. function authorizehash($nick, $passwordhash, $rememberme)
  591. {
  592. $this->query("select * from user where nick = '".addslashes($nick)."' && passwordhash = '$passwordhash'");
  593. if(!($row = $this->fetchRow())) return false;
  594. $this->userid = $row['userid'];
  595. $this->nick = $nick;
  596. $this->passwordhash = $passwordhash;
  597. $this->email = $row['email'];
  598. $_SESSION['user_nick'] = $nick;
  599. $_SESSION['user_passwordhash'] = $passwordhash;
  600. if($rememberme)
  601. {
  602. setcookie('user_nick', $nick, time() + ONEYEAR, '/');
  603. setcookie('user_passwordhash', $passwordhash, time() + ONEYEAR, '/');
  604. }
  605. return true;
  606. }
  607. function authorize($username, $password, $rememberme)
  608. {
  609. return $this->authorizehash($username, $this->pwdhash($password), $rememberme);
  610. }
  611. function getSetting($param)
  612. {
  613. $this->query("select value from settings where param = '$param'");
  614. if(!($row = $this->fetchRow())) return null;
  615. return $row[0];
  616. }
  617. // public:
  618. function SubtitlesDB()
  619. {
  620. $this->DB("gabest", GABESTS_PASSWORD_TO_SUBTITLES, "subtitles");
  621. $this->Create();
  622. $this->connect() or die('Cannot connect to database!');
  623. $version = intval($this->getSetting('version'));
  624. if($version != ISDB_VERSION) die('Wrong database client version, please upgrade this web interface!');
  625. // mirrors
  626. $http_host = split(':', $_SERVER['HTTP_HOST']);
  627. if(!isset($http_host[1])) $http_host[1] = 80;
  628. $db_scheme = addslashes(isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on' ? 'https' : 'http');
  629. $db_host = addslashes($http_host[0]);
  630. $db_port = intval($http_host[1]);
  631. $db_path = addslashes(str_replace("\", '/', dirname($_SERVER['PHP_SELF'])));
  632. if($db_path != '/') $db_path .= '/';
  633. global $ServerName;
  634. $db_name = addslashes(isset($ServerName) ? $ServerName : "");
  635. if(!empty($db_host)
  636. && $db_host != 'localhost'
  637. && $db_host != '127.0.0.1'
  638. && !ereg('192.168.[0-9]+.[0-9]+', $db_host)
  639. && !ereg('10.[0-9]+.[0-9]+.[0-9]+', $db_host))
  640. {
  641. $db_host_other = ereg('^www.(.+)$', $db_host, $matches) ? $matches[1] : 'www.'.$db_host;
  642. $this->query("select id from mirror where host = '$db_host' || host = '$db_host_other'");
  643. if($row = $this->fetchRow())
  644. {
  645. $this->query(
  646. "update mirror set ".
  647. "scheme = '$db_scheme', host = '$db_host', port = $db_port, ".
  648. "path = '$db_path', name = '$db_name', lastseen = NOW() ".
  649. "where id = {$row['id']} ");
  650. }
  651. else
  652. {
  653. $this->query(
  654. "insert into mirror (scheme, host, port, path, name, lastseen) ".
  655. "values ('$db_scheme', '$db_host', $db_port, '$db_path', '$db_name', NOW()) ");
  656. }
  657. }
  658. // user
  659. if(isset($_SESSION['user_nick']) && isset($_SESSION['user_passwordhash'])
  660. && $this->authorizehash($_SESSION['user_nick'], $_SESSION['user_passwordhash'], false))
  661. {
  662. $_SESSION['user_nick'] = $this->nick;
  663. $_SESSION['user_passwordhash'] = $this->passwordhash;
  664. }
  665. else if(isset($_COOKIE['user_nick']) && isset($_COOKIE['user_passwordhash'])
  666. && $this->authorizehash($_COOKIE['user_nick'], $_COOKIE['user_passwordhash'], true))
  667. {
  668. $_SESSION['user_nick'] = $this->nick;
  669. $_SESSION['user_passwordhash'] = $this->passwordhash;
  670. }
  671. // accesslog
  672. $http_user_agent = addslashes($_SERVER['HTTP_USER_AGENT']);
  673. $remote_addr = addslashes($_SERVER['REMOTE_ADDR']);
  674. $remote_host = addslashes($_SERVER['REMOTE_HOST']);
  675. $php_self = addslashes($_SERVER['PHP_SELF']);
  676. $this->query(
  677. "insert into accesslog (http_user_agent, remote_addr, at, php_self, userid) ".
  678. "values ('$http_user_agent', '$remote_addr', NOW(), '$php_self', {$this->userid}) ");
  679. }
  680. function Login($username, $password, $rememberme)
  681. {
  682. $this->Logout();
  683. if(!$this->authorize($username, $password, $rememberme))
  684. return false;
  685. return true;
  686. }
  687. function Logout()
  688. {
  689. $this->userid = 0;
  690. $this->nick = '';
  691. $this->passwordhash = '';
  692. unset($_SESSION['user_nick']);
  693. unset($_SESSION['user_passwordhash']);
  694. setcookie('user_nick', '', time() - ONEYEAR, '/');
  695. setcookie('user_passwordhash', '', time() - ONEYEAR, '/');
  696. }
  697. function Register($nick, $password, $email)
  698. {
  699. $passwordhash = $this->pwdhash($password);
  700. $email = addslashes($email);
  701. return !!$this->query("insert into user (nick, passwordhash, email) values ('$nick', '$passwordhash', '$email')");
  702. }
  703. function IsLoggedIn()
  704. {
  705. return $this->userid > 0;
  706. }
  707. }
  708. function chkerr() {global $db; if($db->hasErrors()) {$db->showErrors(); exit;}}
  709. $db = new SubtitlesDB();
  710. global $smarty;
  711. if(isset($smarty))
  712. {
  713. unset($user);
  714. $user['userid'] = $db->userid;
  715. $user['nick'] = $db->nick;
  716. $smarty->assign('user', $user);
  717. unset($user);
  718. }
  719. ?>