Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.06.2017, 16:34
Интересующийся
Отправить личное сообщение для Шалун Посмотреть профиль Найти все сообщения от Шалун
 
Регистрация: 22.05.2017
Сообщений: 10

Поиск на сайте и 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 тоже заработал при поиске
Ответить с цитированием
  #2 (permalink)  
Старый 13.06.2017, 16:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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']?>.
Ответить с цитированием
  #3 (permalink)  
Старый 13.06.2017, 18:01
Интересующийся
Отправить личное сообщение для Шалун Посмотреть профиль Найти все сообщения от Шалун
 
Регистрация: 22.05.2017
Сообщений: 10

laimas,
а не подскажите ли Вы, что тогда сделать, чтобы Masonry заработал?
Ответить с цитированием
  #4 (permalink)  
Старый 13.06.2017, 18:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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

Ваша проблема на клиентской стороне, а значит и причину ее нужно искать там. Поэтому полезнее было бы показать результирующий HTML касающийся плагина, а не РНР код, который его формирует.
Ответить с цитированием
  #5 (permalink)  
Старый 13.06.2017, 18:40
Интересующийся
Отправить личное сообщение для Шалун Посмотреть профиль Найти все сообщения от Шалун
 
Регистрация: 22.05.2017
Сообщений: 10

laimas,
у меня все данные выводятся в вертикальном порядке. Если же поиск не использовать, то Masonry работает. Извините, я пока еще новичок. Я как поняла Masonry из echo нужно убрать?
Ответить с цитированием
  #6 (permalink)  
Старый 13.06.2017, 18:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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

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


или такая

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


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

<p>123</p>


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

Исходный код страницы полученной после поиска проанализируйте, найдете ошибку. Это можно сделать в отладчике браузера.
Ответить с цитированием
  #7 (permalink)  
Старый 13.06.2017, 18:50
Интересующийся
Отправить личное сообщение для Шалун Посмотреть профиль Найти все сообщения от Шалун
 
Регистрация: 22.05.2017
Сообщений: 10

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

Последний раз редактировалось Шалун, 13.06.2017 в 18:59.
Ответить с цитированием
  #8 (permalink)  
Старый 13.06.2017, 18:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну так ошибки есть в html-коде вашей страницы, о чем и гласит ошибка. Еще раз - анализируйте html код ответа сервера, в нем и ответ на вопрос найдете.
Ответить с цитированием
  #9 (permalink)  
Старый 13.06.2017, 19:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приглашаем web-программистов (php, MySQL, Javascript). smithandpartners Работа 2 06.09.2013 21:17
Как вставить PHP редирект в javascript 87464644764 Общие вопросы Javascript 1 23.07.2013 08:36
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как передать картинку из javascript в php KIVagant AJAX и COMET 3 12.05.2010 11:54
Требуется программист php, javascript greatilya Работа 2 13.07.2009 10:55