1 Востаннє редагувалося VTrim (29.12.2014 21:18:39)

Тема: Швидкий пошук (PHP,PDO-MySQL,JS)

Потрібно було написати швидкий пошук,який видає результат запиту на льоту..
Мабуть є готові рішення.. але мені було цікаво написати самому.
Тут типу пошук нікнеймів.. ось що вийшло. Тут все в одному файлі,за гк не сваріть).

<html>
<head>

<?php

if(isset($_GET['query'])) {

//Підключення до БД

$host = 'localhost'; //хост БД
$dbname = 'vitamin'; //імя БД
$user = 'root'; //користувач БД
$password = 'vitamin'; //пароль БД
$driver = 'mysql'; //драйвер для БД

try {
  $db = new PDO("$driver:host=$host;dbname=$dbname", $user, $password); //створюємо обєкт класу PDO
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //вивід помилок
  $db->exec("SET names utf8"); //ставимо кодування в UTF8
}
catch(PDOException $e) {
    echo $e->getMessage(); //викидаємо помилки
}

$search = $db->prepare('SELECT id,user FROM users WHERE user LIKE ?'); //підготовлюємо запит
$search->execute(array('%'.$_POST['search'].'%')); //обробляємо його

while($result = $search->fetch(PDO::FETCH_OBJ)) 
{
echo 'ID:'. $result->id.' Користувач '.$result->user.'<br>'; //виводимо дані пошуку ($result як обєкт,id,user як властивості обєкту)
}

$db = null; //звільняємо память
exit; //закриваємось
}

?>

<input type="text" name="SearchNick" id="SearchNick" placeholder=" Введіть  нік..." style="width: 10%;">

<script>
function SearchNick()
{
var xmlhttp;
var nick = document.getElementById("SearchNick").value; //витягуємо нік з форми
if (window.XMLHttpRequest)
{// код для IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else
{// код для IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) //якщо отримали відповідь
{
document.getElementById("Result").innerHTML = xmlhttp.responseText; //результат повертаємо в id Result
}
}
xmlhttp.open("POST","?query",true); //POST запит
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //заголовки
xmlhttp.send("search="+encodeURIComponent(nick)+""); //відправка даних
}
</script>

<script>
setInterval("SearchNick();",1000); //оновлюємо результат
</script>

<div id = "Result"></div>

</body>
</html>
Подякували: 0xDADA11C7, leofun012

2

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

по  перше  не  зовсім  зрозуміло  в  чому  його  швидкість
якщо  маєтся  на  увазі  AJAX  то  швидкість  тут  ні  до  чого
по  друге - навіщо  там  setinterval  якщо  можна  почепити  обробник  на  введення   символу  в  поле як  роблять всі
по  третє - про jQuery хіба  нічого не  чули?

Подякували: koala, leofun01, ostap34PHP3

3

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

caballero написав:

по  перше  не  зовсім  зрозуміло  в  чому  його  швидкість
якщо  маєтся  на  увазі  AJAX  то  швидкість  тут  ні  до  чого
по  друге - навіщо  там  setinterval  якщо  можна  почепити  обробник  на  введення   символу  в  поле як  роблять всі
по  третє - про jQuery хіба  нічого не  чули?

jQuery потрібно пхати скрізь,навіть там,де не потрібно? (як в даному випадку,будете підключати цілу бібліотеку тільки для одної такої дії?) Без jQuery Ви як без рук ? Швидкість ще й в тому,що юзається PDO prepare statement при запитах в бд,далі,AJAX дійсно пришвидчує роботу, на рахунок setInterval,то тут дійсно можна було почепити обробник,але вже як зробив так зробив..

за гк не сваріть)

- це подіяло на Вас навпаки?

4 Востаннє редагувалося mike (02.10.2014 16:51:30)

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

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

5

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

Мабуть під швидким пошуком тут мається на увазі інтерактивний, що одразу видає результати, а не швидкість доступу до БД.

Подякували: leofun011

6

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

0xDADA11C7 написав:

Мабуть під швидким пошуком тут мається на увазі інтерактивний, що одразу видає результати, а не швидкість доступу до БД.

http://i6.minus.com/iUj4VUO1hmjS0.jpg

7

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

0xDADA11C7 написав:

Мабуть під швидким пошуком тут мається на увазі інтерактивний, що одразу видає результати, а не швидкість доступу до БД.

В точку)

Подякували: ostap34PHP1

8

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

muhasjo написав:

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

Можна спробувати

9

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

jQuery потрібно пхати скрізь,навіть там,де не потрібно? (як в даному випадку,будете підключати цілу бібліотеку тільки для одної такої дії?)

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

10

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

caballero написав:

jQuery потрібно пхати скрізь,навіть там,де не потрібно? (як в даному випадку,будете підключати цілу бібліотеку тільки для одної такої дії?)

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

Якщо я вирішив написати на чистому js,значить мені було так потрібно,Вас ніхто не змушує робити так само.

Подякували: leofun011

11

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

швидше буде якщо з кешу витягувати, а не з бд.

не факт ;)

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

якщо буде враппер буде гірше. Так як все рівно треба буде зєднуватись з базою даних так що тут виграшу 100% не буде;)

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

чувак просто тренерується, і показує що він вміє. + можливо буде комусь корисний цей код.
Для початку дійсно достатньо на голому js особливо якщо там 1-2 сторінки буд.

12

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

funivan написав:

швидше буде якщо з кешу витягувати, а не з бд.

не факт ;)

ну тут, да, залежно як його організувати і заповнювати.

funivan написав:

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

якщо буде враппер буде гірше. Так як все рівно треба буде зєднуватись з базою даних так що тут виграшу 100% не буде;)

ну зєднуватись із базою це зрозуміло. А чим врапер гірший?

Подякували: ostap34PHP1

13 Востаннє редагувалося elektryk (11.02.2018 15:13:41)

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

Хочу придбати відеоуроки. В них PHP 7. А яка зараз версия PHP в моді??

14

Re: Швидкий пошук (PHP,PDO-MySQL,JS)

3 роки пройшло. Мабуть дуже вже хотілося поділитися першими "знаннями" :D