1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

duvida em php

Discussão em 'Web Development' iniciada por Spoky, 9 de Julho de 2007. (Respostas: 5; Visualizações: 484)

  1. Spoky

    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: 9 de Julho de 2007
  2. slack_guy

    slack_guy Power Member

    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'.
     
  3. Spoky

    Spoky Power Member

    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: 10 de Julho de 2007
  4. Spoky

    Spoky Power Member

    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!!
     
  5. slack_guy

    slack_guy Power Member

    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....
     
  6. Spoky

    Spoky Power Member

    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...
     

Partilhar esta Página