Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Поиск на сайте и Masonry - PHP, JAVASCRIPT (https://javascript.ru/forum/server/69309-poisk-na-sajjte-i-masonry-php-javascript.html)

Шалун 13.06.2017 16:34

Поиск на сайте и Masonry - PHP, JAVASCRIPT
 
Помогите, пожалуйста! Не могу разобраться почему при поиске на сайте Masonry не работает; хотя данные, которые были вбиты в поиске выводит. Если же поиск не использовать, то Masonry работает:


1.php
<form name="search" method="post" action="search.php" class="search">
    <input type="search" name="query" placeholder="Поиск" class="input">
    <button type="submit" class="ax">Найти</button> 
</form>




search.php
<!DOCTYPE html>
 <HTML>
 <head>
  <title> </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script src="/js/masonry.pkgd.min.js"></script>
  <?php include("bd/Ho_bd.php"); ?>
 
 </head>
 
<body>
<?php 
define('DB_HOST', 'localhost');
define('DB_USER', 'WOW');
define('DB_PASS', '');
define('DB_NAME', 'WOW');
 
if (!mysql_connect(DB_HOST, DB_USER, DB_PASS)) {
    exit('Cannot connect to server');
}
if (!mysql_select_db(DB_NAME)) {
    exit('Cannot select database');
}
 
mysql_query('SET NAMES utf8');
 
function search ($query) 
{ 
    $query = trim($query); 
    $query = mysql_real_escape_string($query);
    $query = htmlspecialchars($query);
 
    if (!empty($query)) 
    { 
        if (strlen($query) < 3) {
            $text = '<p>Слишком короткий поисковый запрос.</p>';
        } else if (strlen($query) > 128) {
            $text = '<p>Слишком длинный поисковый запрос.</p>';
        } else { 
            $q = "SELECT * FROM Ho WHERE 
                 `images` LIKE '%$query%' OR `title` LIKE '%$query%'
                  ";                      
 
            $result = mysql_query($q) or die(mysql_error());
 
            if (mysql_affected_rows() > 0) { 
                $row = mysql_fetch_assoc($result); 
                $num = mysql_num_rows($result);
 
                $text = '<p>По запросу <b>'.$query.'</b> найдено совпадений: '.$num.'</p>';
                
                 
        while($row=mysql_fetch_array($result))      
                {               
echo 
 
'
<div id="container" class="container">
 
<?php
$Ho = get_Ho ();
 
foreach($Ho as $row) : ?>
 
<div class="item">
      <a href="#" class="im"><img src="'.$row['images'].'"</a>
      <div class="title"><a href="#" class="title">'.$row['title'].' </a></div>
</div>
    
<?php endforeach;?>    
  </div>
';
 
}
            } else {
                $text = '<p>По вашему запросу ничего не найдено.</p>';
            }
        } 
    } else {
        $text = '<p>Задан пустой поисковый запрос.</p>';
    }
 
    return $text; 
} 
?>
 
<?php 
if (!empty($_POST['query'])) { 
    $search_result = search ($_POST['query']); 
    echo $search_result; 
}
?>

<script type="text/javascript">
 
  var container = document.querySelector('#container');
  var msnry = new Masonry(container, {
    columnWidth: 325,
    itemSelector: '.item',
    gutter: 20
  });
</script>
</body>
</html>




Ho_bd.php
<?php
 
function db_connect()
{
$host = 'localhost';
$user = 'WOW';
$pswd = '';
$db = 'WOW';
 
$connection = mysql_connect ($host, $user, $pswd);
if(!$connection || !mysql_select_db($db, $connection))
{
 return false;
}
return $connection;
}
 
 function db_result_to_array($result)
{
$res_array = array();
$count=0;
while ($row = mysql_fetch_array($result))
 
{
$res_array[$count] = $row;
$count++;
}
return $res_array;
}
 
 
  function get_Ho ()
  { 
 
    db_connect();
    $query = "SELECT * FROM Ho";
    $result = mysql_query($query);
    $result = db_result_to_array($result);
    return $result;
    }
?>





Понимаю, что Masonry будет работать при таком коде:
<a href="#" class="im"><img src="<?= $row['images']?>"  /></a>

Но в echo все выводит (Masonry в нем не работает почему-то), когда код записан так:
<a href="#" class="im"><img src="'.$row['images'].'"</a>



Помогите, пожалуйста, чтобы Masonry тоже заработал при поиске

laimas 13.06.2017 16:52

Masonry наплевать результатом чего сервер вернул запрошенную страницу, он об этом даже и не знает. Для него важно, чтобы html-код под этот плагин отвечал его ожиданиям. А что

<a href="#" class="im"><img src="<?= $row['images']?>" /></a>

что

<a href="#" class="im"><img src="'.$row['images'].'"</a>

это одно и тоже, с разницей в том, что в первом случае это вставка РНР код непосредственно в вывод HTML, а во втором случае, это вывод строкового значения конструкцией echo:

echo '<a href="#" class="im"><img src="'.$row['images'].'"</a>';


поэтому и РНР код в них прописывается согласно определению. <?= $row['images']?> тоже самое, что и <?echo $row['images']?>.

Шалун 13.06.2017 18:01

laimas,
а не подскажите ли Вы, что тогда сделать, чтобы Masonry заработал?

laimas 13.06.2017 18:22

Цитата:

Сообщение от Шалун
что тогда сделать, чтобы Masonry заработал?

Структуру кода для него соблюдать и определять плагин для этого кода. Ну и '#container' гарантированно должен быть на странице при определении плагина
var msnry = new Masonry(container, {
....

Ваша проблема на клиентской стороне, а значит и причину ее нужно искать там. Поэтому полезнее было бы показать результирующий HTML касающийся плагина, а не РНР код, который его формирует.

Шалун 13.06.2017 18:40

laimas,
у меня все данные выводятся в вертикальном порядке. Если же поиск не использовать, то Masonry работает. Извините, я пока еще новичок. Я как поняла Masonry из echo нужно убрать?

laimas 13.06.2017 18:49

Цитата:

Сообщение от Шалун
Я как поняла Masonry из echo нужно убрать?

Причем тут echo? Вот такая может быть структура кода выводящего html клиенту

<?php
 = 123;
?>
<p><?=?></p>


или такая

<?php
 = 123;
echo \'<p>\' .  . \'</p>\';
?>


Результатом что первого, что второго кода будет одно и тоже:

<p>123</p>


Не важно как вы выводите, важно что выводите. Если не работает, значит есть ошибки в структуре того, что выводите.

Исходный код страницы полученной после поиска проанализируйте, найдете ошибку. Это можно сделать в отладчике браузера.

Шалун 13.06.2017 18:50

Консоль ошибок не выдает

laimas 13.06.2017 18:58

Ну так ошибки есть в html-коде вашей страницы, о чем и гласит ошибка. Еще раз - анализируйте html код ответа сервера, в нем и ответ на вопрос найдете.

laimas 13.06.2017 19:25

Шалун,
в вашем РНР коде та же самая ошибка, что была допущена и в этой теме. Отсюда и ваши баги.


Часовой пояс GMT +3, время: 22:28.