За последние 24 часа нас посетили 15713 программистов и 1631 робот. Сейчас ищут 947 программистов ...

mysql_connect()

Тема в разделе "PHP для новичков", создана пользователем yurant, 19 июл 2012.

  1. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    Доброго всем времени суток.
    Поскольку занимаюсь php довольно таки недавно, возник во такой вопрос:
    Имеется страница "лог/пасс", с неё переходим непосредственно в скрипт авторизации.

    <?php
    $link = @ mysql_connect('localhost', $_POST["login"], $_POST["password"])
    OR die("Ошибка идентификации. Не удалось соединиться с базой данных");
    mysql_select_db('invoice_db', $link)
    or die ("Невозможно выбрать указанную базу"
    .mysql_error( ));
    $login = $_POST["login"];
    $pass = $_POST["password"];
    $query = "SELECT ID, Login, Password_md5 FROM db_users";
    //...
    ?>
    При вызове mysql_connect происходит обращение к БД mysql, и соответственно авториз-и по пользователям существующим там в табл User...
    Как (да и вообще возможно ли) реализовать данное соединение через свою БД (invoice_db в моем случае) ?
    ЗЫ: промелькнула идея писать скрипт подгоняющий mysql-кую таблицу юзеров под свою db_users, но мб существует более изящное решение ?
    Заранее благодарен.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты о чем?
     
  3. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    хм, видимо недостаточно ясно выразился...
    во всех мануалах mysql_connect описывается как:
    ================================================================
    Пример 1. Пример использования mysql_connect()
    <?php
    $link = mysql_connect("localhost", "mysql_login", "mysql_password")
    or die("Could not connect: " . mysql_error());
    print ("Connected successfully");
    mysql_close($link);
    ?>
    ===============================================================
    [​IMG]
    т.е. данная ф-я по умолчанию коннектится к mysql БД (1), и уже оттуда сравниваются логин и пасс юзера... прост у меня пользователи (логин, пасс, прочая инфа о них) вынесены в отдельную таблицу в моей БД 'invoice_db' (2)... и какбе при авторизации я ссылаюсь на неё... и всё бы прекрасно... только самая первоначальная функция установки соединения с базой - это mysql_connect, а она в свою очередь обращается к дефолтной майэскьюэлевской базе...
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    два коннекта сделай

    Добавлено спустя 28 секунд:
    или засунь всё в одну таблицу, если это не твоя инициатива была их на две растащить =)

    Добавлено спустя 15 секунд:
    и вобще используй mysqli и PDO
     
  5. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    ну инициатива выглядела в виде "пиха сверху" и команды "так надо" =) так что какбе всё оно должно быть отдельной базой... (ибо в будущем может конвертиться куда-нибудь еще)... т.е. если засунуть в одну таблицу - эт получается мне муськовскую базу руками править ?! О_о страшновато вобщем т)) я еще многого не знаю)) удалю там чего-ньть не то)

    по поводу 2х коннектов... блин, я нуб... но так и не нашел замены ф-и mysql_connect(), я хз чем напрямую сразу приконнектиться сразу к своей БД чтоб параметры ушли не через mysql (и зареганых в ней пользов-й)... а сразу запросом к моей базе.

    ну а PDO... кхм)) пошел гуглить)
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты базы данных с таблицами не путаешь?
     
  7. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    полагаю ты говоришь о таблице "user" в моей БД, и таблице "user" в mysql БД... (собстно о чем я еще могу подумать ?)
    А тут трабла в том, что вне зависимости от желания/потребности (если я использую mysql_connect() для авторизации) эта таблица может располагаться только в mysql БД... вот и все. иначе - я имею то что я имею О_о
    т.е. авторизация, сессии, и прочее у меня ломятся в "моя_бд.юзвери" ... а по факту юзвери находятся в "mysql.user"... и проблема в том что я не могу найти решения как авторизоваться через свою "БД.юзерс"
    можно вобщемт попробовать запилить скрипт, который будет "обновлять" таблицу юзеров в mysql в зависимости от состояния табл "user" в моей БД, тогда конечно все будет ровно... но я полагал что задача более тривиальна и я просто не знаю какого-нибудь дефолтного механизма...

    прост будет форма а ля личный кабинет (или скорее таблица Пользователей как к примеру в 1:Ске), где юзер может изменить свои данные. причем данная таблица должна находиться в МОЕЙ же базе... а не mysql-вской. и авторизация (а также проверка каждой сессии) будут тоже идти через мою же таблицу... а не mysql.

    фуф... вот. вроде выразил...
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Нипанятна
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    yurant, че за бред говорите...
    Вы прежде чем авторизовываться, по условию проверяете, ложное оно или истинное!
    Причем здесь база, когда у вас уже подключение и выборка, были созданы.

    Вы обращаетесь не к базе, а к таблице, по уже установленному соединению с выбранной базой.
    Таблица user содержит данные о пользователях, после регистрации в нее заносятся логин, пароль и т. д., это относительно тому, что вы в файл их запишите, только тут в колонки таблицы user.

    После того как пользователь вводит данные в форму и отправляет введенные данные в запрос, а запрос посылается в таблицу user с условием которое отправил пользователь с формы.
    Вы проверяете корректность введенных данных...
    И если не верно, запрос вернет false.

    И вообще используйте mysqli_, а не mysql_
     
  10. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    Your, прошу меня извинить, поскольку ранее я не занимался веб-программированием, могу местами нести чушь...
    однако до каких моментов я дошел методом тыка, а именно:
    1) что при установке mysql создается одноименная БД,
    2) именно к этой базе обращается ф-я mysql_connect() при установке соединения...
    меня смутило то, что соединение устанавливается так сказать "напрямую", т.е. нет каких-либо проверок (хотя по идее ничто не мешает их воткнуть в код раньше... но какбе здравый смысл подсказывает, что без соединения с БД от них толку "0".
    Так или иначе начинается всё с того что мы просто передаем логин и пасс в чистом виде в mysql_connect()... это меня и беспокоит
    мне уже тут немного подсказали, что такой вот передачи данных в чистом виде не избежать... в mysql_connect() прописать заведомо верные данные рута и не париться, а идентификацию пользователей уже вести через свою БД.

    Ну да черт с ним всем, еще раз спасибо большое вам за советы, буду дальше курить php и mysql/
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ничерта не понятно опять.

    создал ты объект мускульный или функцией подключаешься, ты говоришь адрес сервера, логин, пароль. Если ты в мускуле есть, тебя пускает с теми правами, которые установлены этому юзеру. Авторизация происходит средствами MySQL, а не лазаньем в таблицу. Мускул сам слазит в таблицу и примет решение.

    Таблица USERS или база данных такая у вас явно создана ручками, т.к. муску хранит в своих юзеров в таблице user в базе данных mysql.

    Через рута в мускул не лазют. Заходят рутом и создают для каждого сайта отдельного юзера. Подключаются им. Тот кто тебе подсказывал, ошибся.

    Если у тебя на сайт есть другие пользователи, и ты хочешь их хранить в бд, то ты создаёшь в мускуле юзера для сайта и через него хранишь в своей таблице своих сайтовых посетителей. Фирштейн?
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Я что - то не понимаю...
    Вы же создаете соединение с базой(ми).
    Пишите хост, пользователя, пароль.
    Далее вы проверяете установлено соединение или нет...
    Если да, то выбираете базу, если нет ошибка.

    А что тут не понятного!?
    Вы установили соединение и передали его для выбора базы.
    И еще проверка, все ли там нормально выбралось или нет, есть база или нет.

    Что - то не понимаю, что значит нет проверок?!
    А для чего проверки на mysql_error, mysql_errno или вам не это нужно? Перехватчик!? Тоже есть.
    В чистом виде это всм?)

    Начните обучение с php.net/manual/ru/.
     
  13. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    <?php
    $link = @ mysql_connect('localhost', $_POST["login"], $_POST["password"])
    OR die("Ошибка идентификации. Не удалось соединиться с базой данных");
    mysql_select_db('invoice_db', $link)
    or die ("Невозможно выбрать указанную базу"
    .mysql_error( ));
    $login = $_POST["login"];
    $pass = $_POST["password"];
    $query = "SELECT ID, Login, Password_md5 FROM табпользователи";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    if($result)
    {
    $auth = mysql_fetch_array($result);
    if($auth['Login'] == $login)
    {
    if($auth['Password_md5'] == md5(md5($pass)))
    {
    $ID = $auth['ID'];
    /*===============================================================================*/
    session_start();
    $_SESSION['ID'] = $ID;
    $_SESSION['login'] = $login;
    $_SESSION['pass'] = $pass;
    /*===============================================================================*/
    include 'main.php';
    }
    else
    {
    echo "<p class=bug>Ошибка идентификации, попробуйте ещё раз.</p>";
    exit();
    }
    }
    else
    {
    echo "<p class=bug>Ошибка идентификации, попробуйте ещё раз.</p>";
    exit();
    }
    }
    /* Освобождаем память от результата */
    mysql_free_result($result);
    /* Закрываем соединение */
    mysql_close($link);
    ?>

    Я лишь хочу подчеркнуть, что в mysql_connect() нет как таковой возможности выбора БД для идентификации... и она создавая соединение обращается к базе созданной " по умолчанию "...
    т.е. mysql_connect('localhost', $_POST["login"], $_POST["password"]) у нас есть хост, логин и пароль... а "в какую бд оно уйдет на проверку" выбора не предусмотрено... оно просто законектит в mysql, и обратится к таблице User либо если false вернет ошибку.
    А по поводу
    бывал я там неоднократно, но спасибо) Просто обычно я решаю проблемы по мере их поступления) т.е. Надо сделать авторизацию ? ... курим форумы с описанием и примерами кода по авторизации... над реализовать иерархию... курим соответствующие мануалы)

    в данном случае полагаю придется в mysql_connect('localhost', $_POST["login"], $_POST["password"]) заменить
    $_POST["login"] и $_POST["password"] на обычное статичное текстовое значение (лог/пасс рута например), но в этом случае меня смущает то что логин и пасс в чистом виде будут храниться в скрипте =/
     
  14. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    Тем не менее ответ ваш попал так сказать "в точку" :) пасиб)
    вот это мне я и пугает... ибо я не знаю куда потом уйдет данный сайт и будет ли возможность его редактирования, и хотелось бы "автоматизировать" процесс создания юзера...
    потому и говорил о см. пост №1
    именно так. есть БД mysql, с таблицей user, и есть моя бд с табл."табпользователи"
    эт мне подсказали первоначальный вариант... дабы просто поднимать коннект к базе, а там уже авторизовать через свою таблицу пользователей.
    так точно =) но всё таки имеет ли шанс на жизнь такой вариант, при котором, обычный пользователь, не программист (а скорее бухгалтер, но при этом являющийся таки админом сайта xD лол) заходить, создавать нового юзера средствами сайта (которые я ему разработаю) ?
    именно отседова я и пришел к мысли, что существует необходимость в подгонке мускуловской бд юзеров под свою бд табпользователей...
    (банально проверяем мускульную бд, если у нас создан новый юзер, то копируем его туда).
    просто исходная задача ограничивалась тем, что вся инфа должна располагаться в одной БД, поскольку может возникнуть необходимость конвертации её в 1:Ску... а стоящая особняком таблица User из Mysql несколько осложнила реализацию... собственно потому и ищу наиболее приемлемое решение.
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Как это бывает обычно - таблица user из б.д. mysql - вообще не трогается. Это таблица для другого нужна, не для авторизации на сайте. Эта таблица - для авторизации твоих скриптов в СУБД mysql. В той таблице обычно всего один единственный юзер на сайт, от имени которого PHP авторизуется в MySQL и выполняет нужные запросы. А пользователи сайта хранятся в отдельной таблице в б.д. сайта. В таблицу user из б.д. mysql их писать не нужно.
     
  16. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    Ну теперь начинает проясняться, благодарю. Перепишу авторизацию.
    Ну а поскольку таблица служит для авторизации скриптов - предположу, что юзера в ней следует наделить правами рута... не так ли ?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не так. давай на одну базу права одному логину. и хватит. Всему сайту хватит одной базы.
     
  18. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    Теперь мне немного нипонятно... =/
    Как написал sobachnik, у меня есть таблица user в бд mysql (и её никуда не деть и от этого никуда не деться - поскольку через неё идет авторизация всех скриптов СУБД) и есть моя БД со всеми таблицами непосредственно предназначенная для сайта. Т.о. мы имеем уже 2 бд...(ну да черт ними)
    Что делать с правами на userа из бд mysql...? Собственно какими правами (если, как вы говорите, igordata, это не права рута) в mysql должен быть наделён вот этот вот пассажир... mysql_connect('localhost', 'login', 'password')
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Он должен иметь доступ только к тому, что ему нужно для работы. Это твоя б.д., в которой данные сайта. База данных `mysql` ему не нужна.
    База `mysql` нужна самой СУБД - там хранится всякая его служебная информация. В том числе логины-пароли, права доступа.
     
  20. yurant

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

    С нами с:
    19 июл 2012
    Сообщения:
    11
    Симпатии:
    0
    всё, большое спасибо, вроде разобрался.