Naty_Za 0 Denunciar post Postado Janeiro 16, 2009 Oi gente... to com um probleminha... Tenho um site de receitas... e eu gostaria que qdo a pessoa estivesse visualizando uma receita, ex: 'Bolo de chocolate" em um outro canto do site, gostaria de exibir outras receitas que são relacionadas as essas palavras.. ou seja... apareceria nesse espaço, receitas relacionadas a bolo e a chocolate Bolo de morango Bolo de Fubá Torta de Chocolate Milk Shake de Chocolate Como faço isso??? Gostaria q aparecesse só o titulo mesmo, mas como vou linkar pra saber de qual receita está sendo exibida??? Me ajudem, por favor!!! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 16, 2009 E como que você exibe as receitas? está puxando de uma tabela SQL ? Eu faria um campo à mais como: "tipoDaReceita", esse seria um campo ID... onde eu relacionaria as receitas. Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 16, 2009 Sim... eu puxo de uma tabela... Tem os campos: id_receita titulo ingredientes preparo enviado_por email tempo rendimento url_imagem data_cadastro Eu imaginei q como é no campo titulo que ficam as palavras q tem q estar relacionadas, era só fazer alguma ligação... só que nãos sei como, de sempre exibir no site no as palavras dos titulos das outras receitas, q são iguais as palavras do titulo da receita q está em exibição.. =/ Mas ñ sei como fazer isso.. e também nem sei se a lógica é essa mesmo!! Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 16, 2009 Naty_Za, Tu podes utilizar uma consulta por palavras no mysql, por exemplo: $consulta = mysql_query("SELECT nome_do_campo FROM nome_da_tabela WHERE nome_do_campo_para_pesquisa LIKE '%$variavel%'"); $variavel corresponde à palavra ou às palavras que tu quer utilizar na tua busca, como chocolate e bolo. O melhor mesmo seria usar um OR junto.. pois aí retornariam mais resultados. Os símbolos % representam uma busca que contenha aquela palavra. Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 16, 2009 Então... mas acontece q são muuuuuitas receitas, e muuuitas palavras pra ficar escrevendo todas no código.. por isso q eu gostaria q já puxasse direto do título.... Por todas as palavras já estão cadastradas na tabela receitas do banco... se está mostrando a receita bolo de chocolate, gostaria q as receitas relacionadas q essa receita, aparecessem do lado.. sobre "Bolo e chocolate" qdo estiver exibindo uma receita de Tender com abacaxi, as receitas relacionadas q apareceriam do lado, seriam outras, sobre "Tender e Abacaxi" entende???? Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 16, 2009 Não entendi direito.. Se tu está mostrando uma receita com o título Tender com Abacaxi.. esse título está no banco de dados, certo? Se for assim, pra mostrar esse título na página, tu usa algo como <?php echo $Titulo ?>. Então tu vai utilizar essa mesma variável $Titulo para fazer uma consulta no campo Titulo da tua tabela do banco de dados e trazer as receitas que contenham no Titulo "Tender" e "Abacaxi". Se os títulos das receitas são escritos diretamente no HTML, fica difícil de montar uma consulta genérica. Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 16, 2009 Os titulos são puxados do banco de dados sim, ñ escrevo no HTML... eu postei a estrutra da tabela receita lá em cima... agora vou postar a página: receita.php <?php $id_receita = $_GET["id_receita"]; $consulta = mysql_query("SELECT * FROM receitas WHERE id_receita = '$id_receita' ORDER BY id_receita ASC") or die (mysql_error()); while($verifica = mysql_fetch_array($consulta)){ $id_receita = $verifica["id_receita"]; $data_cadastro = $verifica["data_cadastro"]; $titulo = $verifica["titulo"]; $ingredientes = $verifica["ingredientes"]; $preparo = $verifica["preparo"]; $enviado_por = $verifica["enviado_por"]; $email = $verifica["email"]; $url_imagem = $verifica["url_imagem"]; } ?> e coloco o <? echo "$titulo"; ?> na parte q eu quero q ele apareça... beleza.. até aí tá certo.. agora eu quero q no outro lado do site, apareçam as receitas relacionadas ao titulo desta q está em exibição... igual nesse site do mais você: http://receitas.maisvoce.globo.com/Receita...LARANJA,00.html Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 16, 2009 Certo.. tu usa a variável $titulo para mostrar o título da tua receita. Então ao lado, na posição onde tu quer que apareçam as receitas relacionadas, tu precisa de uma consulta relacionada com o título da receita que está sendo vista.. Então vai ser algo como: $consulta = mysql_query("SELECT titulo FROM receitas WHERE titulo LIKE '%$titulo%' ORDER BY titulo"); $linhas = mysql_num_rows($consulta); for($i = 0; $i < $linhas; $i++) { $receitas_relacionadas = mysql_result($consulta, $i, "titulo"); } Dessa forma, os títulos das receitas que conterem palavras semelhantes as da receita que está sendo vista, aparecerão ao lado, onde tu quiser. Pra otimizar, assim como no site do Mai Você, utilize links interligados para aquelas receitas.. Algo como: <a href='visualiza_receita.php?titulo_receita=<? echo $receitas_relacionadas?>'> $receitas relacionadas </a> E na página onde irá abrir essa receita relacionada, faça a consulta pelo seu título em vez de pelo deu id. Ou, se preferir, quando for consultar o seu título para jogar na tela do lado, consulte tbm o id de cada uma.. assim tu usa um link com id para identificar cada receita. Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 16, 2009 hummmm... legal.... o código ficaria assim?? pq ñ está funcionando.. =/ <? $consulta = mysql_query("SELECT titulo FROM receitas WHERE titulo LIKE '%$titulo%' ORDER BY titulo") or die (mysql_error()); $linhas = mysql_num_rows($consulta); for($i = 0; $i < $linhas; $i++) { $receitas_relacionadas = mysql_result($consulta, $i, "titulo"); } while($verifica = mysql_fetch_array($consulta)){ $id = $verifica["id"]; $titulo = $verifica["titulo"]; $palavras = $verifica["palavras"]; $receitas_relacionadas = $verifica["receitas_relacionadas"]; echo"$receitas_relacionadas"; } ?> vamos fazer aparecer ao lado primeiro, pra depois pensar nos links, senão vou me embananar toda... rs Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 16, 2009 Se tu quer consultar vários dados, precisa mudar a consulta para: $consulta = mysql_query("SELECT * FROM receitas WHERE ... titulo LIKE '%$titulo%' ORDER BY titulo") or die (mysql_error()); Mas tem um pequeno problema.. Do jeito como está, a consulta seria feita da seguinte forma (interpretando a query): SELECT * FROM receitas WHERE tiulo LIKE '%Tender com Abacaxi%' ORDER BY titulo.. Mas nenhuma outra receita ver ter no seu título a frase "Tender com Abacaxi". Então tu poderia 'quebrar' a variável $tiulo.. algo como: $quebra_titulo = explode(" ", $titulo); // Quebra a variável $título a cada espaço Depois tu pega só as palavras importantes daquela variável.. ou seja, a variável era "Tender com Abacaxi".. mas te interessa o "Tender" e o "Abacaxi" somente.. pega dessa forma: $parte1 = $quebra_titulo[0]; // Corresponde à primeira parte da string, nesse caso: Tender $parte2 = $quebra_titulo[2]; // Corresponde à terceira parte da string, nessa caso: Abacaxi Assim, tu otimiza a tua query para: $consulta = mysql_query(SELECT * FROM receitas WHERE titulo LIKE '%$parte1%' OR titulo LIKE '%$parte2%'); Outra coisa... se tu usares o "while($verifica = mysql_fetch_array($consulta))" não precisa usar o for($i = 0; $i < $linhas; $i++).. Aliás, o While é melhor mesmo.. Então, fica assim: <? // Uma variável com o título da receita atual $titulo // Uma quebra desse titulo $quebra_titulo = explode(" ", $titulo); // Quebra a variável $título a cada espaço // Pegando as partes importantes $parte1 = $quebra_titulo[0]; // Corresponde à primeira parte da string, nesse caso: Tender $parte2 = $quebra_titulo[2]; // Corresponde à terceira parte da string, nessa caso: Abacaxi // Fazendo a consulta $consulta = mysql_query(SELECT * FROM receitas WHERE titulo LIKE '%$parte1%' OR titulo LIKE '%$parte2%'); // Pegando os resultados while($verifica = mysql_fetch_array($consulta)){ $id_relacionado = $verifica["id"]; $titulo_relacionado = $verifica["titulo"]; $palavras_relacionado = $verifica["palavras"]; echo "$titulo_relacionado"; // Coloquei echo na variável $titulo_relacionado.. é o título das receitas que retornaram na consulta.. } Deu pra entender? Qualquer dúvida, estamos aí.. Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Janeiro 17, 2009 Sugestão, nem sempre a primeira e a terceira palavra vão ser exatamente às importantes! Às vezes pode ter a Torta nãoseidasquantas que vai ter 2 palavras só, e o Pastel nãoseiquem de nãoseioque, que vai ter 4 palavras. Pra evitar problemas com isso, o interessante seria pegar o título da receita já quebrado, e filtrar as palavras que não interessam, vou fazer isso com expressões regulares: $partes = explode(' ', $titulo); $filtra_palavras = 'de|com|a|o|do|da|ao'; //aqui vão as palavras que não lhe interessam nos títulos, separados por | $partes_filtradas = array(); foreach($partes as $filtrar) { if(!preg_match("/$filtra_palavras/", $filtrar)) { array_push($partes_filtradas, $filtrar); } } Na hora de criar a query, você pode fazer um loop para montar ela também: if(count($partes_filtradas) != 0) { //é interessante ver se não vai dar problemas antes de fazer as queries $query = "SELECT * FROM receitas WHERE titulo LIKE '%$partes_filtradas[0]%'"; for($x = 1; $x < count($partes_filtradas); $x++) { //faço um for normal para poder começar desde o segundo elemento da array e poder adicionar OR direto na query $query .= " OR titulo LIKE '%$partes_filtradas[$x]%'"; } $relacionadas = mysql_query($query); while(($relacionada = mysql_fetch_array($relacionadas)) !== NULL) { //...etc... } } Você pode fazer a filtragem direto nesse segundo loop se quiser otimizar um pouco seu script, mas em nome da simplicidade e entendimento do código farei assim ok? Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 19, 2009 Oi gente.... entendi a lógica q fizeram.. mas ainda ñ está dando certo... no 1º jeito, está dando erro nessa linha: $quebra_titulo = explode(" ", $titulo); e no 2º. nesse aqui: $partes = explode(' ', $titulo); no mesmo lugar está dando erro.. pq será?? =( Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 19, 2009 Certifique-se de que existe a variável $titulo. E se persistir o erro, poste a mensagem aqui. Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 19, 2009 existe sim... o erro q dá é assim: Parse error: syntax error, unexpected T_VARIABLE in /home/guiadoturismoelazer/public_html/culinaria/06/banners_receita.php on line 38 Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 20, 2009 Se tu puderes postar algumas linhas do teu código, podemos dar uma olhadinha.. Às vezes pode ser erro em uma linha anterior, até um ; faltando.. Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 20, 2009 Então.. olha... fiz dos dois jeitos que me passaram: <? // Uma variável com o título da receita atual $titulo // Uma quebra desse titulo $quebra_titulo = explode(" ", $titulo); // Quebra a variável $título a cada espaço // Pegando as partes importantes $parte1 = $quebra_titulo[0]; // Corresponde à primeira parte da string, nesse caso: Tender $parte2 = $quebra_titulo[2]; // Corresponde à terceira parte da string, nessa caso: Abacaxi // Fazendo a consulta $consulta = mysql_query(SELECT * FROM receitas WHERE titulo LIKE '%$parte1%' OR titulo LIKE '%$parte2%'); // Pegando os resultados while($verifica = mysql_fetch_array($consulta)){ $id_relacionado = $verifica["id"]; $titulo_relacionado = $verifica["titulo"]; $palavras_relacionado = $verifica["palavras"]; echo "$titulo_relacionado"; // Coloquei echo na variável $titulo_relacionado.. é o título das receitas que retornaram na consulta.. } ?> <? $titulo $partes = explode(' ', $titulo); $filtra_palavras = 'de|com|a|o|do|da|ao'; //aqui vão as palavras que não lhe interessam nos títulos, separados por | $partes_filtradas = array(); foreach($partes as $filtrar) { if(!preg_match("/$filtra_palavras/", $filtrar)) { array_push($partes_filtradas, $filtrar); } } if(count($partes_filtradas) != 0) { //é interessante ver se não vai dar problemas antes de fazer as queries $query = "SELECT * FROM receitas WHERE titulo LIKE '%$partes_filtradas[0]%'"; for($x = 1; $x < count($partes_filtradas); $x++) { //faço um for normal para poder começar desde o segundo elemento da array e poder adicionar OR direto na query $query .= " OR titulo LIKE '%$partes_filtradas[$x]%'"; } $relacionadas = mysql_query($query); while(($relacionada = mysql_fetch_array($relacionadas)) !== NULL) { echo "$relacionada"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 20, 2009 A variável $titulo será aquela que tu usa na tua página para dar o título da receita atual que está sendo visualizada, entende? Dessa forma como nós descrevemos o código, a variável $titulo não está recebendo valor algum, por isso tu tens um erro. A nível de exemplo, atribua àquela variável título no código que foi passado qualquer frase ou palavra. Ela será seccionada a cada espaço. Ou seja, se for uma frase como: Bolo de Chocolate, tu terás: $1ªparte = Bolo; $2ªparte = de; $3ªparte = Chocolate; Se for apena uma palavra como: Brigadeirão, ficará: $1ªparte = Brigadeirão; ---------------------------------------------------------------------------------- O código do José Enésio utiliza expressões regulares que são mais indicadas mesmo para esse caso, então eu optaria por aquele código. Adapta para a tua ocasião. Mas não esqueça, $titulo deverá ser o seu título atual da receita, pois só assim a relação entre a receita atual e as outras receitas do banco poderá ser estabelecida. Compartilhar este post Link para o post Compartilhar em outros sites
Naty_Za 0 Denunciar post Postado Janeiro 20, 2009 não consigo fazer.... http://forum.imasters.com.br/public/style_emoticons/default/no.gif continua dando erro: <?php $id_receita = $_GET["id_receita"]; $consulta = mysql_query("SELECT * FROM receitas WHERE id_receita = '$id_receita' ORDER BY id_receita ASC") or die (mysql_error()); while($verifica = mysql_fetch_array($consulta)){ $id_receita = $verifica["id_receita"]; $titulo = $verifica["titulo"]; // Uma quebra desse titulo $partes = explode(' ', $titulo); $filtra_palavras = 'de|com|a|o|do|da|ao'; //aqui vão as palavras que não lhe interessam nos títulos, separados por | $partes_filtradas = array(); foreach($partes as $filtrar) { if(!preg_match("/$filtra_palavras/", $filtrar)) { array_push($partes_filtradas, $filtrar); } } if(count($partes_filtradas) != 0) { //é interessante ver se não vai dar problemas antes de fazer as queries $query = "SELECT * FROM receitas WHERE titulo LIKE '%$partes_filtradas[0]%'"; for($x = 1; $x < count($partes_filtradas); $x++) { //faço um for normal para poder começar desde o segundo elemento da array e poder adicionar OR direto na query $query .= " OR titulo LIKE '%$partes_filtradas[$x]%'"; } $relacionadas = mysql_query($query); while(($relacionada = mysql_fetch_array($relacionadas)) !== NULL) { echo "$relacionadas"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 20, 2009 não consigo fazer.... http://forum.imasters.com.br/public/style_emoticons/default/no.gif continua dando erro: <?php $id_receita = $_GET["id_receita"]; $consulta = mysql_query("SELECT * FROM receitas WHERE id_receita = '$id_receita' ORDER BY id_receita ASC") or die (mysql_error()); while($verifica = mysql_fetch_array($consulta)){ $id_receita = $verifica["id_receita"]; $titulo = $verifica["titulo"]; // Uma quebra desse titulo $partes = explode(' ', $titulo); $filtra_palavras = 'de|com|a|o|do|da|ao'; //aqui vão as palavras que não lhe interessam nos títulos, separados por | $partes_filtradas = array(); foreach($partes as $filtrar) { if(!preg_match("/$filtra_palavras/", $filtrar)) { array_push($partes_filtradas, $filtrar); } } if(count($partes_filtradas) != 0) { //é interessante ver se não vai dar problemas antes de fazer as queries $query = "SELECT * FROM receitas WHERE titulo LIKE '%$partes_filtradas[0]%'"; for($x = 1; $x < count($partes_filtradas); $x++) { //faço um for normal para poder começar desde o segundo elemento da array e poder adicionar OR direto na query $query .= " OR titulo LIKE '%$partes_filtradas[$x]%'"; } $relacionadas = mysql_query($query); while(($relacionada = mysql_fetch_array($relacionadas)) !== NULL) { echo "$relacionadas"; } ?> Manda qual o erro que está acontecendo.. Mas antes, modifique isto: if(!preg_match("/$filtra_palavras/", $filtrar)) para if(!preg_match(/"$filtra_palavras/", $filtrar)) e isto: while(($relacionada = mysql_fetch_array($relacionadas)) !== NULL) para while(($relacionadas = mysql_fetch_array($relacionadas)) !== NULL) Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Janeiro 20, 2009 if(!preg_match("/$filtra_palavras/", $filtrar)) para if(!preg_match(/"$filtra_palavras/", $filtrar)) Não achei diferença no que você pediu senão a parte que eu sublinhei. Vai dar erro, a barra deve estar dentro da string. Ao meu ver, continua como está while(($relacionada = mysql_fetch_array($relacionadas)) !== NULL) para while(($relacionadas = mysql_fetch_array($relacionadas)) !== NULL) Só pegou o lugar errado para renomear. Dentro do while há um echo "$relacionadas"; que deve ser trocado por echo $relacionada["titulo"]; $relacionadas já é o nome do resource retornado pelo SELECT da query. Se mudar ali no loop vai embolar tudo. Compartilhar este post Link para o post Compartilhar em outros sites