За последние 24 часа нас посетили 19328 программистов и 1615 роботов. Сейчас ищут 944 программиста ...

Как запаролить админку

Тема в разделе "Прочие вопросы по PHP", создана пользователем Weyd, 19 фев 2014.

  1. Weyd

    Weyd Активный пользователь

    С нами с:
    4 мар 2012
    Сообщения:
    38
    Симпатии:
    0
    Подскажите пожалуйста!!!
    Использую такой код входа в админку
    Код (Text):
    1. <?php
    2. session_start();
    3. $login_screen = "<center><table border=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" cellpadding=\"0\" cellspacing=\"3\">
    4. <form method=post action=/admin/><input type=hidden name=form value=sent><tr>
    5. <td align=\"right\" valign=\"top\"><b>
    6. <font face=\"$fontface\" size=\"2\">Логин</font>:</b></td>
    7. <td align=\"left\" valign=\"top\">
    8. <input type=\"text\" name=\"login\" size=\"25\" style=\"font-family: $fontface; font-size: 9pt; font-weight: bold\"></td>
    9. </tr><tr><td align=\"right\" valign=\"top\">
    10. <font face=\"$fontface\" size=\"2\"><b>Пароль:</b></font></td>
    11. <td align=\"left\" valign=\"top\">
    12. <input type=\"password\" name=\"passwd\" size=\"25\" style=\"font-size: 9pt; font-family: $fontface; font-weight: bold\"></td>
    13. </tr><tr><td></td><td align=\"left\" valign=\"top\">
    14. <input type=\"submit\" value=\"Вход\" style=\"font-family: $fontface; font-size: 9pt; font-weight: bold; float: right\"></td>
    15. </tr></form></table></center>";
    16. if ($_COOKIE['ref']) {
    17. setcookie("ref", $_COOKIE['ref'], time()-964000);
    18. }
    19. if (!isset($_SESSION['asess_name']) || !isset($_SESSION['asess_passwd'])) {
    20. if ($_POST['form'] == 'sent') {
    21. if ($_POST['login'] == "" || $_POST['passwd'] == "") {
    22. echo "<center>
    23. <table>
    24. <tr bgcolor=\"#CCCCCC\">
    25. <td><b>Вход в админ панель</b></td>
    26. </tr>
    27. <tr bgcolor=\"#CCCCCC\">
    28. <td><b>$login_screen</b></td>
    29. </tr>
    30. </table>
    31. </center>";
    32. echo("<script>alert('Логин и Пароль не могут быть пустыми!');</script>");
    33. session_destroy();
    34. mysql_close;
    35. exit;
    36. } else {
    37. $_SESSION['asess_name'] = ($_POST['login']);
    38. $_SESSION['asess_passwd'] = ($_POST['passwd']);
    39. header("Location: /admin/admin_log/");
    40. }
    41. mysql_close;
    42. exit;
    43. } else {
    44. echo "<center>
    45. <table>
    46. <tr bgcolor=\"#CCCCCC\">
    47. <td><b>Вход в админ панель</b></td>
    48. </tr>
    49. <tr bgcolor=\"#CCCCCC\">
    50. <td><b>$login_screen</b></td>
    51. </tr>
    52. </table>
    53. </center>";
    54. session_destroy();
    55. mysql_close;
    56. exit;
    57. }
    58. } else {
    59. $username = $_SESSION['asess_name'];
    60. $pass = $_SESSION['asess_passwd'];
    61. $q = "SELECT login FROM `admin`";
    62. $resy = mysql_query($q);
    63. while($row = mysql_fetch_array($resy)) {
    64. $db_login = $row["login"];
    65. };
    66. $qt = "SELECT passwd FROM `admin`";
    67. $resyt = mysql_query($qt);
    68. while($row = mysql_fetch_array($resyt)) {
    69. $db_passwd = $row["passwd"];
    70. };
    71. if ($db_login != $username || $db_passwd != $pass || $db_login == "" || $db_passwd == ""){
    72. echo "<center>
    73. <table>
    74. <tr bgcolor=\"#CCCCCC\">
    75. <td><b>Вход в админ панель</b></td>
    76. </tr>
    77. <tr bgcolor=\"#CCCCCC\">
    78. <td><b>$login_screen</b></td>
    79. </tr>
    80. </table>
    81. </center>";
    82. echo("<script>alert('Неверный логин, пожалуйста проверьте логин и пароль');</script>");
    83. session_destroy();
    84. mysql_close;
    85. exit;
    86. }
    87. };
    88. ?>
    подключил файл admin.php в admin/index.php так
    Код (Text):
    1. <? include_once("admin_log/admin.php"); // для подключения необходимо поместить файл в корневую папку admin ?>
    2. <?php
    3. //этой строкой говорим, что пхп код начался. В дальнейшем будем писать проще: "<?", т.к. наш хостинг позволяет делать урощенную запись.
    4. $link = mysql_connect('localhost', '*******', '********') or die("Не могу соединиться");
    5. mysql_select_db('******', $link);
    6. // а в последней строке мы укажем, что пхп код закончился
    7. ?>
    8. Код файла админки - 'admin/index.php':
    9. <?
    10. function show_form(){
    11.         // подключаем файл с настройками подключения к БД
    12.         require '../inc/connect.php';
    13.  
    14.         //делаем запрос к БД, на данный момент на следующие две строчки не стоит обращать внимание, объясню их потом, посокльку на данном этапе они еще не используются.
    15.         $result = mysql_query("SELECT * FROM pages WHERE id = '".$_GET['id']."';", $link);
    16.         $row = mysql_fetch_array($result);
    17. ?>
    18. <!-- далее идет обычный HTML -->
    19. <form action="" method="post">
    20. <table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
    21. <tr bgcolor="#B0ADC3">
    22.   <td>
    23.      <p>Название страницы (title)</p>
    24.   </td>
    25. </tr>
    26. <tr bgcolor="#ffffff">
    27.   <td>
    28.      <input type="text" name="title" value="<?=htmlspecialchars(stripslashes($row['title']));?>" class="enter" size="79">
    29.   </td>
    30. </tr>
    31. <tr bgcolor="#B0ADC3">
    32.   <td>
    33.      <p>Заголовок страницы (Meta - title)</p>
    34.   </td>
    35. </tr>
    36. <tr bgcolor="#ffffff">
    37.   <td>
    38.      <input type="text" name="metatitle" value="<?=htmlspecialchars(stripslashes($row['metatitle']));?>" class="enter" size="79">
    39.   </td>
    40. </tr>
    41. <tr bgcolor="#B0ADC3">
    42.   <td>
    43.      <p>Ключевые слова (Meta - keywords)</p>
    44.   </td>
    45. </tr>
    46. <tr bgcolor="#ffffff">
    47.   <td>
    48.      <input type="text" name="metakeywords" class="enter" size="79" value="<?=htmlspecialchars(stripslashes($row['metakeywords']));?>">
    49.   </td>
    50. </tr>
    51. <tr bgcolor="#B0ADC3">
    52.   <td>
    53.      <p>Описание (Meta - description)</p>
    54.   </td>
    55. </tr>
    56. <tr bgcolor="#ffffff">
    57.   <td>
    58.      <input type="text" name="metadescription" class="enter" size="79" value="<?=htmlspecialchars(stripslashes($row['metadescription']));?>">
    59.   </td>
    60. </tr>
    61. <tr bgcolor="#B0ADC3">
    62.   <td><p>Текст страницы</p></td>
    63. </tr>
    64. <tr bgcolor="#ffffff">
    65.   <td>
    66.       <textarea name="body" rows="20" cols="59" class="enter">
    67.                 <?// "<?=" тоже самое, что и "<? echo", т.е. вывод на экран, что выводим объясню позже ;-) ?>
    68.                 <?=stripslashes($row['body']);?>
    69.       </textarea>
    70.   </td>
    71. </tr>
    72. <tr>
    73.   <td bgcolor="#1F2760" align="right">
    74.       <input type="hidden" name="id" value="<?=$_GET['id'];?>">
    75.       <input type="submit" value="отправить" name="edit">
    76.   </td>
    77. </tr>
    78. </table>
    79. </form>
    80. <?
    81. } // функция show_form() закончилась
    82. function complete(){
    83.       // подключаем файл с настройками подключения - это мы уже знаем.
    84.       require '../inc/connect.php';
    85.  
    86.       // делаем запрос к БД в котором пытаемся вытащить страничку с указаным id. На данный момент мы не сделали еще ни одной страницы, посему запрос вернет пустой ряд.
    87.       $result = mysql_query("SELECT * FROM pages WHERE id = '".$_POST['id']."';", $link);
    88.  
    89.       // перекидываем данные из MySQL в пхпшный ассоциативный массив
    90.       $row = mysql_fetch_array($result);
    91.  
    92.       // проверяем не пуст ли элемент массива id. Если пуст, значит вставляем наши данные в БД
    93.       if(empty($row['id']))
    94.             $query = "INSERT INTO pages
    95.                      (body,
    96.                       title,
    97.                       metatitle,
    98.                       metakeywords,
    99.                       metadescription)
    100.                                       VALUES
    101.                             ('".mysql_real_escape_string($_POST['body'])."',
    102.                              '".mysql_real_escape_string($_POST['title'])."',
    103.                              '".mysql_real_escape_string($_POST['metatitle'])."',
    104.                              '".mysql_real_escape_string($_POST['metakeywords'])."',
    105.                              '".mysql_real_escape_string($_POST['metadescription'])."')";
    106.       // а вот если не пуст, значит с этим id уже есть запись и в данном случае мы ее просто отредактируем
    107.       else
    108.             $query = "UPDATE pages SET
    109.                                      body = '".mysql_real_escape_string($_POST['body'])."',
    110.                                      title = '".mysql_real_escape_string($_POST['title'])."',
    111.                                      metatitle = '".mysql_real_escape_string($_POST['metatitle'])."',
    112.                                      metakeywords = '".mysql_real_escape_string($_POST['metakeywords'])."',
    113.                                      metadescription = '".mysql_real_escape_string($_POST['metadescription'])."'
    114.                      WHERE id = '".$_POST['id']."';";
    115.  
    116.       // непосредственно записываем наши данные в базу (до этого мы просто описывали, что надо сделать, а теперь делаем)
    117.       mysql_query($query, $link);
    118.  
    119.       // ну и просто выводим крикливую надпись, что скрипт отработал
    120.       echo '<h3>Данные обновлены</h3>';
    121. }
    122. function show_pages() {
    123. // добавляем javascript, который позволит перед удалением спросить пользователя, уверен ли он в этом.
    124. ?>
    125. <script language='JavaScript1.1' type='text/javascript'>
    126. <!--
    127. function Delete(N)
    128. {
    129.      if(confirm("Удалить запись?"))
    130.      {
    131.                  parent.location='?del='+N;
    132.      }
    133.      else
    134.      {
    135.        return false;
    136.      }
    137. }
    138. -->
    139. </SCRIPT>
    140. <?
    141.         require '../inc/connect.php';
    142.         echo '
    143. <table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
    144. <tr bgcolor="#B0ADC3">
    145.   <td>
    146.      <a href="?id=new">Добавить страницу</a>
    147.   </td>
    148. </tr>
    149. </table>';
    150.         echo '
    151. <table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
    152. <tr bgcolor="#B0ADC3">
    153.   <td colspan="2">
    154.      <b>Название страницы</b>
    155.   </td>
    156. </tr>';
    157.         $result = mysql_query("SELECT * FROM pages ORDER BY id;", $link);
    158.         while($row = mysql_fetch_array($result)){
    159.                echo '
    160. <tr bgcolor="#ffffff">
    161.   <td>
    162.      <a href="?id='.$row['id'].'">'.stripslashes($row['title']).'</a>
    163.   </td>
    164.   <td>
    165.      <a href="#" OnClick="Delete('.$row['id'].')">удалить</a>
    166.   </td>
    167. </tr>';
    168.          // добавили ячейку с ссылкой на удаление и не забыли вставить colspan="2" у заглавной ячейки
    169.          // думаю вы заметили, что в тексте ссылки мы заменили $row{'id'] на $row['title'] и добавили обработку функцией stripslashes()
    170.         }
    171.         echo '
    172. </table>';
    173.  
    174. }
    175. function delete_pages(){
    176.         require '../inc/connect.php';
    177.         $query = "DELETE FROM pages WHERE id = '".$_GET['del']."';";
    178.         mysql_query($query, $link);
    179.         echo '<h3>Данные удалены</h3>';
    180. }
    181. if($_GET['del']) delete_pages();
    182. if($_POST['edit']) complete(); // если была нажата кнопочка "отправить", которая именуется edit - тогда вызываем функию complete()
    183. if($_GET['id']) show_form(); // если мы нажали на ссылку в функции show_pages(), то значит мы передали в переменную $_GET['id'] тот самый id, который нас интересует. Поэтому в этом слчае вызываем форму редактирования нашей странички.
    184. else show_pages(); // если мы не выбрали определенный id - запускаем нашу функцию выбора id.
    185. ?>  
    создал запрос в msql
    Код (Text):
    1. CREATE TABLE IF NOT EXISTS `admin` (
    2. `login` varchar(30) NOT NULL,
    3. `passwd` varchar(30) NOT NULL
    4. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    доступ к файлу admin_log/admin.php через форму есть, а вот войти никуда не могу, что не так подскажите плз...
     
  2. pixaye

    pixaye Активный пользователь

    С нами с:
    30 окт 2013
    Сообщения:
    67
    Симпатии:
    0
    Код (PHP):
    1. <?php
    2.  
    3. $sql = array(
    4.     'host'=>'localhost',
    5.     'user'=>'имя_пользователя_бд',
    6.     'password'=>'пароль_пользователя_бд',
    7.     'db'=>'требуемая_база_данных'
    8. );
    9.  
    10. mysql_connect($sql['host'],$sql['user'],$sql['password']);
    11. mysql_select_db($sql['db']);
    12.  
    13. $login = $_POST['login'];
    14. $password = $_POST['password'];
    15.  
    16. $r_login = mysql_query('SELECT login FROM admin');
    17. $r_password = mysql_query('SELECT passwd FROM admin');
    18.  
    19. if ($login == $r_login && $password == $r_password) {
    20.     $_SESSION['isAuth'] = true;
    21.         header('Location: ссылка на главную страницу админки');
    22. } else {
    23.     exit('Неправильный логин или пароль!');
    24. }
    25.  
    26. /* Конец файла check.php */
    Используйте такой код, не знаю точно будет он работать или нет, но основа должна быть такая. Это код проверки логина и пароля.
    Советую вам не смешивать логику и представление друг с другом, дабы избежать подобных ошибок в будущем!

    HTML код формы думаю сами напишите!

    На главной странице админки проверяйте наличие сессии isAuth

    Код (Text):
    1.  
    2. if($_SESSION['isAuth'] !== true) {
    3.     //выгоняем его из админки на страницу авторизации
    4.     header('Location: ссылка на страницу авторизации');
    5. }
    Возникнут какие то вопросы, спрашивайте!
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Не используйте такой код =(
    Плохой совет, очень, что есть ваш пароль, что нет его вовсе, кому это будет важно, если такое написать?
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    А как быть?
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Для начала надо абстрагироваться от паролей с админками и узнать некоторые особенности операторов сравнения в пыхе )
    Код (PHP):
    1. $login = 0;
    2. $password = 0;
    3. $r_login = 'login';
    4. $r_password = 'password';
    5. if ($login == $r_login && $password == $r_password)
    6.   echo 'Пароль совпал';
    7. else
    8.  echo 'Пароль не совпал'; 
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А тебе нравится этот код?

    1.
    Код (PHP):
    1. $login = $_POST['login'];
    2. $password = $_POST['password']; 
    Зачем плодить лишние переменные?
    2.
    Код (PHP):
    1. $r_login = mysql_query('SELECT login FROM admin');
    2. $r_password = mysql_query('SELECT passwd FROM admin'); 
    Даже если бы было бы правильно неужели нельзя объединить в 1 запрос?
    3.
    Код (PHP):
    1. if ($login == $r_login && $password == $r_password) { 
    Пароль должен быть захеширован. По коду получается храниться в открытом виде.
    4. Пароль с логином надо подставлять в sql запрос что бы найти нужного пользователя.

    P.S.
    Код не рабочий и очень плохой.
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    нет.
    вы предлагаете хранить пароль подключения к бд в БД,?

    Добавлено спустя 54 секунды:
    я вот про это если не в скрипте хранить где хранить данные подключения к БД?

    Добавлено спустя 27 секунд:
    на все 100% согласен

    Добавлено спустя 1 минуту 14 секунд:
    такая тема уже поднималась, безопасно ли хранить так данные подкключения к БД. вот это меня интересует
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Эмм... че то сегодня народ меня не понимает(((
    Я написал следующее
    Код (PHP):
    1. if ($login == $r_login && $password == $r_password) {
    Это означает что речь шла о пароле который ввел пользователь.

    В моем ответе нет упоминания о $sql['password'].

    Добавлено спустя 1 минуту 50 секунд:
    Лучшего пока не придумали.
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    а что если скрипт с параметрами подключения к бд кидать выше от корневой директории и указывать к ней такого типа относительный путь
    Код (PHP):
    1. ../script.php
    ?
    будет ли лучшим вариантом?
     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Не не будет.
    По этому поводу даже напрягаться не надо. Все ОК.
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    благодарю.