Mr.M.I.T. мне к 07.08.09 надо уже чтоб была авторизация, регистрация, выход вообще любой сама я не могу, не хватает там чего-то у меня в голове. Тяжело дается знание, а хочется... материалов нет, интернета тоже нет. Только на работе есть.
Sofia В регистрации ничего сложного нет. Это всего лишь, как минимум, запись в БД тех полей, которые использует авторизация.
Sofia я бы рекомендовал читать книги. Это помогает лучше чем что либо, по крайней мере мне. Например PHP в подлиннике. Вот пока ты на работе скачай электронный вариант и потом читай дома. А то ты так освоишь PHP когда он станет устаревшей технологией.
PHP: <?php if(isset($_COOKIE['login']) && isset($_COOKIE['password'])) { $aut = mysql_query("SELECT * FROM users WHERE login = '".mysql_real_escape_string($_COOKIE['login'])."' AND password = '".mysql_real_escape_string($_COOKIE['password'])."'"); if(mysql_num_rows($aut) > 0) { $au = 1; $aut = mysql_fetch_array($aut); } else { $au = null; } } if($au) { echo 'id пользователя: '.$aut['id']; } else { echo 'А мы то, оказывается, не авторизованы"'; } ?> Как в куку записать, думаю, объяснять не нужно?
kostyl спасибо за совет, читаю... но думаю не найду в книге ответа до завтрашнего обеда, поэтому обратилась сюда. Вопрос по прежнему открыт
а кто сказал, что он не захэширован? =) просто на скорую руку накидал пример. думаю, есть от чего оттолкнуться. все же лучше чем ничего =) P.S. пример взлома? просто интересно, взять на вооружение.
Никак связать не могу это: PHP: <? /* (c) Mr.M.I.T. [url=http://mit-home.nov.ru]http://mit-home.nov.ru[/url] */ ############################ # Set Defaults ############################ set_magic_quotes_runtime(0); session_start(); $do=$_GET['do']; $error=false; $_SESSION['user']=!$_SESSION['user']?array('group'=>"guest"):$_SESSION['user']; $GLOBALS['cnf']=get_serial('db_cnf'); ############################ # Support Functions ############################ function get_serial($name,$dir='') { $res=array(); $fp=@file_get_contents(($dir?"$dir/{$name}.php":"{$name}.php")); if ($fp) { $fp=str_replace("<?die();?>","",$fp); $res=unserialize($fp); } return $res; } function set_serial($arr,$name,$dir='') { $arr="<?die();?>".serialize($arr); $fp=fopen(($dir?"$dir/{$name}.php":"{$name}.php"),"w"); fputs($fp,$arr); fclose($fp); } function givepost($keys,$msql=false) { $arr=array(); if ($_POST) { $keys=explode(',',$keys); for($i=0,$c=count($keys);$i<$c;$i++) { $arr[$keys[$i]]=$msql?mysql_real_escape_string($_POST[$keys[$i]]):$_POST[$keys[$i]]; } } return $arr; } function emptypost($keys) { if ($_POST) { $keys=explode(',',$keys); for($i=0,$c=count($keys);$i<$c;$i++) { if (empty($_POST[$keys[$i]])) { return true; } } return false; } return true; } function db_connect() { if (!$GLOBALS['db_connid']) { $GLOBALS['db_connid']= mysql_connect($GLOBALS['cnf']['db_host'],$GLOBALS['cnf']['db_user'],$GLOBALS['cnf']['db_pass']) or die(mysql_error()); mysql_query('SET NAMES '.$GLOBALS['cnf']['db_encoding']); mysql_select_db($GLOBALS['cnf']['db_name'],$GLOBALS['db_connid']); $GLOBALS['cnf']['db_pref']=mysql_real_escape_string($GLOBALS['cnf']['db_pref']); } return $GLOBALS['db_connid']; } ################################ # Install ################################ if (empty($GLOBALS['cnf'])) { if (isset($_POST['done'])) { if (!emptypost("db_name,db_host,db_user,db_encoding,db_pref")) { $GLOBALS['cnf']=givepost("db_name,db_pass,db_host,db_user,db_encoding,db_pref"); if (db_connect()) { set_serial($GLOBALS['cnf'],'db_cnf'); mysql_query(" CREATE TABLE `{$GLOBALS['cnf']['db_pref']}_auth` ( `id_user` int(11) NOT NULL auto_increment, `login` varchar(300) NOT NULL, `pass` varchar(32) NOT NULL, PRIMARY KEY (`id_user`), KEY `login` (`login`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ") or die(mysql_error()); $error='Установка...'; header("Refresh: 2"); } }else { $error="Ошибка: Обязательные поля нужно заполнить"; } } print " ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")." <form method=POST> <table width=30% align=center border=1> <tr> <td colspan=2 align=center>Установка...</td> <tr> <td>db_name</td><td><input type='text' name='db_name'></td> <tr> <td>db_pass</td><td><input type='text' name='db_pass'></td> <tr> <td>db_user</td><td><input type='text' name='db_user'></td> <tr> <td>db_host</td><td><input type='text' name='db_host'></td> <tr> <td>db_prefix</td><td><input type='text' name='db_pref' value='pref'></td> <tr> <td>db_encoding</td><td><input type='text' name='db_encoding' value='cp1251'></td> <tr> <td colspan=2 align=center><input type=submit name='done' value='Установить'></td> </table> </form> "; die(); } ############################## # Auth/Out/Register ############################## $db=db_connect(); switch($do) { case"out": unset($_SESSION['user']); session_destroy(); if (!headers_sent()) { setcookie("save",'',time()+99999,'/'); } header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF'])); break; case"register": $login=$_POST['login']; $pass1=$_POST['pass1']; $pass2=$_POST['pass2']; if (isset($login) && isset($pass1) && isset($pass2)) { if (!empty($login) && !empty($pass1) && !empty($pass2)) { $login=mysql_real_escape_string(htmlspecialchars($login)); $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'"); if (!mysql_num_rows($sql)) { if (strlen($pass1)>=4) { $pass1=md5($pass1); $pass2=md5($pass2); if ($pass1==$pass2) { if(mysql_query("INSERT INTO {$GLOBALS['cnf']['db_pref']}_auth VALUES(NULL,'$login','$pass1')")) { $error="Вы успешно зарегистрированны"; header("Refresh:3;url=".$_SERVER['PHP_SELF']); }else{ $error="Системная ошибка, не могу занести информацию в БД"; } }else { $error="Ошибка: Пароли не совпадают"; } }else { $error="Ошибка: Минимальная длина пароля 4 символа"; } } else { $error="Ошибка: Такой пользователь уже существует"; } }else { $error="Ошибка: Обязательные поля нужно заполнить"; } } print " ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")." <form method=POST> <table width=30% align=center border=1> <tr> <td>Login</td><td><input type='text' name='login'></td> <tr> <td>Pass 1</td><td><input type='password' name='pass1'></td> <tr> <td>Pass 2</td><td><input type='password' name='pass2'></td> <tr> <td colspan=2 align=center><input type=submit value='Регистрация'></td> </table> </form> "; break; default: if ($_SESSION['user']['group']=='guest') { $_COOKIE['save']=$_COOKIE['save']?unserialize($_COOKIE['save']):""; $login=!$_COOKIE['save']['login'] || isset($_POST['login'])?$_POST['login']:$_COOKIE['save']['login']; $pass=!$_COOKIE['save']['pass'] || isset($_POST['pass'])?$_POST['pass']:$_COOKIE['save']['pass']; if (isset($login) && isset($pass)) { if (!empty($login) && !empty($pass)) { if (!$_COOKIE['save']['pass'] || isset($_POST['pass'])) $pass=md5($pass); $login=mysql_real_escape_string(htmlspecialchars($login)); $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'"); if (mysql_num_rows($sql)) { $row=mysql_fetch_assoc($sql); if ($row['pass']==$pass) { $_SESSION['user']['group']='user'; $_SESSION['user']['login']=$row['login']; if (!headers_sent() && $_POST['save']) { $cook=array(); $cook['pass']=$pass; $cook['login']=$row['login']; setcookie("save",serialize($cook),time()+99999,'/'); } }else { $error="Ошибка: Неверный Пароль"; } }else { $error="Ошибка: Такого Пользователя не существует"; } }else { $error="Ошибка: Обязательные поля нужно заполнить"; } } } if ($_SESSION['user']['group']=='guest') { print " ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")." <form method=POST> <table width=30% align=center border=1> <tr> <td>Login</td><td><input type='text' name='login'></td> <tr> <td>Pass</td><td><input type='password' name='pass'></td> <tr> <td>Запомнить?</td><td><input type='checkbox' name='save' value='1'></td> <tr> <td colspan=2><a href='?do=register'>Регистрация</a></td> <tr> <td colspan=2 align=center><input type=submit value='Войти'></td> </table> </form> "; }else { print " <table width=30% align=center border=1> <tr> <td>Вы вошли как</td><td>{$_SESSION['user']['login']} <a href='?do=out'>Выйти</a></td> </table> "; } } ?> это: PHP: <?php if(isset($_COOKIE['login']) && isset($_COOKIE['password'])) { $aut = mysql_query("SELECT * FROM users WHERE login = '".mysql_real_escape_string($_COOKIE['login'])."' AND password = '".mysql_real_escape_string($_COOKIE['password'])."'"); if(mysql_num_rows($aut) > 0) { $au = 1; $aut = mysql_fetch_array($aut); } else { $au = null; } } if($au) { echo 'id пользователя: '.$aut['id']; } else { echo 'А мы то, оказывается, не авторизованы"'; } ?> и это: PHP: <? $db_host="localhost"; $db_name="test"; $username="test5"; $password="pass"; $db_con=mysql_connect($db_host,$username,$password); $connection_string=mysql_select_db($db_name); ?>
kostyl я и не прикалываюсь... мне действительно хочется избавиться от файла db_cnf.php. Хочется использовать соединение с базой простое, обычное, не сложное... а без этого файла, в котором ничего не понятно не работает вообще ничего... одни сплошные ошибки.
может для примера реализации логина еще и цмс написать со всеми функциями? )) просили пример - пример есть. защиту от перебора\ограбления корованов\регистрации участников с матерными никами\отсеивание пользователей с маленькими членами\еще что-нибудь невообразимое - неужели я в примере должен все учитывать? ))
kas1e да не нервничай ты так. Все нормально. Sofia понятно, если элементарные вещи не можешь сделать.
вот в этой функции происходит конект отредактируй её как надо PHP: function db_connect() { if (!$GLOBALS['db_connid']) { $GLOBALS['db_connid']= mysql_connect($GLOBALS['cnf']['db_host'],$GLOBALS['cnf']['db_user'],$GLOBALS['cnf']['db_pass']) or die(mysql_error()); mysql_query('SET NAMES '.$GLOBALS['cnf']['db_encoding']); mysql_select_db($GLOBALS['cnf']['db_name'],$GLOBALS['db_connid']); $GLOBALS['cnf']['db_pref']=mysql_real_escape_string($GLOBALS['cnf']['db_pref']); } return $GLOBALS['db_connid']; }
Mr.M.I.T. это я поняла, пытаюсь отредактировать, пока от ошибок избавиться не могу. понять бы еще, зачем: PHP: <?php if(isset($_COOKIE['login']) && isset($_COOKIE['password'])) { $aut = mysql_query("SELECT * FROM users WHERE login = '".mysql_real_escape_string($_COOKIE['login'])."' AND password = '".mysql_real_escape_string($_COOKIE['password'])."'"); if(mysql_num_rows($aut) > 0) { $au = 1; $aut = mysql_fetch_array($aut); } else { $au = null; } } if($au) { echo 'id пользователя: '.$aut['id']; } else { echo 'А мы то, оказывается, не авторизованы"'; } ?>