user.sql Код (Text): SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; CREATE TABLE `user` ( `id` int(12) NOT NULL COMMENT 'уник.номер', `user` varchar(26) NOT NULL COMMENT 'логин', `pass` varchar(100) NOT NULL COMMENT 'пароль', `ip` varchar(20) NOT NULL COMMENT 'сет.адрес', `vhod` varchar(14) NOT NULL COMMENT 'посл.вход' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='пользователи'; ALTER TABLE `user` ADD PRIMARY KEY (`id`); ALTER TABLE `user` MODIFY `id` int(12) NOT NULL AUTO_INCREMENT COMMENT 'уник.номер', AUTO_INCREMENT=1;COMMIT; db.php PHP: <?php // mysql класс для работы с бд define("MHOST", "localhost"); // localhost define("MUSER", "root"); // имя пользователя базы данных define("MPASS", "bsznOe0U9o"); // пароль пользователя базы данных define("MDBNM", "solve"); // имя базы данных mysql class DBi { public static $conn; public static $lastquery; public static function get($args) { return self::$conn->$args; } public static function __callStatic($func, $args) { if(is_null(self::$conn)){ self::$conn = new mysqli(MHOST, MUSER, MPASS, MDBNM); // сервер логин пароль база данных if (self::$conn->connect_error) { die('Connect Error (' . self::$conn->connect_errno . ') '. self::$conn->connect_error); } DBi::set_charset("utf8"); } return call_user_func_array(array(self::$conn, $func), $args); } } // простой запрос в БД function mq($sql) { $res = DBi::query($sql); if (!is_bool($res)) $res->free(); } // вставить ряд в БД function mi($sql) { $res = DBi::query($sql); $id = 0; if ($res===true) $id = DBi::get("insert_id"); if (!is_bool($res)) $res->free(); return $id; } // получаем линию в БД function mr($sql) { $res = DBi::query($sql); $row = false; if (!is_bool($res) AND $res->num_rows>0) $row = $res->fetch_assoc(); if (!is_bool($res)) $res->free(); return $row; } // получаем поле из БД function mf($sql,$field) { $res = DBi::query($sql); $row = false; if (!is_bool($res) AND $res->num_rows>0) $row = $res->fetch_assoc(); if (!is_bool($res)) $res->free(); if (isset($row[$field])) return $row[$field]; return false; } // получаем массив в БД function ma($sql) { $res = DBi::query($sql); $rows = array(); if (!is_bool($res) AND $res->num_rows>0) { while ($row = $res->fetch_assoc()) $rows[] = $row; } if (!is_bool($res)) $res->free(); return $rows; } // склеивание и препарирование в SET SQL function sqlset($arr) { $out = array(); foreach ($arr as $k=>$v) { if (is_null($v)) $b = 'NULL'; elseif ($v === "NOW()") $b = 'NOW()'; else $b = "'".DBi::real_escape_string($v)."'"; $k2 = explode('.',$k); $k1 = array_pop($k2); $k2[] = '`'.$k1.'`'; $out[] = implode('.',$k2).' = '.$b; } return implode(', ',$out); } // склеивание и препарирование в Mysql Where function sqlwhere($arr) { $out = array(); foreach ($arr as $k=>$v) { if (is_null($v)) $b = 'NULL'; elseif ($v === "NOW()") $b = 'NOW()'; else $b = "'".DBi::real_escape_string($v)."'"; $k2 = explode('.',$k); $k1 = array_pop($k2); $k2[] = '`'.$k1.'`'; $out[] = implode('.',$k2).' = '.$b; } return implode(' AND ',$out); } func.php PHP: <?php // получить значение сессии function ss($a) { if (!isset($_SESSION)) session_start(); if (isset($_SESSION[$a])) return $_SESSION[$a]; return null; } // перейти на другую страницу и завершить работу function move($url) { ?> <script> document.location.href = '<?php echo $url; ?>'; </script> <?php exit; } // записать куку с помощью javascript function set2user($name,$value=null) { if ($value==null) { $value = ""; $exp = gmdate('D, d M Y H:i:s \G\M\T', time()-3600); } else { $exp = gmdate('D, d M Y H:i:s \G\M\T', time()+32000000); } echo '<script>document.cookie = "'.$name.'='.urlencode($value).'; expires='.$exp.'; path=/; domain='.$_SERVER['HTTP_HOST'].'";</script>'; } // сохранение сообщения об ошибке в сессию function redmessage($s) { $_SESSION['error'] = '<div style="color:red; font-weight:bold">'.$s.'</div>'; } // вход или регистрация function login($a,$b) { if (!preg_match("/^[a-z0-9A-Z]*$/ismU", $a)) redmessage('Логин указан не верно'); elseif (!preg_match("/^[a-z0-9A-Z]*$/ismU", $b)) redmessage('Пароль указан не верно'); else { $_SESSION = array(); $mas = array('user'=>$a,'pass'=>$b); $row = mr("SELECT * FROM `user` WHERE ".sqlwhere($mas)); if ($row) { $uset = array('vhod'=>time(),'ip'=>$_SERVER['REMOTE_ADDR']); mq("UPDATE `user` SET ".sqlset($uset)." WHERE ".sqlwhere($mas)); } else { $uset = array('vhod'=>time(),'ip'=>$_SERVER['REMOTE_ADDR']) + $mas; mi("INSERT INTO `user` SET ".sqlset($uset)); } $row = mr("SELECT * FROM `user` WHERE ".sqlwhere($mas)); if ($row) { $_SESSION = $row; set2user("id",$_SESSION['id']); set2user("user",$_SESSION['user']); set2user("pass",$_SESSION['pass']); move('index.php'); } else { redmessage('Вход или регистрация не удалась'); } } } // восстановление сессии пользователя на основе cookie if (ss('id')===null AND isset($_COOKIE['user']) AND isset($_COOKIE['pass'])) { login($_COOKIE['user'], $_COOKIE['pass']); } // вывод сообщения об ошибке function rms() { if (empty($_SESSION['error'])) return; echo $_SESSION['error']; $_SESSION['error'] = ''; } // генерация пароля function genpas() { $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789"; $pass = ""; for ($i = 0; $i < 8; $i++) { $n = rand(0, strlen($alphabet)-1); $pass .= $alphabet[$n]; } return $pass; } // увеличение строки a-z0-9 function next26($s) { if (!is_string($s)) return 'a'; $s1 = substr($s,0,-1); $s2 = substr($s,-1,1); if ($s2=='9') $s1 = next26($s1); $sw = 'abcdefghijklmnopqrstuvwxyz0123456789a'; $p2 = strpos($sw,$s2); $s2 = substr($sw,$p2+1,1); return $s1.$s2; } // новый логин function newlog() { $login = mf('SELECT `user` FROM `user` ORDER BY `id` DESC LIMIT 1','user'); return next26($login); } menu.php PHP: <a href="index.php">Главная страница</a> <a href="enter.php"><?php if (ss('id')===null) echo 'Вход / Регистрация'; else echo 'Выход ('.ss('user').')'; ?></a> <br> index.php PHP: <?php require 'db.php'; require 'func.php'; require 'menu.php'; ?> <p>Добро пожаловать на первую страницу</p> enter.php PHP: <?php require 'db.php'; require 'func.php'; require 'menu.php'; // выход пользователя if (ss('id')!==null) { $_SESSION = array(); set2user("id"); set2user("user"); set2user("pass"); move('index.php'); } // вход или регистрация пользователя if (isset($_POST['user']) AND isset($_POST['pass'])) { login($_POST['user'], $_POST['pass']); } ?> <p><b class="fan">Вход</b></p> <form action="enter.php" method="post"> <p>Логин</p> <input type="text" size="10" name="user"> <p>Пароль</p> <input type="password" size="10" name="pass"> <br> <input type="submit" value="Войти"> </form> <p><b class="fan">Регистрация</b></p> <form action="enter.php" method="post"> <p>Логин</p> <input type="text" size="10" name="user" value="<?php echo newlog(); ?>"> <p>Пароль</p> <input type="text" size="10" name="pass" value="<?php echo genpas(); ?>"> <br> <input type="submit" value="Регистрация"> </form>
Это в смысле, чтобы я не ввёл, система меня пустит? Полезно Пароль в открытом виде - трындец. Смысл всех эти фокусов над mysqli не понимаю, ну ладно, тут много любителей так делать.