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

Форум PHP

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

 

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

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

тема: Оптимизация скрипта
 
 автор: mjc66   (19.06.2007 в 15:06)   письмо автору
 
 

Код скрипта следующий:

<?php
     
print("
            <table border='1' 
cellspacing='2' cellpadding='1' 
class='search'><caption align=top           
     class='search'>Результат поиска:</caption><tr><td width='35%' 
class='search_top'                
align='center'><b>Наименование товара</b>
</td><td width='20%' class='search_top'     
           align='center'><b>Страница в 
каталоге</b></td><td width='30%' 
class='search_top'                
align='center'><b>Группа товаров</b></td>
</tr>"
);

//соединение с MySQL
     
$db_host "localhost";
     
$db_user "elekoru3";
     
$db_password "thoo7Goith";
     
$db_name "elekoru3_nomenclature";
     
$connection mysql_connect ($db_host$db_user$db_password) or die ('error connection');
     
mysql_select_db($db_name$connection);



//переменные
     
@$id =$_GET['id'];
     @
$name =$_GET['name'];
     @
$page =$_GET['page'];
     @
$group_production =$_GET['group_production'];



//checkbox
     
if ($id) {
         
$srch='id';} //id - имя столбца в таблице
     
if (isset($name)) {
         
$srch='name';} //name - имя столбца в таблице
     
if ($page) {
         
$srch='page';} //page - имя столбца в таблице
     
if ($group_production) {
         
$srch='group_production';} //group_production - имя столбца в таблице


     
$query "SELECT * FROM production WHERE $srch like '%$name%' ";
     @
$result mysql_query($query) or die("<div class='search' align='center'><font      color='#CC0000'><b>Ошибка запроса!</b></font></div>");
     if (
mysql_num_rows($result) > 0

//блок вывода результатов 

     else echo 
"<div class='search' 
align='center'>
      <font color='#CC0000'><b>По вашему 
запросу ничего не найдено! Попробуйте 
изменить условия       поиска.</b></font>
</div>"
;
     while(
$t = @mysql_fetch_array($result)) {        
     

     print(
"
            <tr> 
             <td  width='35%' 
class='search'><font 
color='#CC0000'>
$t[name]</font></td> 
             <td  width='20%' class='search'><font color='#0000CC'><a 
class=1 href=
$t[page]>Найти на странице</
a></font></td> 
             <td  width='30%' 
class='search'><font 
color='#CC0000'>
$t[group_production]</
font></td> 
            </tr> 
           "
); 
}  


     print(
"</table>");  
     
?>

Работу поискового скрипта можно посмотреть на http://www.el-eko.ru/Price.php
Хотелось бы его оптимизировать следующим образом:
1. Результатом поиска является таблица, в которой по результатам поиска может быть несколько строк, так вот нужно, чтобы осуществлялось чередование цвета фона этих строк. Как это сделать?
2. Ссылка "Найти на странице" ведет нас на ту страницу где находится выбранный товар, так вот нужно чтобы эта страница открывалась и показывала при помощи выделения каким-нибудь цветом тот самый выбранный товар. Умные люди предложили следующий вариант:

href="\$t[page]\"?id=\"$t[id]\"
,
но при таком раскладе при переходе по ссылке получаю сообщение об ошибке 404 т.е. как я понимаю скрипт благополучно определяет id товара, но результат не может вставить в дизайн страницы. Подскажите как решить эту проблему.
3. Если при незаполненном поле поиска нажать кнопку "Найти", то выводится вся БД, как исключить такую возможность?

   
 
 автор: Shorr Kan   (19.06.2007 в 17:09)   письмо автору
 
   для: mjc66   (19.06.2007 в 15:06)
 

Для чередования цвета введите в цикле while какую-нибудь переменную, и проверяйте ее кратность двум. Примерно так:

<?
$i
=0;
while(...){
?><tr <?if($i%2==0){?>bgcolor="silver"<?}?>><td>ааа</td></tr><?
$i
++;
}
?>



Что касается ссылки - не создавайте себе мучений. Выйдите из php, нарисуйте все что нужно, и вернитесь в него. Все очень просто:

<?
while(...){
?>
<a href="<?=$t['page'];?>?id=<?=$t['id'];?>"></a><br>
<?
}
?>



И почитайте об sql injection. Скрипт уязвим. А еще - стоит поменять пароль к базе.

   
 
 автор: ZuArt   (19.06.2007 в 17:21)   письмо автору
 
   для: mjc66   (19.06.2007 в 15:06)
 

Я бы обешелся без проверок...

вывести вначале или просто в подключаемом файле стилей

<style>
.tr0{background:#FF0000}
.tr1{background:#00FF00}
</style>


далее в коде.

$i = 0; // как и в пред. примере
 while($t = @mysql_fetch_array($result)) {        
   print("
            <tr class='tr".(($i++)%2)."'> 
             <td  width='35%' class='search'><font color='#CC0000'>$t[name]</font></td> 
             <td  width='20%' class='search'><font color='#0000CC'><a class=1 href=$t[page]>Найти на странице</a></font></td> 
             <td  width='30%' class='search'><font color='#CC0000'>$t[group_production]</font></td> 
            </tr> 
           "); 



href="\$t[page]\"?id=\"$t[id]\" - неясен код... если В СТРОКЕ ставить "\" перед знаком "$" то это будет экранирование символа доллара, а значит значение переменной не подставится... + элементы массивов нужно заключать в "{...}"

или
href=\"{$t[page]}\"?id=\"{$t[id]}\"


или
...href=\"".$t[page]."\"?id=\"".$t[id]."\"...




далее, про пустую строку... проверяйте ее длину в первую очередь =)
if(strlen(trim($str)) == 0)
выдать, что строка пустая - повторите ввод.

   
Rambler's Top100
вверх

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