Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2015, 17:10   #1
cyx
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 37
По умолчанию Галерея. Ошибка открытия альбома

Есть две страницы index.php(вывод альбомов) и photos.php(Содержимое альбомов - фото). При переходе в любой альбом с фотографиями вылазит эта ошибка:
_________________________________
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND hide = 'show' ORDER BY pos' at line 2
SELECT * FROM photo WHERE id_catalog = AND hide = 'show' ORDER BY pos
_________________________________
Т.е. эта ошибка связана,я так понимаю, с отображением фото(т.е. свойство hide,show), которые устан. администратором. Как решить эту проблему?
сорри,если что не так, php поверхностно знаю.
1)index.php // вывод альбомов
PHP код:
<?php
  Error_Reporting
(E_ALL & ~E_NOTICE);
  
$title $titlepage "Фото";
  
// Устанавливаем соединение с базой данных
  
require_once ("config.php");
  
// Извлекаем из строки запроса параметр id_parent
  
$id_parent $_GET['id_parent'];
  if(empty(
$id_parent)) $id_parent 0;
  if(!
preg_match("|^[\d]+$|",$id_parent) && !empty($id_parent)) exit();
?>
PHP код:
<?php
  
// Если текущий каталог не является корневым,
  // выводим ссылку для возврата в предыдущее меню
  
if ($id_parent != 0)
    echo 
"<a class=menu href=index.php?id_parent=0>Верхний уровень</a>";
  
?>
  <?
  
// Формируем и выполняем SQL-запрос, извлекающий
  // список групп фотографий
  
$query "SELECT photocat.id_catalog AS id_catalog,
                   photocat.name AS name,
                   COUNT(photo.id_photo) AS total 
            FROM photocat, photo
            WHERE photo.id_catalog = photocat.id_catalog AND photocat.hide = 'show' AND photo.hide = 'show'
            GROUP BY photocat.id_catalog"
;
  
$ctg mysql_query($query);
  if (!
$ctgputerror("Ошибка при обращении к Фотогалерее");
  
// Если в таблице catalog присутствует хотя бы одна
  // группа фотографий - выводим их в таблице
  
if(mysql_num_rows($ctg)>0)
  {

    while(
$cat mysql_fetch_array($ctg))
    {
      
// Выводим список каталогов
    
echo "<div class=wrap>
  <div class=block-text>
    <h1><a class=info href=photos.php?id_parent="
.$cat['id_catalog'].">".$cat['name']."</a></h1>
    
    <hr/>
    <p>Описание</p>
  </div>
  <div class=block-date>
    <p class=date day>Количество фотографий   "
.$cat['total']."</p>
   
    <div class=block-date-bg>
    <span class=percent-75 dark></span>
    <span class=percent-25 light></span>
    </div>
  </div>
</div></div>"
;
                
    }
  }
?>
2)photos.php // вывод фотографий из альбома у них есть свойство (hide,show)
PHP код:
<?php

  
// Выбираем из базы данных фотографии
  
if(!preg_match("|^[\d]+$|",$id_parent) && !empty($id_parent)) exit();
  
$query "SELECT * FROM photo 
            WHERE id_catalog = 
$id_parent AND
            hide = 'show' 
            ORDER BY pos"
;
  
$prt mysql_query($query);
  if(!
$prt)
  {
    echo 
"error : ".mysql_error()."<br>";
    echo 
$query;
    
puterror("Ошибка при обращении к блоку Фотогалерея");
  }
  
// Если в текущей группе фотографии имеется хотя бы одна
  // фотография - формируем таблицу с фотографиями
  
if(mysql_num_rows($prt) > 0)
  {
    
// Вспомогательная переменная для вывода
    // фотографий по 5 штуки в строке
    
$td == 0;
    
// Выводим заголовок таблицы
    
while($par mysql_fetch_array($prt))
    {
      
// Формируем переменную $image, несущую ответственность за вывод
      // уменьшенного изображения, являющегося ссылкой на увеличенное
      
if(!empty($par['small']) &&
         
$par['small']!="-" &&
         
file_exists($par['small']))
      {
        
$size getimagesize($par['big']);
        
$image "<a href=# onclick=\"show_img('".$par['big']."',".$size[0].",".$size[1]."); return false \" ><img src=".$par['small']." border=0 vspace=3></a>";
      }
      else 
$small "Нет";
      
// Если значение временной переменной равно 0
      // выводим тэг начала строки таблицы <tr>
      
if ($td == 0) echo "<tr>";
      
// Выводим фотографию
      
echo "<td><table border=0 width=100%><tr align=center>
              <td><p><b>"
.$par['name']."</b></p></td></tr>
              <tr align=center>
                 <td>
$image</td>
            </tr></table></td>"
;
      
// Увеличиваем значение временной переменной $td
      
$td++;
      
// Если временная переменная $td принимает значение
      // равное 5, следовательно строка завершена, и необходимо
      // вывести завершающий тэг </tr>, а значение самой
      // переменной обнулить
      
if ($td == $numphoto)
      {
        echo 
"</tr>";
        
$td 0;
      }         
    }
  }
?>
cyx вне форума Ответить с цитированием
Старый 04.10.2015, 20:28   #2
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

id_catalog =''
Тут пустота, хотя бы кавычки поставь.

Ошибка с запросом SQL.

Грубо запрос пусть будет таким:
Код:
"SELECT * FROM photo WHERE id_catalog ='".$id_parent.'".....

Последний раз редактировалось prizrak1390; 04.10.2015 в 20:31.
prizrak1390 вне форума Ответить с цитированием
Старый 05.10.2015, 07:55   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

толку не будет, ведь это число и не может быть пустотой
по сути
Код:
"SELECT * FROM photo WHERE id_catalog =".intval($id_parent)."....
ну а по уму нужно следить за передаваемыми параметрами
ADSoft вне форума Ответить с цитированием
Старый 05.10.2015, 08:58   #4
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

ADSoft, да это понятно)) Человек говорит-же нет опыта в пыхе, к тому же ошибка ссылалась именно на неверную конструкцию SQL запроса...какбэ эту проблему решили. А уже вопрос - почему, скрипт ничего не отображает - совсем другая история.
prizrak1390 вне форума Ответить с цитированием
Старый 05.10.2015, 10:24   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы заэкранировал hide и pos


Код:
$query = "SELECT * FROM photo 
            WHERE id_catalog = $id_parent AND
            `hide` = 'show' 
            ORDER BY `pos`";
возможно, что проблема не в этом, но хуже от этого точно не будет!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.10.2015, 10:25   #6
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Вся проблема у вас из-за неправильно переноса строки запроса, включайте знаки (конец строки в редакторе, что бы не делать такие ошибки) и вообще не плохо бы было окромлять имена таблиц в кавычки:

Код:
$query = "SELECT * FROM `photo` WHERE `id_catalog`='$id_parent' AND `hide`='show' ORDER BY `pos`";
uberchel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка открытия файла. opendialog hemn6vyr Общие вопросы Delphi 3 06.03.2013 17:23
Ошибка открытия mdb файла PoVselennoy Microsoft Office Access 5 14.05.2012 20:57
Ошибка открытия формы Максим139 Помощь студентам 3 17.03.2011 22:15
Ошибка открытия файла mutabor Общие вопросы Delphi 7 28.09.2009 18:33
Ошибка из-за открытия диалога Marisha* Общие вопросы Delphi 8 12.07.2009 16:15