duvida em php

Spoky

Power Member
Boas...
Perguntar aqui aos experts a ver se me dão uma ajudazinha!

O que se passa é o seguinte, eu tenho um site de venda de fotografia online,virada para a vertente desporto! o problema é este eu ao adicionar as fotos de uma prova de atletismo por exemplo, tenho de associar a cada foto uma keyword com o numero do dorsal do atleta que esta na foto,de modo a que este chegue ao site,procure pelo seu numero e apareçam as fotos todas dele,o problema é que se eu adicionar a keyword 25 por exemplo,ele ao procurar, vão aparecer as fotos do 25,125,225,325,1025,etc tudo o que contenha 25! o que eu queria era que a função do search fosse mais especifica!

O codigo que uso na search bar é este:

Código:
<script language="javascript" 
type="text/javascript">

function validateForm(search)
{

if(""==document.forms.search.search.value)
{
alert("Não introduziu nada para ser procurado!Tente de novo!");
return false;
}

}
</script>

                <form name="Search" action="search.php" method="link" onSubmit="return validateForm(search);" style="margin: 0px; padding: 0px;">
                <td class="search_bar">
                    <table width="100%">
                        <tr>
                            <td width="345" nowrap>
                                <div style="background-color: #E8E8E8; border: 1px solid #AFAFAF; padding: 3px;">
                                    <b>Procura:</b> <input type="textbox" name="search" class="search_box"> <input type="submit" value="Ir" class="go_button">
                                    <br />
                                    <input type="radio" name="match_type" value="all"> Dorsal | <input type="radio" name="match_type" value="any" checked> Qualquer <? if($setting->hide_id != 1){ ?>| <input type="radio" name="match_type" value="id"> Todos os termos<? } ?>
                                </form>
                                </div>
                            </td>
                        </tr>
                    </table>
              </td>

e na função do search é este:

Código:
# START SEARCH FUNCTIONALITY
    
    $my_search = strtolower($my_search);
    
    
    $my_search_words = split(" ",$my_search);
    $words = count($my_search_words);
    
    for($z = 0; $z < $words; $z++){
        if(strlen($my_search_words[$z]) >= 1){
            $my_search_words2 = $my_search_words2 . "," . strtolower($my_search_words[$z]);
            //$my_search_words2 = "," . $my_search_words2;
        }
    }
    
    $my_search_words2 = split(",",$my_search_words2);
    $words2 = count($my_search_words2);
    
    
    //echo $words2;
    //exit;
    //$my_search = "t";
    if($match_type == "id"){
        $searcher = "SELECT * FROM photo_package where active = '1' and gallery_id IN ($approved_cats) and id = '" . $_GET['search'] . "'";
    }
 if($match_type != "id"){
    if($words2 < 2){
        $searcher = "SELECT * FROM photo_package where active = '1' and gallery_id IN ($approved_cats) and keywords like '%$my_search%'";
    } else {
        $searcher = "SELECT * FROM photo_package where active = '1' and gallery_id IN ($approved_cats) and (";
        for($z2 = 1; $z2 < $words2; $z2++){
            $searcher.= " keywords like '%" . $my_search_words2[$z2] . "%'";
            if($z2 < ($words2 - 1)){
                if($match_type == "any"){
                    $searcher.= " or ";
                }
                if($match_type == "all"){
                    $searcher.= " and ";
                }
            }
        }
        if($words2 > 0){
            $searcher.= " or";
        }
        for($z3 = 1; $z3 < $words2; $z3++){
            $searcher.= " title like '%" . $my_search_words2[$z3] . "%'";
            if($z3 < ($words2 - 1)){
                if($match_type == "any"){
                    $searcher.= " or ";
                }
                if($match_type == "all"){
                    $searcher.= " and ";
                }
            }
        }
        if($words2 > 0){
            $searcher.= " or";
        }
        for($z3 = 1; $z3 < $words2; $z3++){
            $searcher.= " description like '%" . $my_search_words2[$z3] . "%'";
            if($z3 < ($words2 - 1)){
                if($match_type == "any"){
                    $searcher.= " or ";
                }
                if($match_type == "all"){
                    $searcher.= " and ";
                }
            }
        }
    }
    //$searcher.= "keywords like '%$my_search%' ";
    $search_display_limit = $setting->search;
    $searcher.= ") order by cart_count desc LIMIT $search_display_limit";
}
 
Última edição:
Nem sei bem se percebo qual é a tua dificuldade...

Aos escreveres:
Código:
SELECT * FROM mytable where myfield = '%string%';

estás à procura, no campo myfield, de todos os valores que contenham a string.

Por exemplo:

Código:
SELECT * FROM mytab where myfield = '%25%';
devolve-te:
25 1025 12568 25000 0025 etc;

SELECT * FROM mytab where myfield = '25%';
devolve-te:
2523 25 etc;

SELECT * FROM mytab where myfield = '%25';
devolve-te:
2325 25 0025 etc;

SELECT * FROM mytab where myfield = '25';
devolve-te:
25;

Provavelmente sabes isto e o problema nem está aqui. Mas parece-me que estás a usar '%string%' em vez de 'string'.
 
Bem vou testar isso a ver se funca!
Thanks pela ajuda :)


Edit: bem alterei o My_search... retirei-lhe os %% mas continua igual...
Tou mesmo à rasca com isto..
Mais alguma ideia?!
 
Última edição:
Bem ele ja me detecta a keyword como deve ser,o problema agora é o seguinte,se eu meter mais que uma keyword numa foto(por exemplo se houver 2 atletas na foto), meto por exemplo as keywords 25,26
agora so me detecta fotos com 1 keyword,mais que uma n me encontra a foto nem procurando por um numero nem pelo outro...

Alguma ajuda seria bastante apreciada! Ja estou a desesperar!!
 
Pelo que me parece,
Código:
if($match_type == "all"){
                    $searcher.= " and ";
                }

estás a procurar por campos que contenham 25 E 26 E 27 E 28.... devia ser 25 OU 26 OU 27 OU 28....
 
Pois... ja alterei o "and" para "or", no entanto fotos que tenham mais do que 1 keyword, n aparecem nos resultados do search...
deve tar a faltar qq coisa...
 
Back
Topo