221

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

Дякую хлопці дещо підправлю
наразі аналізував таймер із Canvas щоб застосувати у другій версії тесту
на сьогодні стаття "Реалізація годинникового таймеру із застосуванням бібліотеки jQuery та елементу HTML5 CANVAS"

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

222

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

В продовження розгляду теми "English Word" тест за порадами зацікавлених форумчан ...

Для перегляду що з того вийшло створив окрему веб-сторінку Тест щодо вирішення питання спільнотою форуму. Реалізація тесту English Word

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

223

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

Що ж спитаю Вашої думки щодо реалізації ajax запиту до Php-обробника тесту "English Word" другий блок дещо вище вказаної структури

Коротко суть: В поле тесту потрібно генерувати HTML сторінку відповідно до алгоритму PHP обробника,
згенерувати можемо застосовуючи ajax метод

$(selector).load(URL,data,callback);

за слідуючою схемою:

- Якщо юзер активує кнопку "Розпочати тест", то формуємо ajax запит лиш з одним даним quiz=start
- коли відповідає на пари слів, може бути варіант правильна відповідність слів, то формуємо ajax запит  даним quiz=correct
- коли відповідає на пари слів, може бути варіант неправильна відповідність слів, ajax запит  з одним даним quiz=incorrect
- та коли час вийшов, маємо можливість відправити запит із диними quiz=finish

PHP-обробник отримавши відповідний $_POST['quiz'] формує відповідну HTML сторінку

- Побажання, пропозиції, зауваження, рекомендації спільноти щодо цієї частини кодування ???

http://не-дійсний-домен/pictures_05/ajax_send_english_quiz.jpg

224

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

Привіт сьогодні,
в мене часом складується таке враження від кількості реакцій на мої пости в даному топіку, що я розмовляю сам із собою,
як в тому мультфільму дитинства
"- А чи є у Вас план, містер Фікс?"
"- Звичайно є містер Фікс."
"- А чи правильно містер Фікс, склав запит?"
"- Так звичайно, містер Фікс, Ви правильно все зробили, містер Фікс..."
"- Та Ви чудовий містер Фікс... Містеру Фогу та Паспарту нізащо Вас зрозуміти..."

http://не-дійсний-домен/Forum_Replace_02/mrFix.png

Подякували: koala, 0xDADA11C7, 221VOLT, leofun014

225 Востаннє редагувалося Анатолій (08.11.2015 13:22:50)

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

Доповнення 3.

Дещо обновив розробку тесту, на сьогодні вона виглядає поки що Реалізація тесту "English Word"

Є питання, більше дещо до виконання скрипту на стороні клієнту, суть слідуюча, особисто планував вставити скрипт бібліотеки JQuery у верхній HTML-документу, весь скрипт javascript та деякі елементи jQuery
планував заключити в метод ready. Тобто я собі так думаю весь скрипт повинен працювати коли документ готовий.

Але ж ні, він не працює, ну у всякому випадку CANVAS зникає.

Наразі в тілі документу веб-сторінки два скрипта, один зверху інший знизу, відразу після контейнеру CANVAS.

Питання хто знає: Чому не виходить помістити весь скрипт у тіло методу бібліотеки jQuery $( document ).ready(function() {?

<script>
$( document ).ready(function() {
....
});
</script>

частину скрипту повна версія того що я хотів би поставити зверху документу, а не всередині під CANVAS

Прихований текст
<script>
    
    var canvas = document.getElementById("canvas_area");
    var ctx = canvas.getContext("2d");
    
    // деактивуємо кнопки відповіді до початку тесту
    $('#right_word').prop('disabled', true);
    $('#wrong_word').prop('disabled', true);
    $('#right_word' ).addClass( 'disable_test' );
    $('#wrong_word' ).addClass( 'disable_test' );
    
    ctx.beginPath();
    // повертаємо контейнер на -90°
    ctx.rotate(-90*Math.PI/180);
    //та дещо зміщуємо всторону контейнер;
    ctx.translate(-150, 0);
    ctx.lineWidth = 20;
    ctx.strokeStyle = "#CDCDCD";
    ctx.shadowBlur=20;
    ctx.shadowColor="#CDCDCD";
    ctx.arc(75,75,50,0,2*Math.PI);
    ctx.stroke();
    ctx.beginPath();
    
    var timer;
    var Estimated_Time;
    var Timer_Element;
    var Clock_Estimated_Time;
    
    //ініціалізуємо
    function init(){
    Estimated_Time = 10;
    Timer_Element = 2 / Estimated_Time;
    Clock_Estimated_Time = 0;
    };
    
    init();   
        
    //позиціонуємо цифри
    $( "#for_time" ).text( Estimated_Time);
   
   // запускаємо та малюємо графіку таймеру        
     function Msg_Timer(){
     Estimated_Time--;
     if (Estimated_Time == 0){      
       Stop_Test();          
     };
     $( "#for_time" ).text(Estimated_Time);
     Clock_Estimated_Time = Clock_Estimated_Time + Timer_Element;   
     ctx.beginPath();
     ctx.clearRect(0,0,200,150);   
     ctx.lineWidth = 20;
     ctx.strokeStyle = "#CDCDCD";
     ctx.shadowBlur=20;
     ctx.shadowColor="#CDCDCD";
     ctx.arc(75,75,50,0,2*Math.PI);
     ctx.stroke();
     ctx.beginPath();
     ctx.strokeStyle = "#2ade2a"; 
     ctx.lineWidth = 15; 
     ctx.shadowBlur = 18;
     ctx.shadowColor="#079907"; 
     ctx.arc(75,75,50,0,Clock_Estimated_Time*Math.PI);
     ctx.stroke();    
   };    
  
  
   // функція активації тесту
   function Start_Test() {  
     init(); 
     
      // деактивуємо кнопку старт до слідуючого тесту
      $('#start_test').prop('disabled', true);
      $('#start_test' ).addClass('disable_test');
      
      // активуємо кнопки відповіді 
      $('#right_word').prop('disabled', false);
      $('#wrong_word').prop('disabled', false);
      $('#right_word' ).removeClass('disable_test');
      $('#wrong_word' ).removeClass('disable_test');
    
     timer = setInterval(Msg_Timer, 1000);      
     
      // AJAX запит початку тесту
      var quiz = 'start';
      $(".example_test").load("exe_english_quiz_forum_community.php",{quiz});
      
   };
   
   
   // функція закінчення тесту 
   function Stop_Test() {
     clearInterval(timer);
    
     //активуємо кнопку старт для слідуючого тесту
     $('#start_test').prop('disabled', false);
     $('#start_test' ).removeClass('disable_test'); 
    
     // деактивуємо кнопки відповіді до початку тесту
     $('#right_word').prop('disabled', true);
     $('#wrong_word').prop('disabled', true);
     $('#right_word').addClass('disable_test');
     $('#wrong_word').addClass('disable_test');  
     
     // AJAX запит закінчення тесту
      var quiz = 'finish';
      $(".example_test").load("exe_english_quiz_forum_community.php",{quiz});
    
}; 

</script>

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

226

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

Іншим кодерам хай,
ось мій апгрейд тесту "English Word. Verb"

Можете протестувати залишити відгуки :)

http://не-дійсний-домен/pictures_05/english_quiz.jpg

227

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

Фух, дещо ознайомивсь із AJAX-ом, чесно не скажу що все зрозумів, чи повністю розібрався, але скажімо деяке поняття маю що це таке,..
наразі  короткий бріф по AJAX "Організація інтерактивної сторінки; комплекс jQuery, AJAX, PHP, MySQLi. Частина друга"



http://не-дійсний-домен/pictures_04/quiz_fon.jpg

228 Востаннє редагувалося Анатолій (07.01.2016 21:27:43)

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

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

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

Навчальна стаття Дозавантаження статей із БД засобами AJAX
Демо

http://не-дійсний-домен/pictures_06/ajax_preloading_articles.jpg

Подякували: 0xDADA11C71

229

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

Не фільтрується вхідна $startFrom = $_POST['startFrom'];
Це SQL Inj

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

230

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

Mr VTrim написав:

Не фільтрується вхідна $startFrom = $_POST['startFrom'];
Це SQL Inj

Дякую. Я навіть не подумав в напрямку вразливостей.
Тобто, скажімо досить буде для перевірки чи довжина повідомлення менше 3 символів та дані integer?
Адже ця змінна лиш показує номер контенту. Максимальне число 999 особисто такої кількості статей мені більш ніж вистачить.

Та ще по роботі даного скрипту,...
так як поки розбираюсь із AJAX-запитами, то додатково, вважаю, варто застосувати:
1. Індикатор дозавантаження контенту, - так як не видно виконується AJAX-запит чи ні.
Адже час запиту до ->1.Серверу PHP-обробника -> 2.До серверу БД ->3. PHP-обробника ->4. HTML-сторінки може бути різний.
А якщо ще й запит не оптимізований, то час ще більший може бути..
Ось наприклад, розмірковував над таким,... рахую кількість записів в таблиці:

// порахуємо кількість записів в таблиці
$res = $mysqli->query("SELECT count(id) as count 
            FROM Article_List;");
$row_count = $res->fetch_assoc(); 
$count_articles =  $row_count["count"];

та вибираю контент із тієї ж таблиці

$result = $mysqli->query("SELECT * 
            FROM Article_List 
            LIMIT $startFrom,10");

можливо це можна виконувати одним SQL-запитом? І відповідно час повернення даних до користувача буде дещо менший ... але до аналізу даного питання ще не дійшов...

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

Для вирішення цього питання думаю застосувати ??? Прапорець (також прапор, позначка) (англ. flag) - Так? Є таке слово, і так коректно буде назвати змінну???
- Ідея яка?
1. Застосуємо прапор inprogress. Суть даного прапору буде слідуюча, якщо запит не виконується inprogress=false.
2. Якщо AJAX-запит виконується inprogress=true.
3. Додатково застосуємо умову під час відправлення AJAX-запиту на стан прапорця.
4. Все супер гуд повинно вийти...

Та добре ще дещо подумаю...

231

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

Просто зробіть так

$startFrom = (int)$_POST['startFrom'];
Подякували: 221VOLT1

232

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

Хай всім сьогодні, планую розглянути ось таку тему:
"Обробка вхідних даних та збереження деяких конфіденційних даних в таблицях БД"
за такою схемою

http://не-дійсний-домен/pictures_06/how_to_save_data.jpg

наразі виникає ніби два питання:
1. Отримані дані варто санітаризувати від SQL ін'єкції
2. Отримані дані, такі наприклад як пароль, варто зашифрувати

Хто як на власній практиці вирішує це питання? Які шляхи є санітаризації вхідних даних?
Чи шифрує хто паролі чому так чому ні?
На що ще варто звернути увагу?

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

233

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

Забули веб-сервер. І протокол HTTPS - для конфіденційної інформації обов'язково!
А ін'єкція можлива на всіх рівнях, захищатися треба і від HTML/JS ін'єкції. Якщо ім'я користувача містить код, який переадресовує браузер на фішингову сторінку з проханням ввести пароль, то всі, хто зайшов на сторінку форуму з дописом користувача, побачать її.

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

234

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

Розглядаю функцію mysqli_real_escape_string()
Функція кодує спеціальні символи в формат даних що встановлений на сервері.
Спеціальні символи такі як:

Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.

Питання 1. Кодуються лише ці спецсимволи?
Питання 2. А що це за спецсимвол "Control-Z"
Питання 3. Правильна інтерпритація?
- По черзі NUL (ASCII 0), він же \0 - позначає кінець рядка,
- \n - символ переводу рядка,
- \r - символ повернення каретки,
- \ - пустий слеш щось взагалі значить? чи його просто так кодують
- з символами ' , " - зрозуміло. Вони можуть змінити структуру SQL-запиту строкових даних, якщо наприклад так $item = "Zak's and Derick's Laptop";

Подякували: 221VOLT1

235

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

Привіт всім сьогодні,
якось постійно складно було зрозуміти синтаксис по документації
- Як правильно читати синтаксис щодо документації елементів php та mysqli (чи як там воно правильно ідентифікується)?

от,  візьмем для зразку функцію mysqli::commit :

поки розмірковую/аналізую синтаксис в мене відповідає наступній логіці:

http://не-дійсний-домен/pictures_06/syntax.jpg

та потім Як буде коректніше взагалі це питання розкрити
це у нас синтаксис чого? функцій/процедур/методів/елементів/інше
та в даному синтаксисі вказуються що? атрибути/параметри/змінні/інше

Так як наприклад ресурс w3schools вказує що PHP mysqli_commit() Function - це функція,
проте наразі я все ще переглядаю тему Обєктно-Орієнтоване програмування,- то як на мене докуменація php це метод класу mysqli

Подякували: 221VOLT1

236

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

Нічого, що () — реальні символи, що з'являються в коді, а [] — метасимволи, присутні лише в описі синтаксису?

237 Востаннє редагувалося 221VOLT (08.03.2016 14:27:57)

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

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

Привіт всім сьогодні,
якось постійно складно було зрозуміти синтаксис по документації
- Як правильно читати синтаксис щодо документації елементів php та mysqli (чи як там воно правильно ідентифікується)?

от,  візьмем для зразку функцію mysqli::commit :

поки розмірковую/аналізую синтаксис в мене відповідає наступній логіці:

http://не-дійсний-домен/pictures_06/syntax.jpg

та потім Як буде коректніше взагалі це питання розкрити
це у нас синтаксис чого? функцій/процедур/методів/елементів/інше
та в даному синтаксисі вказуються що? атрибути/параметри/змінні/інше

Так як наприклад ресурс w3schools вказує що PHP mysqli_commit() Function - це функція,
проте наразі я все ще переглядаю тему Обєктно-Орієнтоване програмування,- то як на мене докуменація php це метод класу mysqli

так, якщо по-простому (якщо я не помиляюся) - те що тут спочатку (bool) - це тип даних які функція повертає ,, і у різних документаціях, і часто до різних мов програмування - цей тип може бути і спочатку рядочку-пояснення, і наприкінці...

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

----

P.Y. написав:

Нічого, що () — реальні символи, що з'являються в коді, а [] — метасимволи, присутні лише в описі синтаксису?

тобто?

чому "присутны лише у описі синтаксису" ?

давайте розберемо на прикладі ?
http://f4.s.сайт-злодій/15iw6PU2x.png

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

238

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

У даному випадку, квадратні дужки при виклику функції ніде не використовуються (інакше це викличе помилку) — ними просто позначається необов'язковість деяких параметрів. У коді, що описує функцію, квадратних дужок теж нема — необов'язковість параметрів забезпечується значенням за замовчуванням, що задається цим параметрам. Виходить, квадратні дужки є лише в документації, і їх має читати лише людина. Тоді як круглі дужки використовуються і при виклику функції, і при її описі. До речі, при виклику функцій без параметрів круглі дужки також потрібні (хоча ніякі атрибути в них тоді не вказуються).

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

239 Востаннє редагувалося 221VOLT (08.03.2016 14:49:00)

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

агга, вище я вас трошки неправильно зрозумів))

справді, квадратних дужок у коді бути не повинно, а от параметри у них описані - можуть бути у коді при потребі, а можуть і ні)))

240

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

Привіт і сьогодні...
Інтро
М-г-м, як в одній із сучасних іграшок набрав квестів із програмування :)
Наприклад Квест 1 - Вивчаю англійську, поки буду розглядати пункти 4, 3, 2, то до першого довго прийдеться йти...
2 квест. Обєктно-орієнтовне програмування, велика за обємом тема, тому періодично інші теми розглядаю, слідуй пункт 4
3 квест. Все ще дещо вище (пару постів форума даного топіка ) згадану тему розглядаю ( тема Санітаризація вхідних даних... але зачепився за поняття обєкт, тому пункт 2.
та мало, для більш широкого підходу, ще вирішив розглядати основи php+mysqli 4 квест, зараз розглядаю функцію php free_result()

дещо детальніше, воно ніби й просто функція php free_result() очищує память від результатів результуючої вибірки даних із БД, все просто.
але як буває якщо розбираєш матеріал можна отримати і дещо дивні питання :)

Мій тест функції free_result() правда тест наразі ще до кінця не дописаний, тай помилку зараз видає, за що й хочу шановного панства спитати...

1. Яку таку память функція free_result чистить? 
Помилково подумав, якщо на виконання php-скрипту виділяється, наприклад, додатково память, то після виконання функції free_result() розмір цієї памяті зменшується,... - Ну як таке взагалі подумати можна було??? Ну так, а я подумав. Що там скрипт по памяті бере? Я перевіряв застосовуючи memory_get_usage...

2. Поки тестував то я зрозумів, що з memory_get_usage я не в ту сторону копаю...  *FACEPALM*
адже можна було здогадатись, якщо застосовувати функцію free_result() чи навіть можна правильно сказати метод free_result() класу mysqli_result

$db = new mysqli ("host", "user", "pass", "DB");
$query = "SELECT * FROM My_Тest";
$results = $db->query($query);
$results->free_result();

то видно, що метод виконується над обєктом $results, відповідно free_result() чистить чистить все що цей обєкт має... ох уж ця дитяча простота...

щоб протестувати роботу free_result() я вирішив переглянути що має обєкт до та після застосування  free_result() за допомогою var_dump()

наприклад до застосування отримав щось на зразок

object(mysqli_result)#1 (5) {
  ["current_field"]=>
  int(0)
  ["field_count"]=>
  int(4)
  ["lengths"]=>
  NULL
  ["num_rows"]=>
  int(5)
  ["type"]=>
  int(0)
}

Після отримав

Warning:  var_dump() [function.var-dump]: Couldn't fetch mysqli_result in ...

Warning:  var_dump() [function.var-dump]: Couldn't fetch mysqli_result in ...

Warning:  var_dump() [function.var-dump]: Property access is not allowed yet in ...

Warning:  var_dump() [function.var-dump]: Couldn't fetch mysqli_result in ...

Warning:  var_dump() [function.var-dump]: Property access is not allowed yet in ...

object(mysqli_result)#1 (5) {
  ["current_field"]=>
  NULL
  ["field_count"]=>
  NULL
  ["lengths"]=>
  NULL
  ["num_rows"]=>
  NULL
  ["type"]=>
  NULL
}

а хотів в другому питанні спитати, а що це за кучка Warning-ів, якщо результат var_dump() все ж вивів, але уважніше проаналізувавши результат var_dump() бачимо що в нас обєкт results має всі значення NULL.
По-перше, це буде відповідью, що ж все таки чистить функція free_result()
По-друге, var_dump() повинен вивести тип змінної, а поскільки типу в NULL немає, то відповідно й маємо Warning-и
Що ж, як кажуть грамотно складене питання має вже відповідь :)
Дякую що дочитали цей дліннющий пост

P.S. Я сподіваюсь, все ж правильно відповів на своє питання...