У меня небольшая ошибка в моей поисковой системе без выбора параметров.
Поисковый термин (name = «q» is = «q») отображает разные результаты, потому что он чувствителен к регистру.
Пример: Поисковый термин «WorkCenter» дает 16 результатов … а поисковый термин «workcenter» возвращает только два результата.
Я пытаюсь выяснить, как исправить запрос (name = «q» est = «q») и мои 3 текстовых поля (заголовок, описание, теги) во время запроса, чтобы всегда быть в нижнем регистре, чтобы вернуть все возможные результаты.
мой search.php
<?php
include("config.php");
include("functions/import.php");
$thebaseurl = $config['baseurl'];
$sortby = cleanit($_REQUEST['s']);
$filter = intval(cleanit($_REQUEST['f']));
$page = intval(cleanit($_REQUEST['page']));
$searchterm = cleanit($_REQUEST['q']);
$mfg = intval(cleanit($_REQUEST['mfg']));
$category = intval(cleanit($_REQUEST['category']));
$type = intval(cleanit($_REQUEST['type']));
if($mfg != "")
{
$addtosql .= "AND mfg like'%".mysql_real_escape_string($mfg)."%'";
STemplate::assign('mfg',$mfg);
}
if($category != "")
{
$addtosql .= "AND categories like'%".mysql_real_escape_string($category)."%'";
STemplate::assign('category',$category);
}
if($type != "")
{
$addtosql .= "AND type like'%".mysql_real_escape_string($type)."%'";
STemplate::assign('type',$type);
}
if($searchterm != "")
{
$addtosql .= "AND (title like '%".mysql_real_escape_string($searchterm)."%' OR description like '%".mysql_real_escape_string($searchterm)."%' OR tags like '%".mysql_real_escape_string($searchterm)."%')";
STemplate::assign('q',$searchterm);
if ($sortby=="a")
{
$sort = "asc";
}
else
{
$sortby = "z";
$sort = "desc";
}
if($page=="")
{
$page = "1";
}
$currentpage = $page;
if ($page >=2)
{
$pagingstart = ($page-1)*$config['items_per_page'];
}
else
{
$pagingstart = "0";
}
$queryselected = "SELECT count(*) as total from docs WHERE public='1' AND active='1' $addtosql order by rating $sort limit $config[maximum_results]";
$query2 = "SELECT * from docs WHERE public='1' AND active='1' $addtosql order by rating $sort limit $pagingstart, $config[items_per_page]";
STemplate::assign('pagetitle',$lang['664']." ".$searchterm);
$executequeryselected = $conn->Execute($queryselected);
$totaldocs = $executequeryselected->fields['total'];
if ($totaldocs > 0)
{
if($executequeryselected->fields['total']<=$config['maximum_results'])
{
$total = $executequeryselected->fields['total'];
}
else
{
$total = $config['maximum_results'];
}
$toppage = ceil($total/$config['items_per_page']);
if($toppage==0)
{
$xpage=$toppage+1;
}
else
{
$xpage = $toppage;
}
$executequery2 = $conn->Execute($query2);
$docs = $executequery2->getrows();
$beginning=$pagingstart+1;
$ending=$pagingstart+$executequery2->recordcount();
$pagelinks="";
$k=1;
$theprevpage=$currentpage-1;
$thenextpage=$currentpage+1;
$added = "q=$searchterm&page=";
if ($currentpage > 0)
{
if($currentpage > 1)
{
$pagelinks.="<a href='$thebaseurl/".$langpage['0']."/".$langpage['31'].".html?".$added."1' class='page'>$lang[611]</a>";
$pagelinks.="<a href='$thebaseurl/".$langpage['0']."/".$langpage['31'].".html?".$added."$theprevpage' class='page'>$lang[612]</a>";
};
$counter=0;
$lowercount = $currentpage-5;
if ($lowercount <= 0) $lowercount = 1;
while ($lowercount < $currentpage)
{
$pagelinks.="<a href='$thebaseurl/".$langpage['0']."/".$langpage['31'].".html?".$added."$lowercount' class='page'>$lowercount</a>";
$lowercount++;
$counter++;
}
$pagelinks.="<span class='current'>$currentpage</span>";
$uppercounter = $currentpage+1;
while (($uppercounter < $currentpage+10-$counter) && ($uppercounter<=$toppage))
{
$pagelinks.="<a href='$thebaseurl/".$langpage['0']."/".$langpage['31'].".html?".$added."$uppercounter' class='page'>$uppercounter</a>";
$uppercounter++;
}
if($currentpage < $toppage)
{
$pagelinks.="<a href='$thebaseurl/".$langpage['0']."/".$langpage['31'].".html?".$added."$thenextpage' class='page'>$lang[613]</a>";
$pagelinks.="<a href='$thebaseurl/".$langpage['0']."/".$langpage['31'].".html?".$added."$toppage' title='last page' class='page'>$lang[614]</a>";
}
}
}
else
{
$error = $lang['665'];
}
}
else
{
STemplate::assign('pagetitle',$lang['660']);
}
//TEMPLATES BEGIN
STemplate::assign('mainmenu',4);
STemplate::assign('error',$error);
STemplate::assign('pagelinks',$pagelinks);
STemplate::assign('docs',$docs);
STemplate::display('header.tpl');
STemplate::display('rechercher.tpl');
STemplate::display('footer.tpl');
//TEMPLATES END
?>
Моя форма в качестве ссылки:
<form name="sform" id="sform" action="my_search.php" method="get">
<div class="form">
<table>
<tr>
<td class="td">{$lang820} :</td>
<td>
<div class="styled-select">
<select id="mfg" name="mfg">
<option value="">{$lang824}</option>
{insert name=get_doc_mfg assign=listdocmfg}
{section name=o loop=$listdocmfg}
<option value="{$listdocmfg[o].MFGID}" {if $mfg eq $listdocmfg[o].MFGID}selected="selected"{/if}>{$listdocmfg[o].name}</option>
{/section}
</select>
</div ><br />
</td>
</tr>
<tr>
<td class="td">{$lang218} :</td>
<td>
<div class="styled-select">
<select id="category" name="category">
<option value="">{$lang115}</option>
{insert name=get_doc_categories assign=listdoccategories}
{section name=o loop=$listdoccategories}
<option value="{$listdoccategories[o].CATID}" {if $category eq $listdoccategories[o].CATID}selected="selected"{/if}>{$listdoccategories[o].$langpage1}</option>
{/section}
</select>
</div ><br />
</td>
</tr>
<tr>
<td class="td">{$lang819} :</td>
<td>
<div class="styled-select">
<select id="type" name="type">
<option value="">{$lang823}</option>
{insert name=get_doc_type assign=listdoctype}
{section name=o loop=$listdoctype}
<option value="{$listdoctype[o].TYPEID}" {if $type eq $listdoctype[o].TYPEID}selected="selected"{/if}>{$listdoctype[o].$langpage1}</option>
{/section}
</select>
</div ><br />
</td>
</tr>
<tr>
<td class="td">{$lang412}:</td>
<td>
<div class="row">
<div class="text-fieldset">
<input class="text focus" type="text" name="q" id="q" value="{$q}">
</div>
</div>
</td>
</tr>
<tr>
<td class="td"> </td>
<td>
<br/>
<div class="submit-fieldset">
<input class="submit" type="submit" value="{$lang693}">
</div>
</td>
</tr>
</table>
</div>
</form>
использование ВЕРХНИЙ функция в вашем запросе.
Например SELECT * FROM table WHERE UPPER(name) LIKE UPPER("%yourtext%");
Он также преобразует значение name и значение yourtext в верхний регистр, поэтому сравните только верхний регистр.
Например: если в вашей базе данных есть ExaMple, и вы пишете пример, он преобразует их обоих в EXAMPLE и дает вам совпадения.
Других решений пока нет …