Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Модифицировать метод класса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
supernick
Отправлено: 20 Октября, 2014 - 13:53:08
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Июль 2014  


Помог: 0 раз(а)




Здравствуйте. Описал метод класса для поиска по базе данных таким образом
PHP:
скопировать код в буфер обмена
  1.  
  2. public function view_search($search)
  3.                 {
  4.                         $result = mysql_query("SELECT * FROM books WHERE author LIKE '%".$search."%' OR name LIKE '%".$search."%' OR genre LIKE '%".$search."%' OR izdatel LIKE '%".$search."%'") or die("Ошибка в запросе к базе данных: ".mysql_error());
  5.                         $arr = array();
  6.                         while ($row = mysql_fetch_assoc($result))
  7.                         {
  8.                                 $arr[] = $row;
  9.                        
  10.                         return $arr;
  11.                         }
  12.                 }
  13.  

Вызываю его так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.         if (isset($_POST['submit_search'])) {$submit_search = $_POST['submit_search'];}
  4.         if (isset($_POST['search'])) {$search = $_POST['search'];}
  5.         if (isset($submit_search) && $submit_search!='')
  6.         {              
  7.                                 $search = trim($search);       
  8.                                 $search = stripslashes($search);
  9.                                 $search = htmlspecialchars($search);
  10.         }
  11.         else {echo'<script type="text/javascript">window.location = "index.php"</script>';};
  12.         $books = new book; $array = $books->view_search($search); ?>
  13.         <div id="content">
  14.         <?php foreach ($array as $book) { ?>
  15.                 <div id="show_books" class="color">              
  16.                 <img class="book_cover" src="<?=$book['cover']?>" alt="Обложка книги" width="140">
  17.                 <p class="name"><?=$book['author']." | ".$book['name']." | ".$book['izdatel']." | ".$book['date']?></p>
  18.                 <p class="descripton"><?=$book['description']?></p>
  19.                 </div>
  20.         <?php } ?>
  21.                
  22.         </div>
  23.  

Может я что-то делаю не слишком правильно, но все работает прекрасно. Необходимо модифицировать код таким образом, чтобы в случае отсутствия совпадений при поиске выводилось соответствующее сообщение или происходило перенаправление на главную страницу. У самого никак не получается.
 
 Top
RickMan
Отправлено: 20 Октября, 2014 - 14:26:54
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Во первых тут странно:
PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2. while ($row = mysql_fetch_assoc($result)){
  3.     $arr[] = $row;
  4.     return $arr;
  5. }


Ваш скрипт по всей видимости возвращает только 1 ответ.
Было бы неплохо так:

PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2. while ($row = mysql_fetch_assoc($result)){
  3.     $arr[] = $row;
  4. }
  5. return $arr;
  6.  


Ну а по поводу темы. Если не нашло ничего, то получается вернется пустой массив. Вот и делаете проверку и шаблон получится такой:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         if (isset($_POST['submit_search'])) {$submit_search = $_POST['submit_search'];}
  3.         if (isset($_POST['search'])) {$search = $_POST['search'];}
  4.         if (isset($submit_search) && $submit_search!='')
  5.         {              
  6.                                 $search = trim($search);      
  7.                                 $search = stripslashes($search);
  8.                                 $search = htmlspecialchars($search);
  9.         }
  10.         else {echo'<script type="text/javascript">window.location = "index.php"</script>';};
  11.         $books = new book; $array = $books->view_search($search); ?>
  12.         <div id="content">
  13.         <?PHP if (empty($array)): ?>
  14.            КАКОЙ-ТО ВАШ ТЕКСТ
  15.         <?PHP else: ?>
  16.         <?PHP foreach ($array as $book) { ?>
  17.                 <div id="show_books" class="color">              
  18.                 <img class="book_cover" src="<?=$book['cover']?>" alt="Обложка книги" width="140">
  19.                 <p class="name"><?=$book['author']." | ".$book['name']." | ".$book['izdatel']." | ".$book['date']?></p>
  20.                 <p class="descripton"><?=$book['description']?></p>
  21.                 </div>
  22.         <?PHP } ?>
  23.         <?PHP endif; ?>
  24.         </div>
 
 Top
supernick
Отправлено: 20 Октября, 2014 - 14:36:04
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Июль 2014  


Помог: 0 раз(а)




RickMan пишет:
Во первых тут странно:

Просто после "экспериментов" скобку не там закрыл. Изначально все было как у вас.
RickMan пишет:
Ну а по поводу темы. Если не нашло ничего, то получается вернется пустой массив. Вот и делаете проверку и шаблон получится такой:

PHP:
скопировать код в буфер обмена
<?PHP
        if (isset($_POST['submit_search'])) {$submit_search = $_POST['submit_search'];}
        if (isset($_POST['search'])) {$search = $_POST['search'];}
        if (isset($submit_search) && $submit_search!='')
        {              
                                $search = trim($search);      
                                $search = stripslashes($search);
                                $search = htmlspecialchars($search);
        }
        else {echo'<script type="text/javascript">window.location = "index.php"</script>';};
        $books = new book; $array = $books->view_search($search); ?>
        <div id="content">
        <?PHP if (empty($array)): ?>
           КАКОЙ-ТО ВАШ ТЕКСТ
        <?PHP else: ?>
        <?PHP foreach ($array as $book) { ?>
                <div id="show_books" class="color">              
                <img class="book_cover" src="<?=$book['cover']?>" alt="Обложка книги" width="140">
                <p class="name"><?=$book['author']." | ".$book['name']." | ".$book['izdatel']." | ".$book['date']?></p>
                <p class="descripton"><?=$book['description']?></p>
                </div>
        <?PHP } ?>
        <?PHP endif; ?>
        </div>


Странно. Я тоже подумал, что массив будет пустым, поэтому проверял его точно таким же образом, но в итоге получал лишь предупреждение. А в вашем примере все работает так, как нужно. Спасибо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB