121

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

http://replace.org.ua/post/15129/#p15129

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

122

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

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

Але матеріал як на мене то складноватий, можливо більше потрібно практики роботи з даними, поки що я лише переглянув деяку інформацію та залишив собі дві сторінки:

1. Аналіз інформації за тематикою "Нормалізація схеми бази даних" за ресурсом http://uk.wikipedia.org/

2. Нормалізація схеми бази даних за посібником Гайна Г.А.


http://не-дійсний-домен/picture/normalization_18.jpg

http://не-дійсний-домен/picture/normalization_17.jpg

123

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

Стосовно баз даних маю зведену таблицю, може знадобиться :)

https://drive.google.com/open?id=0Byspi … authuser=0

Подякували: 0xDADA11C7, bunyk, Анатолій, Sensetivity4

124

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

Надайте доступ, бо

Воно написав:

You need permission

125

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

0xDADA11C7 написав:

Надайте доступ, бо

Воно написав:

You need permission

Подивіться, таке як відкрила

126

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

http://не-дійсний-домен/ForumReplace/Project_Choose_Picture.png

127

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

На даному форумі зустрів відмінне практичне завдання, саме на розуміння взаємозв'язку PHP+MySQL

Прихований текст

1. Реєстрація
ПІБ*
Країна*
Місто*
Школа*
Клас*
Дата народження*
Позашкільний навчальний заклад Гурток (адреса)
Керівник (телефон) не обовязково
*обовязкові поля
2. Здійснити сортування за віковими групами:
6-8
9-13
14-17
3. На головній сторінці повинні бути посилання на деталі конкурсу, контакти
4. Мати можливість сортувати роботи за типом графіки або стилем виконання
5. Організувати голосування роботи
6. Організувати написання відгуків
6.1. Створення інформативного блоку на головній сторінці про останні відгуки.
7. Сторінка адмінування веб-проекту. (Загальні дані по всім малюнкам, Визначення терміну проведення конкурсу)

таке собі тз
шаблон проекту
записничок виконання елементів проекту

деякі елементи того ж php я вирішив на власний розсуд, але деякі нажаль ще сам слабо розумію
От і задам більш досвідченим людям питання яким чином і чи можливо його реалізувати

Власне суть така якщо конкурс скажімо закінчується 1 травня, чи можливо щоб php-скрипт 1 травня самостійно зробив запис в Базу Даних по кількості набраних голосів конкурсантів. Сподіваюсь зрозуміло висловив думку, конкурс закінчився і ми в таблиці маємо фіксований запис на 1 травня скажімо на 0 годин?

128

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

Cron

Подякували: 0xDADA11C7, Анатолій2

129

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

Sensetivity написав:

Cron


Нова тема для мене, розгляну її  в кінці

130 Востаннє редагувалося Анатолій (19.03.2015 11:07:16)

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

До місцевих хакерів питання, розглядаю питання завантаження зображень на сервер, як правило, послідовність реалізації завантаження:
1. html-форма, (для реалізації вибору файлу зображення з домашнього ПК)

2. Обробник форми
2.1. Бажано Перевірити об'єм завантажуваного файлику, скоріше для оптимізації ресурсу серверу.

  В обробнику форми логічно припустити є необхідність перевірити коректність завантаження зображення в плані веб-безпеки, виключивши можливість завантаження шкідливого скрипту
2.2. завантажувати лише тип файлу зображення (наприклад, jpg, png...)
2.2. організувати попереджувальне повідомлення, якщо файл має розширення .php

Тут питання
2.3. Кажуть, Бажано надати завантажуваному зображенню своє локальне імя, знову ж цілях безпеки, а навіщо???

3. Якщо все гаразд, перевірку пройдено завантажити файл зображення на сервер, в якусь там відповідну папку.
4. Дані про місце збереження зображення і відповідні дані власника зображення завантажити в таблицю даних Бази Даних.

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

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

131

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

Я не хакер але вставлю свої 5 копійок.
1. Ну так.
2. Перевіряти треба на клієнті + на сервері. На клієнт (hrml MAX_FILE_SIZE або ж через js)і, щоб не було такого, що ти лиєш 2гб фільм а в кінці тобі скажуть "розмір файлу має бути 1,45 гб".
2.3 Щоб ускладнити злам. Тобто який ти залив файл shell.php то можна припустити що він буде доступний за адресою /upload/shell.php а якщо ти його перейменуєш, що зловмисник не зможе його виконати. алгоритм такий md5-хеш + сіль/.

Ще одне, перевірка типу в коді на картинці немає жодного сенсу.
Бо ['type'] задається на клієнті. А все що задається на клієнті - можна підробити.
Якще юзати getimagesize() або exif_imagetype()

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

132 Востаннє редагувалося Анатолій (20.03.2015 18:41:14)

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

шановне панство тижпрограмістів :) підкажіть причину такого повідомлення, тут сказано що в 10 рядочку немає можливості провести запис, а яким чином я маю реалізувати можливість запису файлика на сервер?
пробував права міняти стоїть 755, ставив 777 але кракозябри майже ті самі

Warning: move_uploaded_file(http://не-дійсний-домен/picture_upload/english_01.png) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections in /home/best144/public_html/pages/executors/exe_pictures_upload.php on line 10

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpcL1ori' to 'http://не-дійсний-домен/picture_upload/english_01.png' in /home/best144/public_html/pages/executors/exe_pictures_upload.php on line 10
1. picture_filename = english_01.png
2. picture_filetype = image/png
3. picture_filesize = 83639
4. picture_fileplace = /tmp/phpcL1ori

наразі розглядаю тему завантаження зображень на сервер, маю поки що такий собі код

<?
$filename = $_FILES['userfile']['name'];
$picture_filename = $_FILES['userfile']['name'];

// Перша перевірка чи вибраний файл
   if(is_uploaded_file($_FILES["userfile"]["tmp_name"]))
   {
     // Якщо файл успішно завантажений, розташовуємо його в вказану папку
     // із тимчасової директорії в кінцеву
     move_uploaded_file($_FILES["userfile"]["tmp_name"], "http://не-дійсний-домен/picture_upload/".$_FILES["userfile"]["name"]);
   } else {
      echo("Помилка завантаження");
   }

$picture_filetype = $_FILES['userfile']['type'];
$picture_filesize = $_FILES['userfile']['size'];
$picture_fileplace = $_FILES['userfile']['tmp_name'];

echo " 1. picture_filename = ". $picture_filename.'<br>';
echo " 2. picture_filetype = ". $picture_filetype.'<br>';
echo " 3. picture_filesize = ". $picture_filesize.'<br>';
echo " 4. picture_fileplace = ". $picture_fileplace.'<br>';

?>

133

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

Мда
http://не-дійсний-домен/picture_upload/".$_FILES["userfile"]["name"]
Вказуйте локальні шляхи '~/picture_upload/'.$_FILES["userfile"]["name"]

134

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

Все ще не працює логіка - не достатньо знань

Vo_Vik написав:

Мда
http://не-дійсний-домен/picture_upload/".$_FILES["userfile"]["name"]
Вказуйте локальні шляхи '~/picture_upload/'.$_FILES["userfile"]["name"]

документація PHP

добре я попробую так,

<?
$picture_filename = $_FILES['userfile']['name'];
$picture_fileplace = $_FILES['userfile']['tmp_name'];
$picture_filetype = $_FILES['userfile']['type'];
$picture_filesize = $_FILES['userfile']['size'];

move_uploaded_file($picture_fileplace, '~/picture_upload/');
 
echo " 1. picture_filename = ". $picture_filename.'<br>';
echo " 2. picture_filetype = ". $picture_filetype.'<br>';
echo " 3. picture_filesize = ". $picture_filesize.'<br>';
echo " 4. picture_fileplace = ". $picture_fileplace.'<br>';

?>

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

я вказав що я хочу перемістити - тобто файлик $_FILES['userfile']['tmp_name']
і вказав куди його потрібно помістити - http://не-дійсний-домен/picture_upload/
(пробував варіант ~/picture_upload/ )

результат поки що такий :

Warning: move_uploaded_file(http://не-дійсний-домен/picture_upload/) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections in /home/best144/public_html/pages/executors/exe_pictures_upload.php on line 7

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpjys552' to 'http://не-дійсний-домен/picture_upload/' in /home/best144/public_html/pages/executors/exe_pictures_upload.php on line 7
1. picture_filename = english_01.png
2. picture_filetype = image/png
3. picture_filesize = 83639
4. picture_fileplace = /tmp/phpjys552


перепрошую, що значить локальний шлях?
в себе на хостингу, де лежить мій сайт index.php, я створив папку /picture_upload/ куди планую завантажувати малюнки, і що це неправильно буде вказати http://не-дійсний-домен/picture_upload/ ?

і взагалі то мене дещо бентежить в повідомленні - HTTP wrapper does not support writeable connections - тобто файлик тимчасово зберігається на сервері, але записати його на сервер не дозволяється - як на мене ось в чому сіль!

135

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

робіть так

move_uploaded_file($_FILES["userfile"]["tmp_name"], "/picture_upload/".$_FILES["userfile"]["name"]);

Або так

move_uploaded_file($_FILES["userfile"]["tmp_name"], $_SERVER["DOCUMENT_ROOT"]."/picture_upload/".$_FILES["userfile"]["name"]);
Подякували: Анатолій1

136 Востаннє редагувалося Анатолій (13.04.2015 13:14:17)

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

другий варіант запрацював :)
а от перший варіант все ще ругається

робіть так

move_uploaded_file($_FILES["userfile"]["tmp_name"], "/picture_upload/".$_FILES["userfile"]["name"]);

Результат:

Warning: move_uploaded_file(/picture_upload/english_01.png) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/best144/public_html/pages/executors/exe_pictures_upload.php on line 8
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpDOIWU0' to '/picture_upload/english_01.png' in /home/best144/public_html/pages/executors/exe_pictures_upload.php on line 8
1. picture_filename = english_01.png
2. picture_filetype = image/png
3. picture_filesize = 83639
4. picture_fileplace = /tmp/phpDOIWU0

137

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

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

Я все ще розглядаю веб-проект "Конкурс дитячих малюнків" як практичне завдання. Дійшов до того що реалізував форму реєстрації учасника де учасник завантажує зображення на сервер Сторінка реєстрації
розробив перевірку форми на стороні серверу в такому обємі та  дані учасника можу добавити в базу даних

Прихований текст
<?php

$surname = htmlspecialchars(stripslashes($_POST['surname']));
$name = htmlspecialchars(stripslashes($_POST['name']));
$sity = htmlspecialchars(stripslashes($_POST['sity']));
$klass = htmlspecialchars(stripslashes($_POST['klass']));
$bith_day = htmlspecialchars(stripslashes($_POST['bith_day']));


$picture_filename = $_FILES['userfile']['name'];
$picture_fileplace = $_FILES['userfile']['tmp_name'];
$picture_filetype = $_FILES['userfile']['type'];
$picture_filesize = $_FILES['userfile']['size'];

// Перевіряємо чи завантажений файл не пустий 
if($picture_filesize == 0 ) 
exit ("Завантажений файл є пустим");

// Перевіряємо що назва файлу складається з латинських літер та цифр 
if (!preg_match("`^[-0-9A-Z_\.]+$`i",$picture_filename))
exit (" Імя файлу повинне складатись з латинських літер");

// Перевіряємо що назва файлу менше ніж 100 символів 
if (mb_strlen($picture_filename,"UTF-8") > 100) 
exit ("Імя файлу завелике, дозволяється не більше 100 символів");

// Перевіряється що обєм файлу не занадто великий 
if($picture_filesize > 1024*1024*1) 
exit ("Дозволений обєм файлу 1Мб");

// Перевірка розширень файлу 
$imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
if($imageinfo['mime'] != 'image/png' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg' )
exit ("Розширення зображення повинно бути jpg, jpeg, png ");

// Заборона виконання деяких розширень файлів 
$blacklist = array(".php", ".phtml", ".php3", ".php4");
foreach ($blacklist as $item) {
if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
echo "Заборонено завантаження php файлів";
exit;
}
};

move_uploaded_file($_FILES["userfile"]["tmp_name"], $_SERVER["DOCUMENT_ROOT"]."/picture_upload/".$_FILES["userfile"]["name"]);

// Зєднуємось з базою даних
$mysqli = new mysqli("......", "......", ".......", ".......");
  
// Вносимо дані
$mysqli->query("INSERT INTO `Picture_Competition`(`surname`,`name`, `sity`, `klass`, `bith_day`, `picture_filename`) VALUES ('$surname','$name','$sity','$klass','$bith_day','$picture_filename')"); 
$mysqli->close();


?>
<h1>дякуємо Ваші дані успішно зареєстровані на ресурсі</h1>

але.... є думка задля безпеки, імя файлу зображення краще змінити і лише потім його зберегти. А як то його краще реалізувати? І чи варто все ж таки такий фінт реалізовувати? І якщо не варто, то чому?
Наразі я власне не сильний хакер, та й взагалі не хакер, не тощо сильний; але кажуть що імя файлу краще змінити щоб людина яка заватажила файл, не змогла до цього файлу звернутись потім за url-адресою. Так безпечніше. Так то й так.

Я міг би запропонувати такий алгоритм кодування (наразі не знаю як в PHP реалізувати):
1. Визначити нове імя завантажуваного зображення = щось на зразок "Picture " + " Id " - учасника,
2. "Picture_Id " присвоїти дані зображення (оригінальне імя файлу) , чи як йому малюнок прикрутити ?
3. Зберегти в базі даних оригінальне імя файлу зображення.
4. Зберегти в себе на сервері в спеціально відведеній папці для зображень вже нове імя файлу зображень (Чого я й добивався)

Якщо потрібно вивести малюнок на веб-сторінку, то
зворотній шлях
1. берем "Picture_Id "
2. берем з бази даних оригінальне імя  файлу присвоюємо йому "Picture_Id "
3. виводим на сторінку

Все просто :) залишилось лиш реалізувати джерельний код :) хех

138

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

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

139

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

0xDADA11C7 написав:

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

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

140 Востаннє редагувалося Sensetivity (03.04.2015 23:14:45)

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

Моє бачення:
1. md5-хеш від файлу.
2. Беремо перші 2 символи з хешу і створюємо папку де назвою є ці символи.
3. Обрізаємо хеш на 2 символи.
4. Зберігаємо сам файлу з іменем, яке зосталось після п3.
5. Заносимо дані в таблицю. Наприклад image_id (inc), user_id, concurs_id, img_title, image_url.

Тобто для файлу, md5-хеш якого є

"EB0F7447F5AE94CA3509E8C359CB5A4A"

Ім'я буде наступним:

site.ua/img/EB/0F7447F5AE94CA3509E8C359CB5A4A.jpg

Плюси:
1. Байдуже на оригінальне ім'я файлу. Воно може мати хоч ієрогліфи чи іврит.
2. Невідома адреса збереження файлу.
3. Унеможливлює автоматичне завантаження файлів (парсинг / імпорт)

А запис у таблиці приблизно таким
image_id   | user_id | concurs_id | img_title | image_url

25 | 2 | 1 | Схід сонця в моєму селі | site.ua/img/EB/0F7447F5AE94CA3509E8C359CB5A4A.jpg

Таким чином ми можемо легко отримати:
а) Усі малюнки без винятку.
б) Усі малюнки користувача
в) Усі малюнки з актуального конкурсу
г) Усі малюнки користувача з актуального конкурсу.

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

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