Ir para conteúdo
Fórum Script Brasil
  • 0

Função eval + Array em PHP


Vithor

Pergunta

Oi galera! Acabei de postar uma dúvida sobre busca, a qual eu mesmo resolvi. O problema é que a partir dela eu tenho outra.

Pra fazer o sistema de busca do site vou usar várias variáveis, que contém palavras chave de cada página.

Ou seja, a variável $sobre vai ser uma string + ou - assim: "sobre nos empresa historia", enfim, vocês entenderam.

O problema é que é uma busca, e eu tenho que escrever todos os resultados encontrados.

Para tanto cheguei ao seguinte:

$sobre = "empresa historia sobre nos";

    $array = array();
    $array[0] = "\$sobre";
    $array[1] = "\$eventos";
    $array[2] = "\$fale";
    $array[3] = "\$presenca";
    $array[4] = "\$principal";
    $array[5] = "\$aplicacao";
    $array[6] = "\$produtos";
    $array[7] = "\$qualidade";

    
    for($i = 0; $i<8; $i++)
        if(strpos(eval($array[$i]), $campo) !== false)
        {
                    // tratar...
                }
Como vocês podem ver acima, eu tenho uma (só de exemplo, no site mesmo são várias) variável, chamada $sobre. Aí eu tenho um vetor que contém todas as variáveis de cada página. E cada uma dessas variáveis contidas no vetor, possuem as respectivas palavras chave que são usadas na busca do site. O problema se dá na linha do IF. O que eu preciso fazer é usar, como VARIÁVEL, o valor que está dentro do $array[$i]. Ou seja, eu quero que depois do uso da função EVAL() eu tenha a seguinte linha (trocar a linha com a função eval() pela seguinte):
// linha "traduzida" pelo eval()
     if(strpos($sobre, $campo) !== false)
Como isso tá num FOR, a cada vez o IF seria diferente, pois a variável em questão do vetor seria diferente. Na próxima iteração a linha traduzida seria, de acordo com a ordem do vetor, a seguinte:
// linha "traduzida" pelo eval()
     if(strpos($eventos, $campo) !== false)

E assim por diante. Ou seja, o FOR é usado pra saber se o valor que o usuário digitou no campo de busca (no caso a variável $campo contém esse valor) está contido em algum lugar do site, de acordo com as palavras chave das variáveis. Entenderam o que eu quero fazer?

Só que aí eu obtenho o erro:

"Parse error: syntax error, unexpected $end in <CAMINHO>/busca.php(73) : eval()'d code on line 1"

A linha 73 se trata justamente da linha do IF, onde está a função EVAL(). Alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Cara tá mo confusão seu código se pretende usar palavras-chaves array não é melhor? Veja um exemplo abaixo ...

<?php

$campo = "palavra 1"; // $_GET["campo"]

$paginas = array();
$paginas["sobre"] = array("palavra 1", "palavra 2", "palavra 3");
$paginas["eventos"] = array("palavra 1", "palavra 2", "palavra 3");
$paginas["fale"] = array("palavra 1", "palavra 2", "palavra 3");
$paginas["presenca"] = array("palavra 1", "palavra 2", "palavra 3");
$paginas["principal"] = array("palavra 1", "palavra 2", "palavra 3");
$paginas["aplicacao"] = array("palavra 1", "palavra 2", "palavra 3");
$paginas["produtos"]  = array("palavra 1", "palavra 2", "palavra 3");
$paginas["qualidade"] = array("palavra 1", "palavra 2", "palavra 3");

foreach ($paginas as $local => $words) {
 if (in_array(strtolower($campo), $words)) {
  echo 'Encontrado na Página: <b>' . $local . '</b><br />';
 }
}

?>

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, valeu cara! Não tinha pensado dessa forma!

Mas tem uma coisa só agora:

Eu tenho um outro vetor:

$array2 = array();
    $array2[0] = "Sobre a Empresa";
    $array2[1] = "Eventos";
    $array2[2] = "Fale Conosco";
    $array2[3] = "Presen&ccedil;a Global";
    $array2[4] = "Principal";
    $array2[5] = "Aplica&ccedil;&atilde;o";
    $array2[6] = "Produtos";
    $array2[7] = "Qualidade";
Você pode ver que ele contém os nomes de cada página, que substituiria a variável $local usada por você ali em cima. Eu tenho que escrever o valor de acordo, ou seja, se ele achar no vetor $paginas (o meu código tá igual o que você colocou) no índice "sobre", ele tem que escrever
<a href='sobre.php'>$array2[0]</a>

Como eu faço pra pegar o nome do índice do vetor $paginas (pra usar no HREF da tag <a>) e como eu pego o índice certo do $array2 pra escrever o nome correspondente?

Link para o comentário
Compartilhar em outros sites

  • 0

Vithor,

você pode fazer dessa forma:

$array2 = array();
$array2["Sobre a Empresa"] = "sobre_a_empresa.php";
$array2["Eventos"] = "eventos.php";
$array2["Fale Conosco"] = "fole_conosco.php";
$array2["Presen&ccedil;a Global"] = "global.php";
$array2["Principal"] = "principal.php";
$array2["Aplica&ccedil;&atilde;o"] = "aplicaccedil.php";
$array2["Produtos"] = "produtos.php";
$array2["Qualidade"] = "qualidade.php";


foreach($array2 as $key => $value){
    echo "<a href='$value'>$key</a><br/>";
}

Link para o comentário
Compartilhar em outros sites

  • 0

No fim eu consegui, o resultado final tá um pouco diferente do que você falou (e claro que eu não botei as palavras-chave REAIS) mas enfim... Tá aí se alguém mais precisar:

$paginas = array();
    $paginas["sobre"] = array("palavra 1", "palavra 2", "palavra 3");
    $paginas["eventos"] = array("palavra 1", "palavra 2", "palavra 3");
    $paginas["fale"] = array("palavra 1", "palavra 2", "palavra 3");
    $paginas["presenca"] = array("palavra 1", "palavra 2", "palavra 3");
    $paginas["principal"] = array("palavra 1", "palavra 2", "palavra 3");
    $paginas["aplicacao"] = array("palavra 1", "palavra 2", "palavra 3");
    $paginas["produtos"]  = array("palavra 1", "palavra 2", "palavra 3");
    $paginas["qualidade"] = array("palavra 1", "palavra 2", "palavra 3");

    $array2 = array();
    $array2[0] = "Sobre a Empresa";
    $array2[1] = "Eventos";
    $array2[2] = "Fale Conosco";
    $array2[3] = "Presen&ccedil;a Global";
    $array2[4] = "Principal";
    $array2[5] = "Aplica&ccedil;&atilde;o";
    $array2[6] = "Produtos";
    $array2[7] = "Qualidade";

    $cont   = 0;
    $result = "resultados encontrados:<br /><br />";
    $i = 0;
    foreach ($paginas as $local => $words)
    {
        if (in_array($campo, $words))
        {
          $result .= "<img src='img/seta.png' style='margin-bottom : 3px;' /> <a href='./?navega=$local' class='gray' style='font-size:12px'>$array2[$i]</a><br />";
          $cont++;
        }
        $i++;
    }

    if($cont != 0)
        echo "<font class='black'>".$cont." ".$result;
    else
        echo "<font class='black'>N&atilde;o foram encontrados resultados.</font>";

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...