Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2012, 14:09   #1
EndoCrinolog
Пользователь
 
Регистрация: 23.08.2012
Сообщений: 26
По умолчанию Как правильно использовать MySQL

Мне нужно проверять, существует ли данный пользователь и при регистрации и при авторизации.

Раньше я создавал цикл for для просмотра всей таблицы и сравнивал, существует данный ли пользователь. Но я понял, что если пользователей 100,500, то это будет не практично.

Каким верным запросом mysql можно проверить, существует ли пользователь или нет?
Тут можно скачать музыку радио Рекорд:
http://www.musicofradiorecord.pusku.com/
EndoCrinolog вне форума Ответить с цитированием
Старый 23.08.2012, 17:05   #2
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Читаем: Мартин Грайбер "Понимание SQL".
Виталий Желтяков вне форума Ответить с цитированием
Старый 23.08.2012, 18:29   #3
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

Цитата:
Мне нужно проверять, существует ли данный пользователь и при регистрации и при авторизации.
например при использовании класса MYSUBD SQLi

проверка на вход осуществляется следующим образом

PHP код:
<?php

/*
$login  $password получены например из POST запроса. Экранирование не требуется.
Класс $db автоматически выставляет кавычки и экранирует переменные от SQL инъекций
см Документацию на функцию $db->preRead
*/

if ($user $db->preRead('SELECT * FROM user_table WHERE login = ? AND passHex = ?',array($login,md5($password)))) {
    
// вход выполнен можно записывать $user переменную например в сессию
    // вывод содержимого $user
    
print_r($user);
} else {
    
// неверные логин или пароль
}
Lesha вне форума Ответить с цитированием
Старый 24.08.2012, 15:22   #4
EndoCrinolog
Пользователь
 
Регистрация: 23.08.2012
Сообщений: 26
По умолчанию

Что-то не получается...

PHP код:
$DBS = @mysql_connect($sql_server,$sql_user,$sql_password);
if (
$DBS){
$r mysql_error();
echo 
"Соединил с БД<hr>$r<br>";

$TBS mysql_select_db($sql_db,$DBS);

/*
$login  $password получены например из POST запроса. Экранирование не требуется.
Класс $db автоматически выставляет кавычки и экранирует переменные от SQL инъекций
см Документацию на функцию $db->preRead
*/

if ($user $TBS->preRead('SELECT * FROM users WHERE log = ? AND par = ?',array($log,$par))) {
    
// вход выполнен можно записывать $user переменную например в сессию
    // вывод содержимого $user
    
print_r($user);
} else {
    
// неверные логин или пароль
}

mysql_close($DBS); 
Выдает ошибку:
Цитата:
Fatal error: Call to a member function preRead() on a non-object in /home/u370290487/public_html/PHP_auth.php on line 28
Что я сделал не так?
Тут можно скачать музыку радио Рекорд:
http://www.musicofradiorecord.pusku.com/
EndoCrinolog вне форума Ответить с цитированием
Старый 24.08.2012, 15:39   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

То, что в примере класс MYSUBD, а вы используете функции php
Код:
$TBS->preRead('SELECT * FROM users WHERE log = ? AND par = ?',array($log,$par)))
заменить на
Код:
mysql_query(sprintf('SELECT * FROM users WHERE log = "%s" AND par = "%s"',$log,$par))
psycho-coder вне форума Ответить с цитированием
Старый 24.08.2012, 16:10   #6
EndoCrinolog
Пользователь
 
Регистрация: 23.08.2012
Сообщений: 26
По умолчанию

всё, спасибо, сам разобрался.
Мудово, немного, но зато работает:
PHP код:
$DBS = @mysql_connect($sql_server,$sql_user,$sql_password);

if (
$DBS){
$r mysql_error();
$TBS mysql_select_db($sql_db,$DBS);
$txt mysql_query("SELECT * FROM users WHERE log='$log' AND par='$par'",$DBS);
$row mysql_fetch_array($txt);
$R count($row);

if (
$R == 30){
echo 
"
<meta http-equiv=\"refresh\" content=\"0; url=setcookie.php?log=
$log&par=$par\">
"
;
// авторизация прошла успешно
} else {
echo 
"
<meta http-equiv=\"refresh\" content=\"0; url=auth.php?error=nouser\">
"
;
// логин или пароль неверны
}

} else {
$r mysql_error();
echo 
"Не удалось соединиться с БД<hr>$r<br>";

Тут можно скачать музыку радио Рекорд:
http://www.musicofradiorecord.pusku.com/
EndoCrinolog вне форума Ответить с цитированием
Старый 24.08.2012, 21:08   #7
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

PHP код:
<?php
/* ДАМП БАЗЫ

-- --------------------------------------------------------
-- Host:                         127.0.0.1
-- Server version:               5.1.40-community - MySQL Community Server (GPL)
-- Server OS:                    Win32
-- HeidiSQL version:             7.0.0.4053
-- Date/time:                    2012-08-24 20:59:40
-- --------------------------------------------------------

-- Dumping database structure for hellobase
CREATE DATABASE IF NOT EXISTS `hellobase`;
USE `hellobase`;

-- Dumping structure for table hellobase.users
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `log` varchar(50) NOT NULL DEFAULT '',
  `par` varchar(50) NOT NULL DEFAULT '',
  `name` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251;

-- Dumping data for table hellobase.users: 2 rows

INSERT INTO `users` (`id`, `log`, `par`, `name`) VALUES
    (1, 'alex', 'password1', 'alexpac'),
    (2, 'user1', 'password2', 'lesha');
    
*/

// http://jqbook.narod.ru/php/dbmysql.htm

include('db_mysqli.php');

db::$config = array (
    
'host' => 'localhost',
    
'user' => 'root',
    
'passw' => '',
    
'dbname' => 'hellobase'// Ваши имя базы данных
    
'charset' => 'cp1251' // cp1251  UTF8
    
);
    
$log  'alex';
$par 'password1';

/*
$log  $par получены например из POST запроса. Экранирование не требуется.
Класс $db автоматически выставляет кавычки и экранирует переменные от SQL инъекций
см Документацию на функцию $db->preRead
*/

$db db::getInstance();

if (
$user $db->preRead('SELECT * FROM users WHERE log = ? AND par = ?',array($log,$par))) {
    
// вход выполнен можно записывать $user переменную например в сессию
    // вывод содержимого $user
    
print_r($user);
} else {
    
// неверные логин или пароль
}
Это пример. Нужно вынести инициализацию в файл
config.php
или
autoload.php

PHP код:
include('db_mysqli.php');

db::$config = array (
    
'host' => 'localhost',
    
'user' => 'root',
    
'passw' => '',
    
'dbname' => 'hellobase'// Ваши имя базы данных
    
'charset' => 'cp1251' // cp1251  UTF8
    
);

$db db::getInstance();

// еще куча всяких настроек сайта 
и подключать в контроллере (index.php)

PHP код:
<?php

include('config.php');

if (
$user $db->preRead('SELECT * FROM users WHERE log = ? AND par = ?',array($log,$par))) {
    
// вход выполнен можно записывать $user переменную например в сессию
    // вывод содержимого $user
    
print_r($user);
} else {
    
// неверные логин или пароль
}
Lesha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
zlib->inflate как правильно использовать? Пепел Феникса Общие вопросы C/C++ 8 18.01.2011 20:26
Как правильно использовать функцию ExtFloodFill. SkAndrew Общие вопросы Delphi 0 14.04.2010 14:05
Как правильно использовать MonthCalendar Shanuzina Компоненты Delphi 1 04.03.2010 11:58
как правильно использовать OR AND mpdasa Общие вопросы Delphi 2 19.01.2010 17:30
Как правильно использовать ComboBox Pirotexnik Общие вопросы Delphi 6 26.03.2009 23:30