Регистрация | Вход
Участие в поиске
LiveZilla Live Help

Пример поискового скрипта на языке PHP

Скрипт выводит состояние склада по запрашиваемым позициям 
для поисковой системы eFind.ru согласно спецификации.


<?php
/*
###    Скрипт выводит состояние склада по запрашиваемым позициям 
### для поисковой системы eFind.ru согласно спецификации.
###
### Версия: 0.3 (08.11.2012)
###
### 
### Параметра вызова:
###     Поисковый запрос передается в параметре search
###     Метод: GET
###     Кодировка запроса: Windows-1251
###     Кодировка ответа: Windows-1251
###
###
### Формат базы данных:
###    partname - название позиции (обязательное поле)
###    mfg - производитель
###    note - описание
###    pdf - ссылка на PDF
###    img - ссылка на изображение
###    p1 - розничная цена
###    p2 - мелкооптовая цена
###    p3 - оптовая цена
###    stock - состояние склада (количество позиций на складе или срок поставки)
###
*/

    $host = '';       # Адрес MySQL сервера, например: mysql.mysite.com
    $user = '';       # Имя пользователя базы данных, например: user_stock
    $pass = '';       # Пароль пользователя, например: MswZ2Qs
    $base = '';       # Название базы данных, например: store
    $table = '';      # Название таблицы с данными, например: stock
    
    $search = '';

    # Проверка наличия параметра search
    if(isset($_REQUEST['search']) && $_REQUEST['search'] != '')    
    {
        $search = $_REQUEST['search'];
    }
    
    # Соединение с базой данных
    if($dbh = mysql_connect($host, $user, $pass))
    {
        # Установка текущей базы данных
        mysql_select_db($base, $dbh);
        
        # Запрашиваем в таблице все позиции, названия которых содержат запрос
        $sth = mysql_query( "SELECT * FROM `".$table."` ".
                "WHERE `partname` LIKE '%".addslashes($_REQUEST['search'])."%' ".
                "LIMIT 0,20", $dbh );
        
        # Если при запросе возникла ошибка, выводим соответствующее сообщение и выходим
        if(mysql_errno() > 0)
        {
            header("HTTP/1.1 500 Internal Server Error");
            print    "<h1>500 Internal Server Error</h1>\nQuery Error";
            exit;
        }
        
        ob_start();
        print "<data>\n";
        if(mysql_num_rows($sth) > 0)
        {
            # Идем по каждой найденной записи
            while($row = mysql_fetch_array($sth, MYSQL_ASSOC))
            {
                print "<line>\n";
                
                # Название позиции
                print "    <part>".$row['partname']."</part>\n";
                
                # Производитель
                if($row['mfg'] != '')
                print "    <mfg>".$row['mfg']."</mfg>\n";
                
                # Описание
                if($row['note'] != '')
                print "    <note>".$row['note']."</note>\n";

                # Ссылка на PDF
                if($row['pdf'] != '')
                print "    <pdf>".$row['pdf']."</pdf>\n";

                # Ссылка на изображение
                if($row['img'] != '')
                print "    <img>".$row['img']."</img>\n";
                
                # Валюта цен: доллар
                print "    <cur>USD</cur>\n";
                
                # Розничная цена
                if($row['p1'] > 0)
                print "    <p1>".$row['p1']."</p1>\n";
                
                # Мелкооптовая цена
                if($row['p2'] > 0)
                print "    <p2>".$row['p2']."</p2>\n";
                
                # Оптовая цена
                if($row['p3'] > 0)
                print "    <p3>".$row['p3']."</p3>\n";
                
                # Состояние склада
                print "    <stock>".$row['stock']."</stock>\n";
                
                # Если в состояние не цифра (а, например, срок поставки,
                # наличие на складе партнеров и т.д.), указываем явно,
                # что данной позиции нет на складе
                if(!preg_match("/^\d+$/", trim($row['stock']))) 
                print "    <instock>0</instock>";
                print "</line>\n";
            }
            mysql_free_result($sth);
        
        
        }
        print "</data>\n";
        $content = ob_get_contents();
        ob_clean();
        
        header("Content-type: application/xml");
        print '<?xml version="1.0" encoding="windows-1251" ?>'."\n".$content;        
        
        mysql_close($dbh);
    } else
    # Если не удалось соединиться с базой данных, выводим ошибку и выходим
    {
        header("HTTP/1.1 500 Internal Server Error");
        print "<h1>500 Internal Server Error</h1>\nCould not connecto to database";
        exit;
    }

?>
2002—2017 «ЭтЛайт»
Наши контакты: +7 (812) 309-50-30, client@efind.ru
Реклама · Участие в поиске · Инструменты · Блог · Аналитика · English version

Чат с консультантом eFind.ru   RADEL ExpoElectronica