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

Форум MySQL

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

 

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

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

тема: С самого начала (выборка из базы)
 
 автор: Peter   (07.06.2005 в 17:00)   письмо автору
993 байт
 
 

Вот есть у меня такой скрипт для выборки из моей, недавно сделанной, базы и хочу я его до ума довести. Сейчас он умеет только делать выборку по двум параметрам, введенным в html форму. Начнем с следующего, как мне сделать, чтоб выборка происходила в заданных приделах (числа), ну там <, >, <=, >=, это понятно, а как сделать выборку, скажем 5< x <10?
И еще, как сделать так, чтоб поиск происходил по одному введенному параметру (сейчас если не вводить один из них выдается ошибка)?

   
 
 автор: cheops   (07.06.2005 в 17:18)   письмо автору
 
   для: Peter   (07.06.2005 в 17:00)
 

А не могли бы вы привести так же HTML-форму? и также рассказать немного о том, что ищем?

PS Вопросы посвящённые базам данных лучше сразу размещать в соответсвующем разделе форума http://www.softtime.ru/forum/index.php?id_forum=3

   
 
 автор: Peter   (07.06.2005 в 17:37)   письмо автору
 
   для: cheops   (07.06.2005 в 17:18)
 

Sorry, я думал что теперь, восновном, будет работа с php...
Ищем электродвигатели по числовым параметрам:
<form action="test.php" method="post">
<input type="text" name="rpm" >
<input type="text" name="kpd" >
<input type="submit" value="Ввести!">

Это почти вся html страничка с формой...

   
 
 автор: cheops   (07.06.2005 в 18:01)   письмо автору
 
   для: Peter   (07.06.2005 в 17:37)
 

Добавим к этой HTML-форме ещё два поля kpdfrom и kpdto, смысл которых можно выразить формулой
kpdfrom > kpd >= kpdto
при этом для наглядности оставим все остальные поля
<form action="test.php" method="post">
<input type="text" name="rpm" >
<input type="text" name="kpd" >
От <input type="text" name="kpdfrom" > до <input type="text" name="kpdto" >
<input type="submit" value="Ввести!">

Посетитель может заполнять как все поля, так и только одно и запрос должен быть корректным. Решение, чтобы не засорять тему приведено в аттаче - основной смысл его заключается в том, чтобы формировать SQL-запрос по частям, а в конце собирать его из этих частей.

   
 
 автор: Peter   (08.06.2005 в 10:38)   письмо автору
 
   для: cheops   (07.06.2005 в 18:01)
 

Ого, все действительно довольно просто (если знать как делать :))...
На самом деле, такого скрипта уже достаточно чтобы использовать на сайте, остается только устранить некоторые неправильные штуки, например если я ничего не указываю в поле "ОТ " (форма), то в результатах выборки появляются позиции где это поле не заполнено... как это устранить?

   
 
 автор: XPraptor   (08.06.2005 в 11:33)   письмо автору
 
   для: Peter   (08.06.2005 в 10:38)
 

При формировании запроса к базе проверять, есть ли в этом поле что-то и если нет то просто не включать это условие в запрос.

   
 
 автор: Peter   (08.06.2005 в 17:43)   письмо автору
 
   для: Peter   (08.06.2005 в 10:38)
 

Вот еще что, появилась необходимость выводить в каждом запросе первую строчку из базы (id = 1), там у меня расшифровка параметров находится...

   
 
 автор: cheops   (08.06.2005 в 22:03)   письмо автору
 
   для: Peter   (08.06.2005 в 17:43)
 

Нужно в запрос поставить условие id=1, но с логикой ИЛИ, т.е. либо удовлетворяющий введённым условиями или id = 1 - это обеспечит вам первую строку в каждом запросе. Только обрамляйте всё в скобки т.е. пишите
(id = 1) or (прочие условия с and)

так надёжнее и обойдёте много хитрых ошибок.

   
 
 автор: cheops   (08.06.2005 в 22:04)   письмо автору
 
   для: Peter   (08.06.2005 в 10:38)
 

А в качестве значения поумолчанию для незаполненного поля что используется? NULL или пустая строка?

   
 
 автор: Peter   (09.06.2005 в 09:21)   письмо автору
 
   для: cheops   (08.06.2005 в 22:04)
 

1. Собственно я сам так по началу и сделал, указал id=1 перед другими переменными, но чтото у меня не сработало, возможно как раз из-за скобок... сейчас все нормально.
2. при импорте таблицы из текстового файла (.txt) только часть получилась со значением NULL, часть просто незаполнена...
3. В догонку... print "<table align=center width=60% border=1>"; Как внутри этой строки использоать кавычки, ато нужно class прописать.

   
 
 автор: cheops   (09.06.2005 в 12:31)   письмо автору
 
   для: Peter   (09.06.2005 в 09:21)
 

2. Тогда следует поставить дополнительное условие
kpd != "" AND kpd IS NOT NULL

3. А можно по-подробнее в чём заключается проблема?

   
 
 автор: Peter   (10.06.2005 в 09:05)   письмо автору
 
   для: cheops   (09.06.2005 в 12:31)
 

class="tab" например, если его вставить в строку print "<table align=center width=60% border=1 class="tab">"; название класса получится вне кавычек

   
 
 автор: XPraptor   (10.06.2005 в 10:27)   письмо автору
 
   для: Peter   (10.06.2005 в 09:05)
 

Все спецсимволы пишутся через слэш. В вашем случае так:
print "class=\"tab\"";

   
 
 автор: cheops   (10.06.2005 в 11:11)   письмо автору
 
   для: XPraptor   (10.06.2005 в 10:27)
 

Чтобы автоматизировать этот процесс, прогоняйте текст, который собираетесь поместить в базу данных через функцию mysql_escape_string() http://www.softtime.ru/dic/id_dic=96&id_group=2
<?php
 $text 
mysql_escape_string($text);
?>

   
 
 автор: Peter   (10.06.2005 в 11:31)   письмо автору
 
   для: cheops   (09.06.2005 в 12:31)
 

что то не получается присвоить класс таблице, в которой формируется результат выборки...

print "<br><br><center><table  class=\"tab\">\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

        print "\t<tr>\n";
        foreach ($line as $col_value) {
            print "\t\t<td>$col_value</td>\n";
        }
        print "\t</tr>\n";
    }
    print "</center></table>\n";


результат нулевой, в с другими таблицами, естественно, все в порядке...

   
 
 автор: cheops   (10.06.2005 в 11:40)   письмо автору
 
   для: Peter   (10.06.2005 в 11:31)
 

Хм.. перепишите таким образом:
<br><br><center><table  class="tab">
<?
    
while ($line mysql_fetch_array($resultMYSQL_ASSOC)) { 

        print 
"\t<tr>\n"
        foreach (
$line as $col_value) { 
            print 
"\t\t<td>$col_value</td>\n"
        } 
        print 
"\t</tr>\n"
    } 
    print 
"</center></table>\n";
?>

Что-нибудь поменялось?

   
 
 автор: Peter   (10.06.2005 в 16:32)   письмо автору
 
   для: cheops   (10.06.2005 в 11:40)
 

>Что-нибудь поменялось?


Как ни странно - нет, причем на этой странице я сделал еще одну простую таблицу, для пробы и у нее тоже самое... в таблице выборки есть ссылки, так вот они нормально отображаются(в css прописан тэг A)...
посмотрел в браузере html. вроде все в порядке...

   
 
 автор: XPraptor   (13.06.2005 в 13:44)   письмо автору
 
   для: Peter   (10.06.2005 в 16:32)
 

Можно код странички и .css целиком сюда приатачить, тогда легче будет разобраться.

   
 
 автор: XPraptor   (10.06.2005 в 15:03)   письмо автору
 
   для: Peter   (10.06.2005 в 11:31)
 

Загрузите страницу и посмотрите HTML код из браузера, там нормально все написалось?

   
 
 автор: Peter   (14.06.2005 в 11:10)   письмо автору
 
   для: XPraptor   (10.06.2005 в 15:03)
 

с классами все наладилось... как? сам не знаю, просто сегодня пришел на работу и все заработало, где-то косяк был...


пришло время навести лоск на все это хозяйство, как мне сделать чтоб в таблице с результатами цвет фона строк чередовался?

   
 
 автор: Loki   (14.06.2005 в 14:12)   письмо автору
 
   для: Peter   (14.06.2005 в 11:10)
 

делаете ключик, который в цикле переключается в зависимости от своего текущего состояния и вместе с ним переключается цвет.

   
 
 автор: Peter   (14.06.2005 в 15:37)   письмо автору
 
   для: Loki   (14.06.2005 в 14:12)
 

хотелось бы подробней, и наглядно, если не затруднит...
скрипт в начале темы...

   
 
 автор: Loki   (14.06.2005 в 17:09)   письмо автору
 
   для: Peter   (14.06.2005 в 15:37)
 


<?
$key
=0;
print 
"<table>";
while (
$massiv=mysql_fetch_array($result))
{
 print 
"<tr><td bgcolor=";
 if (
$key)
  {
   print 
"ffffff";
   
$key=1;
  }
 else
  {
   print 
"aaaaaa";
   
$key=0;
  }
 print 
">".$massiv['something']."</td></tr>";
}
print 
"</table>";
?>


На запускаемость не проверял (точнее, он и не должен исполняться:). Думаю, отладите сами.

   
 
 автор: Peter   (15.06.2005 в 09:50)   письмо автору
3.4 Кб
 
   для: Loki   (14.06.2005 в 17:09)
 

не получилось... в чем ошибка?

   
 
 автор: Loki   (15.06.2005 в 11:55)   письмо автору
 
   для: Peter   (15.06.2005 в 09:50)
 

Мне кажется вы немного запутались с выводом массива.
Попробуйте так:

<?
    $query 
"SELECT Type, pod, rpm, nap, watt, link FROM nasos_01 WHERE (id_nasos = 1) or 1 = 1 ".$tmp1.$tmp2.$tmp3.$tmp4.$tmp5.$tmp6;
    
$result mysql_query($query) or die("Query failed : " mysql_error());
   
$key=0
     
print "<br><br><center><table align=center width=60%  border=1 class='tab'>\n";
    while (
$line mysql_fetch_array($result))
    {
      print 
"\t<tr>\n";
          print 
"\t\t<td align=center bgcolor=";
        if (
$key)
  {
   print 
"red";
   
$key=1;
  }
else
  {
   print 
"green";
   
$key=0;
  }
        print 
">".$line['Type']."</td>\n";
        }
        print 
"\t</tr>\n";
    }
    print 
"</center></table>\n";
?>

Этот код должен выводить таблицу с полем Type. остальные добавьте по аналогии.

   
 
 автор: Peter   (15.06.2005 в 14:39)   письмо автору
 
   для: Loki   (15.06.2005 в 11:55)
 

с этим вариантом так ничего не получилось...
проблему решил с помощью куска, найденного в другом скрипте...

if($key=="1"){$bgcolor=$color1;$key--;}
 else{$bgcolor=$color2;$key++;}

   
 
 автор: Loki   (15.06.2005 в 21:11)   письмо автору
 
   для: Peter   (15.06.2005 в 14:39)
 

это тоже самое - просто я умудрился перепуать местами условия if и else, а так запустил -и все работает:)

   
Rambler's Top100
вверх

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