Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ivan Lenon

Post com categorias

Recommended Posts

Galera seguinte:

 

Quero criar um sistema de post onde ao cadastrar um novo post o usuário terá um campo chamado categorias, onde poderá colocar varias categorias separadas por virgula, e o que eu gostaria de saber é como que eu faço o código PHP para salvar toda essa informação ?
Pois também precisarei usá-las no blog para separar post por categorias, como os blogs atualmente fazem...

 

De já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ivan Lenon,

 

Para separar as categorias que você adicionou, utilize uma função do PHP chamada explode.

 

http://br1.php.net/manual/en/function.explode.php

 

Lembrando que essa função é uma array. Tudo que você "explodir", cada bloco de strings será transformada em uma array, começando por: array[0].

 

Espero ter ajudado. ( '-' )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui está meu código amigo...

<?php
 
	include "../conn/conn.php";

	mysql_query("SET NAMES 'utf8';");
	
    $titulo = $_POST['titulo'];
	$foto1 = $_FILES['img_destaque'];
	$foto2 = $_FILES['img_min'];
	$string = $_POST['categorias'];
	$resumo = $_POST['resumo'];
	$texto = $_POST['texto'];
	$destaque = $_POST['destaque'];
	$status = $_POST['status'];
	$data = date('Y-m-d H:i:s');

	
	$tags = array();
	// explode — Divide uma string em strings
	// pelo delimitador definido (virgula)
	$tags = explode(',', $string);
	
	//Pega a extencao
	$arquivo1 = $_FILES["img_destaque"]["name"];
	$ext1 = explode(".", $arquivo1);
	$extensao_arquivo1 = $ext1[1];
	
	$arquivo2 = $_FILES["img_min"]["name"];
	$ext2 = explode(".", $arquivo2);
	$extensao_arquivo2 = $ext2[1];
	
	//Cria um nome unico
	$nome_foto1 = md5(uniqid(time())) . "." . $ext1[1];
	$nome_foto2 = md5(uniqid(time())) . "." . $ext2[1];
	
	
	//Cria uma string com o caminho
	$caminho_foto1 = "imagens/destaque/" . $nome_foto1;
	$caminho_foto2 = "imagens/min/" . $nome_foto2;
	
	
	//Move para a pasta destino
	move_uploaded_file($foto1["tmp_name"], $caminho_foto1);
	move_uploaded_file($foto2["tmp_name"], $caminho_foto2);
	
	$sql = mysql_query("INSERT INTO noticias (titulo, img_destaque, img_min, resumo, texto, destaque, status, data) VALUES('$titulo', '$caminho_foto1', '$caminho_foto2', '$resumo', '$texto', '$destaque', '$status', '$data')");
	
	$categorias = $tags;
	$number_categorias = count($categorias);
	for ($i=0; $i<$number_categorias; $i++)
	{
	$sql = mysql_query("INSERT INTO categorias (categorias) VALUES('$categorias[$i]')");
	}
		
	if ($sql){
	echo "Post cadastrado com sucesso.";
	}else{
	mysql_error();
	}
	 
	 
?>

Como você pode verificar as cetegoras estão sendo salvas na tabela categorias, já o restante das informações estão sendo salvas na tabela noticias... O ploblema é o seguinte como eu interligo ambas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ivan Lenon,

 

Dentro da tabela noticias e categorias, crie um campo chamado, por exemplo, numNotCat e outro chamado numCat.

 

E que comece a lógica... ¬¬

 

Caso você poste algo, e dentro desse post haver categorias, o campo numNotCat da tabela noticias e numNotCat da tabela categorias haverá 1 como número, já no campo numCat da tabela categorias, haverá uma contagem crescente com o sinal de incremento (++). isso deverá ser utilizado dentro da estrutura de repetição for. Crie uma variável qualquer fora do for com valor = 0, já dentro do for você incrementa esta variável.

 

O que acontecerá?

 

Estará salvo em seu banco no campo numNotCat da tabela noticias e da tabela categorias, apenas o valor 1, e no campo numCat da tabela categorias haverá uma certa quantidade de valores numéricos dependendo da quantidade de categorias que foi adicionada ao campo categorias do formulário. No numNotCat das 2 tabelas você fará a comparação.

 

Compreende? :)

 

Espero ter ajudado. ( '-' )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha sou bem iniciante, e compreendi mais ou menos o que você quis dizer, porém não saberia montar tudo isso no codigo, como eu teria que fazer para montar isso tudo no codigo ?

E não teria problema quado eu enfim procurasse noticias de uma determinada categoria ??

 

Obrigado e um grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha sou bem iniciante, e compreendi mais ou menos o que você quis dizer, porém não saberia montar tudo isso no codigo, como eu teria que fazer para montar isso tudo no codigo ?

 

E não teria problema quado eu enfim procurasse noticias de uma determinada categoria ??

 

Obrigado e um grande abraço!

 

Olá Ivan Lenon,

 

É muito complicado essa situação DE LÓGICA com SQL e PHP, às vezes fica até confuso. Eu respondi o que eu pude por pura lógica minha. Eu sabia que ainda faltava alguma coisa, mas não implementei porque fiquei confuso. '-'

 

Mas bem, se não é para montar isso no código que demoraria bastante, sabe utilizar o MySQL Workbench?

 

http://www.mysql.com/products/workbench/

 

Olha esse tutorial se possível.

 

http://www.devmedia.com.br/introducao-ao-novo-mysql-workbench/25939

 

Lembrando que você pode fazer um Diagrama de Banco de Dados por este programa, exportar o Script e depois introduzir no PhpMyAdmin com a importação do arquivo .sql.

 

Se eu consegui ajudar um pouco, vai ser um alívio. (^-^)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puts o pior é que o meu problema maior nem é na criação do BD cara e sim no código PHP, não sei como criar um código para salvar nessas duas tabelas!

 

É só utilizar o INSERT para cada tabela. '-' Com determinadas variáveis a qual você armazenou do seu formulário (com o $_POST, ou talvez outra variável global que tenha utilizado), você adicionará do comando SQL. O_O Entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou dar uma sugestão de lógica..

 

Crie uma tabela chamada Posts e outra Categorias

 

Estrutura de Posts: ID | Titulo | Conteudo | CategoriasID | Autor | DataDeCriação (o resto fica a seu critério)

Estrutura de Categorias: ID | Nome

 

Então você poderia por exemplo criar um post com os seguintes dados:

1 | Meu Teste | Isso é um teste ._. | 1;3 | Admin | 2014

 

e na hora de mostrar os dados como exemplo você ia mostrar o conteudo da tabela categorias e a categoria com ID 1

"SELECT * FROM Categorias WHERE 'ID' = 1";

//blablabla código

echo $tabelaCategorias[0]["Nome"]; // Minha Categoria testeID1

echo $tabelaCategorias[2]["Nome"]; // Minha Categoria testeID3

 

 

Em vez de categorias não seria tags? '-'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui está meu código amigo...

 

<?php
 
	include "../conn/conn.php";

	mysql_query("SET NAMES 'utf8';");
	
    $titulo = $_POST['titulo'];
	$foto1 = $_FILES['img_destaque'];
	$foto2 = $_FILES['img_min'];
	$string = $_POST['categorias'];
	$resumo = $_POST['resumo'];
	$texto = $_POST['texto'];
	$destaque = $_POST['destaque'];
	$status = $_POST['status'];
	$data = date('Y-m-d H:i:s');

	
	$tags = array();
	// explode — Divide uma string em strings
	// pelo delimitador definido (virgula)
	$tags = explode(',', $string);
	
	//Pega a extencao
	$arquivo1 = $_FILES["img_destaque"]["name"];
	$ext1 = explode(".", $arquivo1);
	$extensao_arquivo1 = $ext1[1];
	
	$arquivo2 = $_FILES["img_min"]["name"];
	$ext2 = explode(".", $arquivo2);
	$extensao_arquivo2 = $ext2[1];
	
	//Cria um nome unico
	$nome_foto1 = md5(uniqid(time())) . "." . $ext1[1];
	$nome_foto2 = md5(uniqid(time())) . "." . $ext2[1];
	
	
	//Cria uma string com o caminho
	$caminho_foto1 = "imagens/destaque/" . $nome_foto1;
	$caminho_foto2 = "imagens/min/" . $nome_foto2;
	
	
	//Move para a pasta destino
	move_uploaded_file($foto1["tmp_name"], $caminho_foto1);
	move_uploaded_file($foto2["tmp_name"], $caminho_foto2);
	
	$sql = mysql_query("INSERT INTO noticias (titulo, img_destaque, img_min, resumo, texto, destaque, status, data) VALUES('$titulo', '$caminho_foto1', '$caminho_foto2', '$resumo', '$texto', '$destaque', '$status', '$data')");
	
	$categorias = $tags;
	$number_categorias = count($categorias);
	for ($i=0; $i<$number_categorias; $i++)
	{
	$sql = mysql_query("INSERT INTO categorias (categorias) VALUES('$categorias[$i]')");
	}
		
	if ($sql){
	echo "Post cadastrado com sucesso.";
	}else{
	mysql_error();
	}
	 
	 
?>

Como você pode verificar as cetegoras estão sendo salvas na tabela categorias, já o restante das informações estão sendo salvas na tabela noticias... O ploblema é o seguinte como eu interligo ambas?

Crie uma tabela intermediaria!

 

CategoriasXPosts

id | categoria_id | post_id

 

Pra você salvar, simplesmente faça outra query inserindo o nesta nova tabela.

 

Tranquilo pra você?

 

uma obs: Começe a ver o PDO. mysql_query está sendo descontinuada nas versões mais recentes do php.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.