PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (3): « 1 2 [3]

> Найдено сообщений: 41
Yan9 Отправлено: 08 Сентября, 2015 - 13:09:51 • Тема: Алгоритм работы с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1496
Panoptik пишет:
если вы внимательно прочитали все ответы то среди них есть например такие
http://stackoverflow[dot]com/a/21805580/2110663 где указано что в папке в которой 10к файлов поиск происходит более чем в 10 раз медленнее чем в папке в которой 1к и соответственно если меньше то еще быстрее
ну и надеюсь вы прочти то что при количестве овер 32к некоторые программы перестают работать (как то ls)

а теоретически вы можете конечно писать туда сколько угодно, я же даю всего лишь рекоммендацию как лучше

ну и если ближе к делу то достаете md5 hash из файла или названия файла к примеру файл называется test.jpg делаем из него мд5 хеш 0412c29576c708cf0155e8de242169b1
берем первые 2 буквы хеша и создаем с таким названием папку. то есть
04. соответстенно в базу запишите относительный путь вместе с названием файла 04/test.jpg
при таком алгоритме у вас получится размещать файлы примерно одинаково распределенными по 16^2 = 256 папкам это как раз <1000
если файлов намного больше и в каждой папке у вас будет получаться (или теоретически вы предполагаете) >1000 файлов, создаете еще один подуровень по тому же принципу, то есть берем следующие 2 буквы хеша 12.
соответственно создаете папку внутри 04 и уже внутри папки копируете свой файл 04/12/test.jpg - этот же путь будет записан в базу
файлы в идеале тоже лучше переименовывать в latin-digital формат чтобы в файловую систему не попадали всякие юникод символы, но это уже другая тема
а по сути у вас получится 256*256 = 65к файлов относительно равномерно распределенных по файловой системе и доступ к ним будет происходить с приемлемой скоростью.
можно увеличивать иерархию еще на уровень, больше наверное смысла не будет так как такое количество файлов наверняка не влезет на ваш диск, но теоретически можно


Да, я комментарии не читал, все верно.
Спасибо за информацию, буду знать!
Yan9 Отправлено: 07 Сентября, 2015 - 22:27:18 • Тема: Алгоритм работы с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1496
Panoptik пишет:
сканирования файлов замедляется как при работе с файловым менеджером так и для программ.
и если вдруг вам понадобиться руками лазать в такую папку, вы будете не в восторге
(Добавление)
http://stackoverflow[dot]com/questio[dot][dot][dot]t-in-a-directory


Спасибо за информацию, даже не знал о разных файловых системах. Но в той ссылке, которую вы сбросили указано, что в одну папку можно помещать миллионы файлов. Или я что-то не понял?
Yan9 Отправлено: 07 Сентября, 2015 - 12:23:47 • Тема: Алгоритм работы с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1496
DlTA пишет:
Yan9 пишет:
Подскажите как эту модерацию реализовать?

какой то очень странный вопрос

дополнительное поле в таблице, 1/0 модерирован/немодерирован
(Добавление)
Yan9 пишет:
Тоже склонялся хранить путь к картинкам

а разве фотки будут храниться в разных папках??
обычно достаточно имени файла


Я так и подумал, чтобы добавить еще одно поле в таблицу, просто новичок и думал, что может есть какой-то другой способ, все меняется быстро и я многого могу не знать.

Картинки в одной папке, да, я знаю, там просто.

Спасибо!
Yan9 Отправлено: 07 Сентября, 2015 - 01:29:41 • Тема: Алгоритм работы с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1496
DlTA пишет:
странно что нет варианта когда юзверь вносит данные которые после модерации допускаюстя к выводу

картинки в базе лучше не хранить, они там много места занимают, и базу допонительно кладут


Тоже склонялся хранить путь к картинкам. Подскажите как эту модерацию реализовать? Я вот думал именно таким путем. Оказывается делается это не так?
Yan9 Отправлено: 07 Сентября, 2015 - 00:56:37 • Тема: Алгоритм работы с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1496
Здравствуйте! Хочу реализовать возможность добавления пользователями данных (картинки и текст), как это сделано в Википедии.

Вопрос в том, как это лучше сделать? У меня 2 варианта:
1. Сделать две БД, в первой сделать таблицу, в которую будет попадать информация от пользователей. Затем я эту информацию проверяю и переношу во вторую БД в нужную таблицу, из которой потом выводится информация на сайт.
2. Одна БД, но данные от пользователей вносятся в одну таблицу, я эти данные проверяю и переношу их в другую таблицу, из которой потом выводится информация на сайт.

И еще вспомогательный вопрос:
Картинки от пользователей лучше хранить в самой таблице либо в папке, а в таблице хранить путь к этим картинкам?

Спасибо!
Yan9 Отправлено: 07 Августа, 2015 - 13:18:12 • Тема: Не могу отправить данные в БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1517
DelphinPRO пишет:
Yan9 пишет:
похоже знания, которые мне даются, отсталые

ага, лет на 10, если не больше.
В принципе базовые принципы работы с БД вы конечно уясните. Главное не зациклится на том, на чем вам дают эти базовые знания, и продолжить изучать современные методики.


Да, уже почитал про sql инъекции, про PDО, хорошая штука, не понимаю почему нам это не преподавать. Нам действительно там дают лишь самую базу. Спасибо за помощь!
Yan9 Отправлено: 07 Августа, 2015 - 00:12:49 • Тема: Не могу отправить данные в БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1517
DelphinPRO пишет:
Yan9 пишет:
Я хожу на курсы по php и этот обработчик был частью д/з.

Охренеть... Что за курсы такие... Попробуйте у преподавателя курсов поинтересоваться, слышал ли он что-нибудь о PDO


Уже за сегодня не только от вас слышу о PDO, похоже знания, которые мне даются, отсталые, жаль(
Обязательно об этом спрошу
Курсы в компьютерной академии ШАГ
Yan9 Отправлено: 06 Августа, 2015 - 22:28:57 • Тема: Не могу отправить данные в БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1517
DelphinPRO пишет:
Использование функций mysql_* ваша ошибка. Они сильно устарели и уже удалены из последней версии PHP

Именно ваша ошибка была не в php, а в sql синтаксисе. Я намерено об этом умолчал.
При использовании PDO, а именно параметризированных запросов (как в моем примере), подобной ошибки бы не возникло, и кроме того, защитило бы ваш код от sql-инъекций.


Можете, пожалуйста, подсказать хорошие ресурсы, где об этом можно подробно почитать? Я хожу на курсы по php и этот обработчик был частью д/з. То, о чем вы написали, нам преподаватель не говорил ни слова.
Yan9 Отправлено: 06 Августа, 2015 - 21:53:19 • Тема: Не могу отправить данные в БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1517
DelphinPRO пишет:
Это данные для подключения к БД (форма тут не при чем)
PHP:
скопировать код в буфер обмена
  1. $dsn = 'mysql:dbname=ИМЯ_БД;host=127.0.0.1';
  2. $user = 'ПОЛЬЗОВАТЕЛЬ_БД';
  3. $password = 'ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ БД';


Данные из формы передавать сюда

PHP:
скопировать код в буфер обмена
  1. $stmt->execute(array('login' => $_REQUEST['uname']));


PS
Оформляйте, пожалуйста, свой код, чтобы его можно было читать нормально.

PPS
пароль не нужно сравнивать при регистрации. Нужно только проверить не занят ли логин
(Добавление)
Yan9 пишет:
Я вообще ничего не понял в этом коде

Значит нужно ознакомиться немного с теорией
http://php.net/manual/ru/book.pdo.php

Спасибо вам, что откликнулись! У меня была функция для подключения к БД, она хранится в другом файле, но у меня как-то все по-другому пишется.
Я знаю, что пароль не нужно проверять, а именно логин, не знаю почему решил проверить пароль, просто думал, что разницы никакой, поменять местами потом и все. Но оказалось, что я при проверке пароля видимо создал ошибку, но которую, наверное, php не видел и проверял так. А решение элементарное оказалось, просто надо было переменную, в которой новый логин, обрамить одинарными кавычками и все (я не полностью знал синтаксис запроса):
CODE (htmlphp):
скопировать код в буфер обмена
  1. $res=mysql_query("select * from users where log='$log'");
Yan9 Отправлено: 06 Августа, 2015 - 19:50:07 • Тема: Не могу отправить данные в БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1517
DelphinPRO пишет:
PHP:
скопировать код в буфер обмена
  1. $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
  2. $user = 'dbuser';
  3. $password = 'dbpass';
  4.  
  5. $pdo = new \PDO($dsn, $user, $password);
  6.  
  7. $stmt = $pdo->prepare("SELECT * FROM `users` WHERE `name` = :login");
  8. $stmt->execute(array('login' => $login));
  9.        
  10. $res = $stmt->fetch();
  11.  
  12. if ($res) {
  13.         echo 'Пользователь с таким логином уже зарегистрирован';
  14. }


Я вообще ничего не понял в этом коде, но исправил на свои данные таким образом:
$dsn = 'mysql:yan=testdb;host=127.0.0.1'; // yan-имя БД
$log=htmlspecialchars(trim($_REQUEST['uname'])); // uname-имя формы логина
$password=htmlspecialchars(trim($_REQUEST['upass'])); // upass-имя формы пароля
$pdo = new \PDO($dsn, $log, $password);
$stmt = $pdo->prepare("SELECT * FROM `users` WHERE `name` = :login");
$stmt->execute(array('login' => $login));
$res = $stmt->fetch();
if ($res) {
echo 'Пользователь с таким логином уже зарегистрирован';
}

Показало три строчки какой-то ошибки, что проблема в строке $pdo = new \PDO($dsn, $log, $password);
Или я вообще что-то не то сделал?
Yan9 Отправлено: 06 Августа, 2015 - 19:15:43 • Тема: Не могу отправить данные в БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 1517
Добрый день! Пишу обработчик для формы, в которую пользователь вносит логин, пароль. Создаю запрос в БД для проверки существующего пароля, если такого нет, то вносим новые данные, все работает, запрос выглядит так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $res=mysql_query("SELECT * FROM users WHERE pass=".$password); // users-таблица, pass-поле

Далее писал условие и если пароль совпадал, то данные не вносились, все работает ОК.
Но нужно еще проверить существует ли в базе такой логин (в БД поле name) и пароль, написал такую строку:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $res=mysql_query("SELECT * FROM users WHERE name=".$log." AND pass=".$password);

Но все это начало работать некорректно, потом я решил сделать только проверку логина и написал:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $res=mysql_query("SELECT * FROM users WHERE name=".$log);

Все дальнейшие условия начали игнорироваться, данные с одинаковым логином вносились, появилась ошибка
CODE (htmlphp):
скопировать код в буфер обмена
  1. mysql_fetch_array() expects parameter 1 to be resource, boolean given

Поискал по форуму, нашел одну функцию, если пишу:

то на экране:

Если пишу:
CODE (htmlphp):
скопировать код в буфер обмена
  1. mysql_query("select * from users WHERE name=".$log) || die(mysql_error());

то на экране:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Unknown column 'Логин' in 'where clause'


Почему так происходит, я ведь только заменил одно поле на другое и пароль на логин, должно же работать одинаково, правильно? Спасибо!

Вопрос закрыт! Решение: надо было переменную, в которой лежит новый логин, обрамить кавычками (таков синтаксис)
CODE (htmlphp):
скопировать код в буфер обмена
  1. $res=mysql_query("SELECT * FROM users WHERE name='.$log'");

Страниц (3): « 1 2 [3]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB