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

Cannot use a scalar value


vini_loock

Pergunta

Olá.

Eu estou fazendo um esquema de busca, e me deparei com um problema.

Em meu banco de dados eu tenho um campo palavras, que nada mais é do que as palavras-chave, que são usadas pelo google e agora eu estou querendo usa-las em meu sistema de busca.

Se a pessoa digitar sua busca na ordem exata e separada em virgulas como está em meu banco de dados ela pode achar algum resultado, caso contrário não achará nada.

Então eu separei as palavras com um explode e depois com um laço for, fiz minha query, palavra por palavra.

Mas ele me retorna esse erro:

Warning: Cannot use a scalar value as an array in C:\wamp\www\portal\vr\buscar.php on line 60

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\portal\vr\buscar.php on line 61

A parte do código é esta:

$separadas = explode(" ", $palavras);
        $num = sizeof($separadas);
        for($i = 0; $i < $num; $i++)
        $query[$i] = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$separadas[$i]."%'");
        if(mysql_num_rows($query[$i]) > 0){
            while($var = mysql_fetch_array($query[$i])){
                    echo '<div id="flash665"><embed src="upload/'.$var[img].'" width="665" height="105"></embed></div>';    
            }
        }else{
            echo '<h1>Exibindo resultados para '.$palavra.'</h1><div id="linha"><center><p>Não foi encontrado nenhum resultado para <b>'.$palavra.'</b></p></center></div>';    
        }
A linha 60 é:
$query[$i] = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$separadas[$i]."%'");

Se alguém responder, ficarei feliz em saber que não sou o único nerd em casa em pleno feriado xD

Abraços.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Parceiro,

Acredito que está faltando você devinir as chaves { } da estrutura de controle FOR.

$separadas = explode(" ", $palavras);
$num = sizeof($separadas);
for($i = 0; $i < $num; $i++)
{
    $query[$i] = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$separadas[$i]."%'");
    if(mysql_num_rows($query[$i]) > 0)
    {
        while($var = mysql_fetch_array($query[$i]))
        {
           echo '<div id="flash665"><embed src="upload/'.$var[img].'" width="665" height="105"></embed></div>';    
        }
     }
     else
     {
         echo '<h1>Exibindo resultados para '.$palavra.'</h1><div id="linha"><center><p>Não foi encontrado nenhum resultado para <b>'.$palavra.'</b></p></center></div>';    
     }
}

Faça um teste,

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Estranho... aqui o código funcionou. Adaptei para isto:

<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

mysql_connect('x', 'x', 'x');
mysql_select_db('x');

$palavras = "Teste testando o teste";
$img = '0';

$separadas = explode(" ", $palavras);
$num = sizeof($separadas);
for($i = 0; $i < $num; $i++)
{
    $query[$i] = mysql_query("SELECT * FROM x WHERE y LIKE '%".$separadas[$i]."%'");
    if(mysql_num_rows($query[$i]) > 0)
    {
        while($var = mysql_fetch_array($query[$i]))
        {
           echo '<div id="flash665"><embed src="upload/'.$var[$img].'" width="665" height="105"></embed></div>';    
        }
     }
     else
     {
         echo '<h1>Exibindo resultados para '.$separadas[$i].'</h1><div id="linha"><center><p>Não foi encontrado nenhum resultado para <b>'.$separadas[$i].'</b></p></center></div>';
     }
}

?>

Link para o comentário
Compartilhar em outros sites

  • 0

Vix.. também to achando estranho.

Tenho uma tabela no mysql chamada anuncios e nela tenho um campo chamado palavras.

Nessa tabela eu tenho um registro e nesse registro, no campo palavras, está +/- assim:

barbearias, curitiba, coisa, de macho

Dai se eu pesquisar apenas barbearias, ele acha normalmente, porque ele passa logo na primeira parte do código, mas se eu digitar barbearias curitiba, ele me retorna o erro. E o mais estranho, é que ele me retorna dois erro(isso eu sei que pelo for) mas ele retorna um erro para cada palavra, e me mostra as palavras certinho observe:

Warning: Cannot use a scalar value as an array in /home/portalvr/public_html/buscar.php on line 63

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/portalvr/public_html/buscar.php on line 64

Não foi encontrado nenhum resultado para barbearias

Warning: Cannot use a scalar value as an array in /home/portalvr/public_html/buscar.php on line 63

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/portalvr/public_html/buscar.php on line 64

Não foi encontrado nenhum resultado para curitiba

Dai eu me pergunto, se ele é capaz de mostrar a palavra corretamente no erro, porque ele da esse erro?

Para entender melhor, a parte em que eu disse, ele passa na primeira parte do código:

Funciona assim:

A primeira parte verifica com as duas palavras juntas(barbearias curitiba)e se não me retornar nada, ele passa nessa parte onde está dando o erro.

Ai vai o cód todo:

<?php
    $palavra = $_GET['palavra'];
    
    echo '<h1> Exibindo resultados para '.$palavra.'</h1>';
    
    $query = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$palavra."%'");
    
    if(mysql_num_rows($query) > 0){
        while($var = mysql_fetch_array($query)){
            echo '<div id="flash665"><embed src="upload/'.$var[img].'" width="665" height="105"></embed></div>';    
        }
    }else{
        
        $palavras = $palavra;
        
        $separadas = explode(" ", $palavras);
        $num = sizeof($separadas);
        for($i = 0; $i < $num; $i++)
        {
            $query[$i] = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$separadas[$i]."%'");
            if(mysql_num_rows($query[$i]) > 0)
            {
                while($var = mysql_fetch_array($query[$i]))
                {
                   echo '<div id="flash665"><embed src="upload/'.$var[img].'" width="665" height="105"></embed></div>';    
                }
             }
             else
             {
                 echo '<div id="linha"><center><p>Não foi encontrado nenhum resultado para <b>'.$separadas[$i].'</b></p></center></div>';
             }
        }

    }
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Hm... acho que deu certo.

O problema é com a variável $query, quando você executa a query e joga o resultado nela. Creio que como a variável $query não é um array, não é permitido você tentar utilizá-la como um array sem daclará-la como array antes se ela já estiver guardando um valor normal. Ou você a declara como um array antes do for:

$query = array();
for($i = 0; $i < $num; $i++)
{
      $query[$i] = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$separadas[$i]."%'");
Ou então simplesmente utilize outro nome para a variável:
for($i = 0; $i < $num; $i++)
        {
            $rs[$i] = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$separadas[$i]."%'");
            if(mysql_num_rows($rs[$i]) > 0)
            {
                while($var = mysql_fetch_array($rs[$i]))

Teste aí e vê se funciona!

Abraços

Editado por Stoma
Link para o comentário
Compartilhar em outros sites

  • 0

wow! essa eu nunca iria pensar!

Funcionou quase que perfeito, só que como este registro tinha as 2 palavras que eu busquei cadastradas, ele exibia um resultado para cada palavra, dai fiz assim:

$palavras = $palavra;
        
        $separadas = explode(" ", $palavras);
        $num = sizeof($separadas);
        $rs = array();
        for($i = 0; $i < $num; $i++)
        {
            $rs[$i] = mysql_query("SELECT * FROM anuncios WHERE palavras LIKE '%".$separadas[$i]."%'");
            if(mysql_num_rows($rs[$i]) > 0){
                while($var = mysql_fetch_array($rs[$i])){
                    $id = array();
                    if(!in_array($var['id'], $id)){
                        echo '<div id="flash665"><embed src="upload/'.$var[img].'" width="665" height="105"></embed></div>';  
                        $num = count($id);
                        if($num == 0){
                            $id[0] = $var['id'];    
                        }else{
                            $num++;
                            $id[$num] = $var['id'];
                        }
                    }
                }
            }else{
                echo '<div id="linha"><center><p>Não foi encontrado nenhum resultado para <b>'.$palavra.'</b></p></center></div>';
            }
        }

Vlw ai galera.

Uhu!! já posso postar outra dúvida hsauha.

To devendo mais essa.

Abraços

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