Версия сугубо демонстрационная, пароли храниться в неизменённом виде (обычно этого следует избегать) Update: сделал нормальный вариант, пароли хранятся в SHA1 PHP: <?php /* сама наша база CREATE TABLE `users` ( `username` char(24) NOT NULL, `password` binary(40) NOT NULL, UNIQUE KEY `username` (`username`) ) ENGINE=MyISAM; INSERT INTO `users` (`username`, `password`) VALUES ('Vladson', '7c4a8d09ca3762af61e59520943dc26494f8941b'); */ // тут всё логично if (!isset($_SERVER['PHP_AUTH_USER'])) { Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); Header ("HTTP/1.0 401 Unauthorized"); exit(); } // тут посылаем нафик кавычки if (get_magic_quotes_gpc()) { $_SERVER['PHP_AUTH_USER'] = stripslashes($_SERVER['PHP_AUTH_USER']); $_SERVER['PHP_AUTH_PW'] = stripslashes($_SERVER['PHP_AUTH_PW']); } // конект к базе $dbh = new PDO('mysql:dbname=test;host=localhost', 'root', ''); // готовим запрос $sth = $dbh->prepare('SELECT * FROM `users` WHERE `username` = :username AND `password` = SHA1(:password);'); // подставляем данные и отправляем запрос $sth->execute(array( ':username' => $_SERVER['PHP_AUTH_USER'], ':password' => $_SERVER['PHP_AUTH_PW'] ) ); // Получаем ответ $user_data = $sth->fetch(PDO::FETCH_ASSOC); // false в случае если юзера нет или пароль неверный if ($user_data == false || !is_array($user_data)) { Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); Header ("HTTP/1.0 401 Unauthorized"); exit(); } // или вся информация идёт в $user_data Header ("Content-type: text/plain"); var_dump($user_data); ?>
мм, а для чего это?) Ну, как бы степень полезности невелика, если не сказать что нулевая Если б ты что-то типа такого http://pyha.ru/forum/topic/4488.0 забабахал...
В прошлый раз давал ещё менее полезное решение, но оно вызвало не мало реакции, как критики так и наоборот благодарностей... Смысл примерно в том чтоб 1 - показать как это работает (есть люди которые делают тоже самое через задний проход, недавно на одном форуме парниша спрашивал хорош ли его код, этот выбирал юзера, и уже в РНР сравнивал пароль, само собой код был полон дыр) 2 - пропогандировать PDO (ещё год-два назад на дешёвых и бесплатных хостах был редкость, сегодня есть практически везде) не редко встречаю коментарии новичков которые говорят что это сложно, я же стараюсь показать насколько это удобно и просто
пропаганда PDO попахивает борьбой с ветряными мельницами. По поводу удобства я бы тоже поспорил. PHP: <?php $userdata = $this->context->db('read')->fetch('SELECT * FROM {users} WHERE `username` = ?s', $_SERVER['PHP_AUTH_USER']); для меня это удобно ?s - обрамляет одинарными кавычками + эсскейпинг строки {users} - добавляет префикс к таблице
PHP: <?php PHP::getInstance()->setVar(PHP::String("username"))->getVar(PHP::Zval(PHP::String("this")))->requestVarByLastExecuteVar(PHP::String("context"))->reqestFuncByLastExecuteVar(PHP::String("db"),PHP::Array(PHP::String("read")))->requestFuncByLastExecuteVar(PHP::String("fetch"),PHP::Array(PHP::String("SELECT * FROM {users} WHERE `username` = ?s"),PHP::getInstance()->getVar(PHP::Array(PHP::String("_SERVER"),PHP::String("PHP_AUTH_USER"))))) ->if(PHP::ReqeustFunc(PHP::String("empty"),PHP::Array(PHP::getInstance()->getVar(PHP::Zval(PHP::String("username")))))) не всё. больше немогу =))
Кому и Вупи Голдберг невеста, но речь не о тебе. Во времена РНР4.2 жизнь волшебных кавычек тоже встала под вопрос, однако на 95% хостингах до сих пор стоит. Но топик не про PDO и тем более не про волшебные кавычки, это просто "готовое решение" для тех кто не может написать даже такое.
да хрень это. Я же говорю, вот напиши trueЪ расширяемое решение, которое будет поддерживать как PDO так и Redis, для http base auth и для контакта/фейсбука. Это ж куда интересней.
Не, здесь другое - на развитие PDO не хватает ресурсов - им просто почти никто не занимается, а нативные библиотеки уверенно топают вперёд. Из-за этого разрыв в возможностях сейчас довольно приличный. Поэтому есть мнение, что PDO нужно выкинуть в PECL и не тратить на него ресурсы, т.к. разработчиков почти нету, а сконцентрироваться на нативных библиотеках, т.к. их поддерживают сами вендоры. З.Ы. А кавычки убили, точнее они щас depricated и в следующем major релизе будут убиты физически. Как и safe_mode и ещё некоторые вещи
наступит эра "пизды" для говнохостингов, 9(% используют это гавно для "защиты" на шаредах .... дибилы ну и хй в них, пусть умрут. УРА!
даже IBM не гнушается постить всякую хуйню для нубасей http://www.ibm.com/developerworks/ru/li ... index.html Фу, противно.
Чё я у себя нашёл!!! PHP: <?php include "sis/classes/ghtml.class.php"; $cities_id=array(1,2,3,4,5,6); $cities_name=array("MSK","SPB","NN","KZ","NOV","UFA"); GHTML::Run(array("html_autoinsert_on"=>0,"html_method"=>"_POST")); print GHTML::Link("/test.php",null,GHTML::Link("/test.php","style='font-weight:bold;font-size:20px;'")->Html("[Главная]"))->Html("[Главная]"); print " "; print GHTML::Link("/test.php?act=reg",null,GHTML::Link("/test.php?act=reg","style='font-weight:bold;font-size:20px;'")->Html("[Регистрация]"))->Html("[Регистрация]"); print GHTML::Form("POST","") ->HTML( GHTML::Input("name","text","Имя пользователя",null,true)->Html(), "<br>", GHTML::Input("pass1","password","Пароль")->Html(), "<br>", GHTML::Input("pass2","password","Пароль ещё раз")->Html(), "<br>", GHTML::Select("city")->Html( GHTML::Option("")->Html("Выберите город"), GHTML::Option($cities_id,$_POST['city'])->Html($cities_name) ), "<br>", GHTML::CheckBoxList("che_cities[]",$cities_id,null,$_POST['che_cities'])->Html($cities_name), "<br>", GHTML::RadioList("r_cities[]",$cities_id,null,$_POST['r_cities'])->Html($cities_name), "<br>", GHTML::Textarea("resume",50,9,null,true)->Html("Ненмого о себе"), "<br>", GHTML::Input("","submit","Жми!")->Html() ); HTML: <a href='/test.php' style='font-weight:bold;font-size:20px;' />[Главная]</a> <a href='/test.php?act=reg' />[Регистрация]</a><form method='POST' action='' /><input type='text' name='name' value='Имя пользователя' /><br><input type='password' name='pass1' value='Пароль' /><br><input type='password' name='pass2' value='Пароль ещё раз' /><br><select name='city' /><option value='' />Выберите город</option><option value='6' />MSK</option><option value='5' />SPB</option><option value='4' />NN</option><option value='3' />KZ</option><option value='2' />NOV</option><option value='1' />UFA</option></select><br><input type='checkbox' name='che_cities[]' value='6' />MSK<br /><input type='checkbox' name='che_cities[]' value='5' />SPB<br /><input type='checkbox' name='che_cities[]' value='4' />NN<br /><input type='checkbox' name='che_cities[]' value='3' />KZ<br /><input type='checkbox' name='che_cities[]' value='2' />NOV<br /><input type='checkbox' name='che_cities[]' value='1' />UFA<br /><br><input type='radio' name='r_cities[]' value='6' />MSK<br /><input type='radio' name='r_cities[]' value='5' />SPB<br /><input type='radio' name='r_cities[]' value='4' />NN<br /><input type='radio' name='r_cities[]' value='3' />KZ<br /><input type='radio' name='r_cities[]' value='2' />NOV<br /><input type='radio' name='r_cities[]' value='1' />UFA<br /><br><textarea name='resume' cols='50' rows='9' />Ненмого о себе</textarea><br><input type='submit' name='' value='Жми!' /></form>
3D на PHP, че GIFEncoder v2.0 запускать в консоли PHP: <?php set_time_limit(0); $start = microtime(1); include('gif_animate.php'); class space { public $points = array(); private $x; private $y; public $steps = 0; public function __construct($x, $y, $z) { $this -> x = $x; $this -> y = $y; $this -> z = $z; } public function addPoint($point, $x, $y, $z, $fx = 0, $fy = 0, $fz = 0) { array_push($this -> points, array($point, $x, $y, $z)); $point -> addP($fx, $fy, $fz); } public function step() { $t = 1; $busy = array(); foreach ($this -> points as $n => &$point) { $x = $point[1]; $y = $point[2]; $z = $point[3]; if (!($x >= 0 && $x < $this->x && $y >= 0 && $y < $this->y && $z >= 0 && $z < $this->z)) { unset($this->points[$n]); continue; } $f = abs($point[0]->p['fx']) + abs($point[0]->p['fy']) + abs($point[0]->p['fz']); if ($f > 0 && 1 / $f < $t) { $t = 1 / $f; } } foreach ($this -> points as $n => &$point) { $xyz = abs($point[0]->p['fx']) + abs($point[0]->p['fy']) + abs($point[0]->p['fz']); $hypo = pow(abs($point[0]->p['fx']), 2) + pow(abs($point[0]->p['fy']), 2) + pow(abs($point[0]->p['fz']), 2); if ($point[0]->p['fx'] != 0 && $xyz > 0) { if ($point[0]->p['fx'] < 0) { $fxmin = 1; } $move_x = sqrt($hypo) * ($point[0]->p['fx'] / $xyz); if (isset($fxmin)) $move_x = $move_x * -1; } else { $move_x = 0; } if ($point[0]->p['fz'] != 0 && $xyz > 0) { if ($point[0]->p['fy'] < 0) { $fymin = 1; } $move_y = sqrt($hypo) * ($point[0]->p['fy'] / $xyz); if (isset($fymin)) $move_y = $move_y * -1; } else { $move_y = 0; } if ($point[0]->p['fz'] != 0 && $xyz > 0) { if ($point[0]->p['fz'] < 0) { $fzmin = 1; } $move_z = sqrt($hypo) * ($point[0]->p['fz'] / $xyz); if (isset($fzmin)) $move_z = $move_z * -1; } else { $move_z = 0; } $point[1] += $move_x*$t; $point[2] += $move_y*$t; $point[3] += $move_z*$t; } $this -> steps+=$t; } public function shot() { $r = imagecreatetruecolor($this -> x+1, $this -> y+1); foreach ($this -> points as &$point) { $x = $point[1]; $y = $point[2]; $z = $point[3]; if ($x >= 0 && $x < $this->x && $y >= 0 && $y < $this->y && $z >= 0 && $z < $this -> z) { $ox = $this->x / 2; $oy = $this->y / 2; $oz = $this->z / 2; $xf = $x - $ox; $yf = $y - $oy; $zf = $z; $xr = $x - $xf / ($this->z/($this->z - $z)); $yr = $y - $yf / ($this->z/($this->z - $z)); imageline($r, $xr, $yr, $xr, $yr, $point[0]->color); } } ob_start(); imagegif($r); return ob_get_clean(); } } class Point { public $p = array('fx' => 0, 'fy' => 0, 'fz' => 0); public $color; public function __construct() { $red = dechex(rand(1, 255)); if (strlen($red) < 2) $red = '0'.$red; $green = dechex(rand(1, 255)); if (strlen($green) < 2) $green = '0'.$green; $blue = dechex(rand(1, 255)); if (strlen($blue) < 2) $blue = '0'.$blue; $this->color = hexdec("0x$red$green$blue"); } public function addP($fx = 0, $fy = 0, $fz = 0) { $this->p['fx'] += $fx; $this->p['fy'] += $fy; $this->p['fz'] += $fz; } } $gifs = array(); $space = new space(399, 399, 399, false, true); $xs = range(-31, 31); $rands = range(-10, 10, 0.5); for ($i=0; $i<1000; $i++) { $space->addPoint(new Point, 200, 200, 200, $rands[array_rand($rands)], $rands[array_rand($rands)], $rands[array_rand($rands)]); } while($space->steps < 100) { $nshot = $space -> steps; $space -> step(); if ((int)$nshot < (int)$space -> steps) { array_push($gifs, $space -> shot()); echo 'Step #',$space -> steps,"\r\n"; } } $gif = new GIFEncoder($gifs, 0, 0, 0, 0, 0, 0, 'bin'); file_put_contents('c:\anim.gif', $gif -> GetAnimation()); echo "\r\nTime: ",substr(microtime(1) - $start, 0, 4);