No database selected. Проблема с подключением

nameivan

Новичок
Всем привет!
Итак, есть файл connect.php, который предполагается подключать в скриптах

Код:
<?php
$host = 'localhost'; // адрес сервера
$database = 'base'; // имя базы данных
$user = 'root'; // имя пользователя
$password = ''; // пароль
?>
И есть файл index.php и в нем же форма авторизации

Код:
<?php
session_start();
?>
<head>
<title></title>
</head>
<body>
<div align="center">
<?php
require_once 'connect.php';
$link = mysql_connect($host, $user, $password, $database)
    or die("Ошибка " . mysql_error($link));
    if(isset($_POST['login']) && isset($_POST['pass'])){
     $sql = mysql_query("SELECT count(*) FROM `users` WHERE `login` = '".$_POST['login']."' AND `password` = '".MD5($_POST['pass'])."';")
            or die(mysql_error());
        $row = mysql_fetch_assoc($sql);
        if($row['count(*)']>0){
            $_SESSION['login'] = $_POST['login'];

            echo '<meta http-equiv="refresh" content="0;URL=main.php">';
exit();
        }else{
            echo '<strong>Введен не верный логин/пароль!</strong>';
        }
    }
?>
<form action="" method="post">

<table>
  <tr>
    <td  colspan="3" align="center">Логин</br><input type="text" size="20" name="login"/></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center">Пароль</br><input type="password" size="21"  name="pass"/></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr>
  <td><div align="right"><input type="submit" name="Submit" value="      Вход      "></div></td>
  <td>&nbsp;&nbsp;</td>
  <td><div align="left"><input type="reset" name="Submit2" value="    Отмена    "></div></td>
</tr>
</table>
</form>
</div>
    </div>
</div>
</body>
</html>

Сама страница загружается, но при вводе логина и пароля получаю сообщение No database selected.
Помогите разобраться где я ошибся. Параметры подключения прописаны верно.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ошибся в месте, где делаешь первый запрос, а базу не выбрал.
 

nameivan

Новичок
Можете ткнуть меня носом? Весь день ищу ошибку, уже глаз замылился
 

Фанат

oncle terrible
Команда форума
Найди любое руководство по работе с mysql из РНР. Там написано.

Другое дело, что функций mysql_connect в РНР уже три года ка нету, но ты продолжай ими пользоваться.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Можете ткнуть меня носом? Весь день ищу ошибку, уже глаз замылился
Где у тебя первый запрос? Вот перед ним ты должен был выбрать БД, из таблиц которой ты делаешь выборки. Как выбрать БД - написано в мануале
 

nameivan

Новичок
Найди любое руководство по работе с mysql из РНР. Там написано.

Другое дело, что функций mysql_connect в РНР уже три года ка нету, но ты продолжай ими пользоваться.
Можно было и без сарказма. Я не являюсь профессиональным программистом. То, что сейчас пытаюсь сделать делаю больше для себя. Это во-первых. А во-вторых, раз уж довели до моего сведения тот факт, что mysql_connect в РНР уже три года ка нету, то могли бы и сообщить чем же заменили.
Вопрос то был сформулирован нормально, вежливо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@nameivan, дружище, ты не обижайся, просто ну что мы могли ожидать от человека, который на форуме с 2008 года, то есть 10+ лет? Ну минимум думали, что ты в теме более-менее.

Заменили mysql на mysqli, можешь так же посмотреть на PDO, в мане есть все.
 

nameivan

Новичок
@nameivan, дружище, ты не обижайся, просто ну что мы могли ожидать от человека, который на форуме с 2008 года, то есть 10+ лет? Ну минимум думали, что ты в теме более-менее.

Заменили mysql на mysqli, можешь так же посмотреть на PDO, в мане есть все.
Зарегистрирован давно, но давно не кодил. Не было надобности, а тут вот решил вспомнить немного. и сразу затык на подключении к базе. Т.е. сначала сделал проще, но неудобно в каждом скрипте прописывать линки. Захотел сделать файлом.
 

Фанат

oncle terrible
Команда форума
дело тут совсем не в файле.
верни все как было, с прописыванием в каждом файле, и попробуй потом еще раз с файлом
пойми, форум - не для поиска опечаток.
 

nameivan

Новичок
Немного переделал, но ошибка.
Warning: mysqli_set_charset() expects parameter 1 to be mysqli, null given in Z:\.............\connect.php on line 9

При попытке залогиниться:
Warning: mysqli_set_charset() expects parameter 1 to be mysqli, null given in Z:\..............\connect.php on line 9
Warning: mysqli_query() expects at least 2 parameters, 1 given in Z:.......................\index.php on line 12
Warning: mysqli_error() expects exactly 1 parameter, 0 given in Z:\..............\index.php on line 13

Не понимаю. Помогите, пожалуйста!

Код:
<?php
  $servername = "localhost";
  $username = "root";
  $password = "";
  $dbname= "base";

  // Create connection
  $connect = mysqli_connect($servername, $username, $password, $dbname);
  mysqli_set_charset ( $conn , "utf8");

  // Check connection
  if (!$connect) {
   die("Ошибка подключения к БД: " . mysqli_connect_error());
 }
?>
Код:
<?php
session_start();
?>
<head>
<title></title>
</head>
<body>
<div align="center">
<?php
require_once 'connect.php';
if(isset($_POST['login']) && isset($_POST['pass'])){
$result=mysqli_query("SELECT count(*) FROM `users` WHERE `login` = '".$_POST['login']."' AND `password` = '".MD5($_POST['pass'])."';")
or die(mysqli_error());
$row = mysqli_fetch_assoc($result);
if($row['count(*)']>0)
  {
   $_SESSION['login'] = $_POST['login'];
   echo '<meta http-equiv="refresh" content="0;URL=main.php">';
   exit();
  } else {echo '<strong>Введен не верный логин/пароль!</strong>';}
        // освобождение используемой памяти
        mysqli_free_result($result);
        // Закрываем соединение
        mysqli_close($connect);   
}
?>
<form action="" method="post">
<table>
  <tr>
    <td  colspan="3" align="center">Логин</br><input type="text" size="20" name="login"/></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center">Пароль</br><input type="password" size="21"  name="pass"/></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr>
  <td><div align="right"><input type="submit" name="Submit" value="      Вход      "></div></td>
  <td>&nbsp;&nbsp;</td>
  <td><div align="left"><input type="reset" name="Submit2" value="    Отмена    "></div></td>
</tr>
</table>
</form>
</div>
</div>
</div>
</body>
</html>
 

nameivan

Новичок
ок.
Устанавливает базу данных, которая будет использоваться при выполнении запросов к базе данных
Замечание:
Эта функция используется только для смены базы данных во время подключения. Вы можете выбрать базу данных, передав ее четвертым параметром в функции mysqli_connect().

Для примера там указано $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

И в моем файле прописано $connect = mysqli_connect($servername, $username, $password, $dbname);

Ну и где ошибка?
 

nameivan

Новичок
Бл.... До чего же глупая ошибка
$result=mysqli_query($link, "SELECT count(*) FROM `users` WHERE `login` = '".$_POST['login']."' AND `password` = '".MD5($_POST['pass'])."';")


Спасибо всем, кто старался помочь!
 

Фанат

oncle terrible
Команда форума
Это не глупая.
А вот `login` = '".$_POST['login'] - это действительно глупая.
Такого рода "авторизация" позволяет заходить кому угодно.
Чем делать так, лучше вообще авторизацию не ставить.

Запросы так не пишутся никогда
Как писать запросы читаем здесь: http://php.net/manual/ru/security.database.sql-injection.php
После этого здесь http://php.net/manual/ru/function.password-hash.php, выкинуть md5 и использовать password_hash

в итоге получаем такой код
PHP:
$stmt = $link->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $_POST['email']);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();

if ($user && password_verify($_POST['pass'], $user['pass']))
{
    echo "valid!";
} else {
    echo "invalid";
}
 

fixxxer

К.О.
Партнер клуба
Вот не люблю эту картинку, ну какой sanitize? Насмотрелся я тут этих sanitize в индусском коде, include "sanitize.php", со стандартной бредятиной а-ля magic quotes на все.
(Да, я зануда).
 

AnrDaemon

Продвинутый новичок
Вот не люблю эту картинку, ну какой sanitize? Насмотрелся я тут этих sanitize в индусском коде, include "sanitize.php", со стандартной бредятиной а-ля magic quotes на все.
(Да, я зануда).
Я тоже устал писать в комментариях, что слово "sanitize" стоит заменить на "mangling", чтобы лучше был понятен результат действия.
 
Сверху