Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод данных из базы
 
 автор: sirop   (13.10.2005 в 14:25)   письмо автору
 
 

Помогите, пожалуйста разобраться в чём моя ошибка. Уже второй день бьюсь и никак не найду ошибку... Мне нужно, чтобы зайдя на страничку терминов сразу же выводились термины на букву А (алфавит русский). Далее по запросу-щелчку на букве алфавита - данные.

Проблема в том, что по щелку на букве всё правильно выводится, а по-умолчанию у меня почему-то выводится всё содержание базы на все буквы
Вот сам код:

<table width=100% cellspacing=0 cellpadding=5>
<tr><td align=center>
<a href=terms.php?url=<?=urlEncode('А')?>>А</a>
<a href=terms.php?url=<?=urlEncode('Б')?>>Б</a>
<a href=terms.php?url=<?=urlEncode('В')?>>В</a>
<hr>
</td></tr>
<tr><td>

<?
  
// Обрабатываем урл
  
$url urlDecode($_GET['url']);
  
// Если главная стр Терминов, то выводим всё по букве А (умолчание)
  
if(!isset($url)) { $query mysql_query("SELECT * FROM terms WHERE word LIKE 'A%'");
  if (
$query)
  {
      while(
$fetch mysql_fetch_array($query))
          {
          
// Выводим слово
          
echo "<p><b>".$fetch['word']."</b> &#8212; ";
          
// Выводим определение
          
echo nl2br($fetch['body'])."</p>";
          }
  }else echo
"Ошибка при обращении к блоку терминов";
  }else {
      
$letter "$url";
      
$query mysql_query("SELECT * FROM terms WHERE word LIKE '$letter%'");
      if (
$query){
          while(
$fetch mysql_fetch_array($query)){
              
// Выводим слово
              
echo "<p><b>".$fetch['word']."</b> &#8212; ";
              
// Выводим определение
              
echo $fetch['body'];
              echo 
"</p>";
              }
              }
              }

   
 
 автор: sirop   (13.10.2005 в 19:44)   письмо автору
 
   для: sirop   (13.10.2005 в 14:25)
 

Что-то никто не отзывается :(
вот этот запрос

if(!isset($url)) { $query = mysql_query("SELECT * FROM terms WHERE word LIKE 'A%'");

Если в урле не присутствует переменная url, то делаем выборку из базы terms где в столбце word слова начинаются на букву А.
Но почему-то у меня делает выборку всех слов.... и на А, и на букву Б, и на букву В и т.д.
Что я делал не так?
Помогите, плиз!

   
 
 автор: cheops   (13.10.2005 в 23:29)   письмо автору
 
   для: sirop   (13.10.2005 в 14:25)
 

Это локальный хост или сервер?

   
 
 автор: sirop   (13.10.2005 в 23:43)   письмо автору
 
   для: cheops   (13.10.2005 в 23:29)
 

Это локальный (Денвер-2)

   
 
 автор: sirop   (14.10.2005 в 11:47)   письмо автору
 
   для: sirop   (13.10.2005 в 14:25)
 

Наверное, тот мой код оказался загадкой для всех :)
Подскажите, а как тогда можно изменить его, но чтобы смысл вывода данных остался. У меня не получается никак :(

   
 
 автор: Loki   (14.10.2005 в 12:42)   письмо автору
 
   для: sirop   (14.10.2005 в 11:47)
 

у вас ошибка вот тут:

<?
  
// Обрабатываем урл 
  
$url urlDecode($_GET['url']); 
  
// Если главная стр Терминов, то выводим всё по букве А (умолчание) 
  
if(!isset($url)) { $query mysql_query("SELECT * FROM terms WHERE word LIKE 'A%'");
?>

переменная $url к моменту проверки получается определена
попробуйте так:

<?
  
// Если главная стр Терминов, то выводим всё по букве А (умолчание) 
  
if(!isset($url)) 
 {  
$query mysql_query("SELECT * FROM terms WHERE word LIKE 'A%'");
 .... 
//тут весь код
}
else
{
  
// Обрабатываем урл 
  
$url urlDecode($_GET['url']); 
 
//тут выводим выбранную букву
}
?>

   
 
 автор: sirop   (14.10.2005 в 13:23)   письмо автору
 
   для: Loki   (14.10.2005 в 12:42)
 

Loki, действительно, как я мог не заметить, что $url я ввожу перед проверкой.
Я изменил, как Вы подсказали, но теперь почему-то данные по-умолчанию не выводятся вообще никакие. А если по ссылке на любой букве алфавита из общего меню - работает, как и надо.

   
 
 автор: Loki   (14.10.2005 в 14:26)   письмо автору
 
   для: sirop   (14.10.2005 в 13:23)
 

Можете взять свой исходный код, но заменить

<?
  
if(!isset($url)) { $query mysql_query("SELECT * FROM terms WHERE word LIKE 'A%'"); 
?>

на

<?
  
if(empty($url)) { $query mysql_query("SELECT * FROM terms WHERE word LIKE 'A%'"); 
?>

   
 
 автор: sirop   (14.10.2005 в 17:02)   письмо автору
 
   для: Loki   (14.10.2005 в 14:26)
 

Что-то и с empty($url) ничего не вышло. Странно, по идее всё должно работать.
Пока лучшим выходом для себя думаю сделать ссылку на страничку вместо http://test1.ru/terms.php сделать http://test1.ru/terms.php?url=%C0 (принудительно вывести всё на "А"... или по-умолчанию вывести другое что-то. Буду таки пробовать найти причину. Может это мой локальный глюк?

   
 
 автор: Loki   (14.10.2005 в 17:34)   письмо автору
 
   для: sirop   (14.10.2005 в 17:02)
 

Да нет, это подход неправильный.
Вообще эту переменную нужно проверять перед тем как скармливать mysql, а то все это может плохо кончится.
Попробуйте так:

<?
  
if(!isset($url)) 
  {
  
$url="A";
  }
else
 {
$url urlDecode($_GET['url']); 
}
?>

Вроде тут-то уж негде запутаться:)
ну и проверить на предмет одинарных кавычек

   
 
 автор: sirop   (14.10.2005 в 19:08)   письмо автору
 
   для: Loki   (14.10.2005 в 17:34)
 

Фух, мне этот код уже сниться скоро будет...
Вот таблица:

CREATE TABLE 'terms' (
  'id' tinyint(4) NOT NULL auto_increment,
  'word' tinytext NOT NULL,
  'body' text NOT NULL,
  PRIMARY KEY  ('id')
) MyISAM ;

INSERT INTO 'terms' VALUES (1, 'Абразивный инструмент', 'Инструмент, изготовленный из абразивных материалов. Выпускается в виде шлифовальных кругов, брусков, лент и т. д.');

INSERT INTO 'terms' VALUES (32, 'Балясины', 'Элементы ограждающих конструкций лестниц, балконов, террас, поддерживающие перила.');

INSERT INTO 'terms' VALUES (46, 'Вальма', 'Скат шатровой крыши, имеющий треугольную форму и расположенный с торцовой стороны здания.');

А вот сам код со всеми изменениями:

<a href=terms.php?url=<?=urlEncode('А')?>>А</a>
<a href=terms.php?url=<?=urlEncode('Б')?>>Б</a>
<a href=terms.php?url=<?=urlEncode('В')?>>В</a>

<?
   
// Если в адресе нет переменной url,
   // то выводим всё на "А"
   
if(!isset($url)){
       
$url="A";
       }
       
// Если буква задана, то на искомую букву
       
else {
           
$url urlDecode($_GET['url']);
           } 
  
$query mysql_query("SELECT * FROM terms WHERE word LIKE '$url%'");
  if (
$query){
      while(
$fetch mysql_fetch_array($query))
          {
          
// Выводим слово
          
echo "<p><b>".$fetch['word']."</b> &#8212; ";
          
// Выводим определение
          
echo $fetch['body'];
          echo 
"</p>";
          }
          }
?>


страница http://test1.ru/terms.php открывается без содержания (только меню-алфавит)
а все страницы с запрошенной буквой открываются нормально

Попробуйте кто-нить у себя, что-то у меня никак...

   
 
 автор: Loki   (14.10.2005 в 20:41)   письмо автору
 
   для: sirop   (14.10.2005 в 19:08)
 

У вас тут

<?
$url
="A";
?> 

стоит английская А:)
поставил русскую и все заработало;)

   
 
 автор: sirop   (15.10.2005 в 10:52)   письмо автору
 
   для: Loki   (14.10.2005 в 20:41)
 

Ура!!! Действительно, заработало
Loki, преогромнейшее спасибо!!! Я бы сам не додумался б до такого. Вы настоящий мастер

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования