141 Востаннє редагувалося ktretyak (04.04.2015 01:41:09)

Re: Вивчаю базу даних MySql

Sensetivity написав:

...
P.S. Це правда, що серваки повільно віддають файли коли в одній теці їх кілька тисяч?

Це правда. На колишній роботі, мені доводилось налаштовувати заново Log Shipping MS SQL 2008 (грубо кажучи - це усі транзакції, які відбувались на серваку, записуються окремими файлами, тобто їх дуже багато). Мій колега налаштував це так, що лише тиждень працював цей механізм, але потім збоїв. Каже - не знаю що йому й робити - збоїть і все...

Коли я спробував відкрити теку з файлами Log Shipping'а, то відкривалась вона приблизно хвилин 5 - і це без перебільшення. Виявилось що він не налаштував видалення застарілих файлів, бо думав, що раз місце на диску є, то і немає про що турбуватись...

142

Re: Вивчаю базу даних MySql

Хай, я пройшов 4 кроки і файлик зображення завантажується так як прописано, але ... в мене вийшло кодування, яке мені хочеться назвати "деревяний буратіно", можливо хто-небудь підстругав би до більш гарнюнього

Реалізуємо такий алгоритм збереження зображень:
1. Кодуємо назву файлу зображень. md5-хеш від файлу.
2. Беремо перші 2 символи з хешу і створюємо папку де назвою є ці символи.
3. Обрізаємо хеш на 2 символи.
4. Зберігаємо сам файл з іменем, яке зосталось після п3.
5. Заносимо дані в таблицю.

власне сам кривенький буратіно :)


$picture_filename = $_FILES['userfile']['name']; // імя завантаженого файлика зображення
$picture_fileplace = $_FILES['userfile']['tmp_name']; // тимчасові дані файлу зображення

$str = md5($picture_filename); // хеш код для файлика зображення
$folder_name=substr($str,0,2); // імя папки з двух перших літер

// так я реалізував повне імя папки на сервері, куди планую завантажувати зображення
$arr=array($_SERVER["DOCUMENT_ROOT"],'picture_upload',$folder_name);
$folder=join("/",$arr);

// створення папки на сервері
if (!mkdir($folder, 0777, true)) {
die('Помилка при створенні папки для завантаження малюнка');
}

// так я реалізував нове імя файлика зображення, на 2 символи менше з хешу оригінального імені
$arr=array(substr($str,2),'jpg');
$new_file_name_pictures=join(".",$arr);

// тутечки папка та плюс імя нового файлику зображення
$arr=array($folder,$new_file_name_pictures);
$final_pictures_adress=join("/",$arr);

// нарешті оце все переміщаємо в кінцеву папку
if (move_uploaded_file($picture_fileplace, $final_pictures_adress))
 { echo 'And this is really good :)'; }
 else { 
 echo 'Error when you load pictures at the server :( ';
 };

143

Re: Вивчаю базу даних MySql

if (!mkdir($folder, 0777, true)) {
die('Помилка при створенні папки для завантаження малюнка');
}

Резонне питання: а якщо така тека уже існує?
По-суті умова видасть false і скрипт завершиться.

144

Re: Вивчаю базу даних MySql

Sensetivity написав:
if (!mkdir($folder, 0777, true)) {
die('Помилка при створенні папки для завантаження малюнка');
}

Резонне питання: а якщо така тека уже існує?
По-суті умова видасть false і скрипт завершиться.

Це справді дуже кидається в очі, якщо станеться що дві однакові папки будуть,- стара я так розумію затреться разом з тим що там було, цей момент я вирішив таким чином

// Перевіряємо чи присутні однойменні папки для завантаження малюнку
$folder_way=.... створення папки для завантаження малюнка

if (!is_dir($folder_way))
{
mkdir($folder_way, 0777, true);
};

145 Востаннє редагувалося Анатолій (09.08.2015 21:31:52)

Re: Вивчаю базу даних MySql

Взагалі тему Завантаження на сервер малюнка вирішив дещо систематизувати

(правда на сьогодні 14, 17,... квітня і так далі :) я матеріал все ще пишу
P.S. Приберу попередження коли завершу розгляд проекту)


http://не-дійсний-домен/article/art_picture.jpg

146 Востаннє редагувалося Sensetivity (14.04.2015 19:05:02)

Re: Вивчаю базу даних MySql

Так смисл в тому, що файли мають кластися в ті теки.
Просто у вас він не так прописаний.
Якщо така тека вже є, то ми НЕ виходимо зі скріпта а переходимо до наступного кроку.
Якось так:

// створення папки на сервері
if (!is_dir($folder)) {
  if (!mkdir($folder, 0777, true)) {
  die('Помилка при створенні папки для завантаження малюнка');
  }
}
// Якщо тека існує, або була успішно створена йдемо далі. 
// Не була створена - виходимо.

147

Re: Вивчаю базу даних MySql

А хто знає відповідь на таке запитання:
"Якщо проводити оцінювання малюнків, вважаю що правильним було щоб відвідувач зміг один раз проголосувати. Особисто я реалізував би це слідуючим чином, визначив би ip- відвідувача якщо він голосував - то заніс би його в базу даних при повторному голосуванні видавати повідомлення щось на зразок "Ви вже провели оцінювання робіт", але ж бувають випадки коли ip динамічні і таке інше.

- Які взагалі можуть бути варіанти для оцінювання робіт?

1. Реєстрація на сайті (хлопотно :) для відвідувача)
2. Визначення Ip (Недоліки - динамічні ip)
3. Можливо через аккаунт facebook-a, twitter-a, blogger-a, vk, ok, etc (правда, я собі так здогадуюсь, що можна так реалізувати, але точно не скажу чи можна)
4. ?????
"

148

Re: Вивчаю базу даних MySql

Якщо вам достатньо щоб відвідувачі "на розслабоні" проголосували, і якщо у них не буде мотивації накручувати рейтинги, то ставте просто їм відповідну куку.

Якщо ж мотивація накрутки рейтинга малюнка буде, то без реєстрації ніяк не обійтись. І скільки тих клопіт? Чисто для голосування, можна зробити реєстрацію за одним лише email, який треба пітвердити (пароль вимагати тут недоречно).

Реєстрація з використанням облікових записів найвідоміших соцмереж - теж варіант, але чи ви на даний момент вже готові реалізувати функціональність для використання їхніх API? Якщо так - то це може бути найпростішим із варіантів.

Подякували: Анатолій1

149

Re: Вивчаю базу даних MySql

Виникло таке питання.
Є голосування (без реєстрації), якщо  я проголосую, почищу кеш, куки, і знову проголосую. Мої голоси після кожного чищення будуть рахуватися??

150

Re: Вивчаю базу даних MySql

Q-bart написав:

Виникло таке питання.
Є голосування (без реєстрації), якщо  я проголосую, почищу кеш, куки, і знову проголосую. Мої голоси після кожного чищення будуть рахуватися??

ще можете модем перезавантажити.
З високою ймовірністю - так.

Подякували: Q-bart1

151 Востаннє редагувалося ktretyak (18.04.2015 00:31:38)

Re: Вивчаю базу даних MySql

ktretyak написав:

.. лише email, який треба пітвердити (пароль вимагати тут недоречно)...

Зараз я подумав, що тут рекомендації мої стосуються єдиного голосування, бо якщо людина захоче проголосувати більше одного разу, то тут або куки треба додавати, або все ж таки організувати можливість логінитись по пошті + паролю.

152

Re: Вивчаю базу даних MySql

Q-bart написав:

Виникло таке питання.
Є голосування (без реєстрації), якщо  я проголосую, почищу кеш, куки, і знову проголосую. Мої голоси після кожного чищення будуть рахуватися??

На скільки мені відомо, то на даний момент через HTTP не існує іншого способу "впізнавання користувача", окрім як по кукам (до речі, може це не всі знають, але "сесія" теж закріпляється саме за кукою), або через localStorage.

Тобто кеш видаляти з браузера не потрібно, достатньо видалити куку встановлену відповідним доменом.

153

Re: Вивчаю базу даних MySql

Дякую пане ktretyak, вирішив, в даному варіанті веб-проекту реалізую перевірку голосування лише за куками. Думаю цього буде достатньо, більше перейматись вважаю не варто :)
Хоча потрібно буде розглянути тему "Ідентифікація відвідувача".

154

Re: Вивчаю базу даних MySql

Анатолій написав:

Дякую пане ktretyak, вирішив, в даному варіанті веб-проекту реалізую перевірку голосування лише за куками. Думаю цього буде достатньо, більше перейматись вважаю не варто :)
Хоча потрібно буде розглянути тему "Ідентифікація відвідувача".

Тема входить в "Реєстрацію користувача". Якщо у вас є реєстрацію - є й ідентифікація, просто ви ще про неї не знаєте :)
Якщо коротко - записуєте ID того, хто вже проголосував а потім перевіряєте.

155 Востаннє редагувалося Анатолій (12.05.2015 13:06:08)

Re: Вивчаю базу даних MySql

Поки займався з датами то вирішив накрапати на замітку, можливо кому стане в нагоді :)

Дещо про дати

! ох вже ці початківці - затер робочу сторінку :( та й все інше (((

презентація нової версії про дати, рахуй статтю про дати два рази розібрав, якщо три рази написати то обуде як в тому анекдоті, на третій раз вже сам зрозумію про що пишу ))))

http://не-дійсний-домен/pictures_02/art_date.jpg

156

Re: Вивчаю базу даних MySql

Доброго дня, Україно,
Хочу поцікавитись, щодо ваших пропозицій, як краще/правильно реалізовувати таку думку.
Зараз розглядаю питання Реєстрація на сайті
1. Користувач вже зареєстрований, має нік та пароль. Наприклад нік "QWER" пароль "AAAA"
2. Є форма входу на сайт, де користувач вводить свой нік пароль
3. Я маю перевірити чи є в базі даних відповідні дані логіну та паролю.
4. Якщо дані є, направити на сторінку "для своїх", якщо такого в базі даних немає, вивести повідомлення, щось на зразок  "Sorry, Ви незареєстровані чи невірно ввели дані"

Мене цікавить 3 та 4 пункт виконання задумки.
Мій варіант такий:

<!-- HTML форма -->
<form method="post" action="http://не-дійсний-домен/pages_02/test.php">
            <input name="login" required placeholder="login_name"><br>
            <input type="password" name="password" required placeholder="password"><br>
            <input type="submit" name="submit" value="Вхід">
</form>

<!-- PHP-обробник форми -->

$login_name = htmlspecialchars(stripslashes($_POST['login']));
$password = htmlspecialchars(stripslashes($_POST['password']));
$con = new mysqli('localhost', 'User', password', 'DB');
mysqli_set_charset($con,"utf8");
$sql ="SELECT id FROM `Users` 
        WHERE login_name='$login_name' 
        AND password='$password'";
        
$result = $conn->query($sql);
$row = $result->fetch_assoc(); 
if ($result->num_rows > 0) 
       {
 echo {!!!! Вивести сторінку для своїх. 
Питання ось тут, яким чином і чи коректно так створювати сторінку в цьому місці, 
чи посилання організувати на створення сторінки з цього місця??? )))} 
        } else 
 echo "!!! Вивести сторінку з попередженням
- На жаль, Ви не зареєстровані або сталась помилка під час введення даних!";
        
$con->close();

http://не-дійсний-домен/pictures_02/art_regist_002.jpg

157

Re: Вивчаю базу даних MySql

Зберігайте в базі не паролі, а їхні хеші, причому перед тим, як хешувати, пароль треба "посолити".

158

Re: Вивчаю базу даних MySql

quez написав:

Зберігайте в базі не паролі, а їхні хеші, причому перед тим, як хешувати, пароль треба "посолити".

"посолити"?? напевно маєте на увазі зашифрувати?

$password = md5($password);

http://не-дійсний-домен/Forum_Replace_02/art_regist_003.jpg

159

Re: Вивчаю базу даних MySql

Ні, під "посолити" я маю на увазі саме "посолити". В найпростішому випадку це

$password = md5($password + $salt);

де $salt ви визначаєте де-небудь, довільним способом.

Подякували: Анатолій1

160 Востаннє редагувалося Sensetivity (18.05.2015 14:40:16)

Re: Вивчаю базу даних MySql

І краще використовувати інший хеш, md5 надто швидко прораховується.
А взагалі прикрутіть ф-цію http://php.net/manual/ru/function.password-hash.php

------
Щодо сторінки для своїх... Поставте куки та сесію а потім зробіть переадресація на потрібну сторінку, де, власне і  перевірятимуться куки/сесія і показуватиметься прихована інформація.

Подякували: Анатолій1