Ir para conteúdo

POWERED BY:

Arquivado

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

maurohpg

Inserir imagem em 2 tabelas do bd ao mesmo tempo

Recommended Posts

Seguinte nunca fiz isso, não manjo muito de php, gostria de saber se posso inserir imagens em 2 tabelas ao mesmo tempo ou seja tenho uma tabela editar_fotos e outra editar_noticias, queria que ao inserir em uma inserisse em outra também, modifiquei meu código para inserir nas duas mas não está dando certo o que posso estar fazendo de errado?

 

<?php

include_once("../includes/editar.inc.php");
include_once("../includes/conexao.inc.php");
include_once("../includes/bd_forms.class.php");
include("../fckeditor/fckeditor.php") ;

$ed_secao = "Adicionar notícia";
$ed_aviso_01 = "Sua notícia foi adicionada com sucesso!";
$ed_aviso_02 = "Houve um erro na inclusão da notícia, tente novamente.";
$ed_pasta = "editar_noticias";
// Trocar manualmente o nome da tabela em inserirImagem

if (@$_POST['enviar'] != "")
{

	$bdform = new BD_Forms($conexao, "$ed_pasta", $_POST);
	if ($bdform->inserir_dados()) {
		
		
		// salva fotos
		foreach ($_FILES as $arquivos) {
			
			// pega extensão do arquivo
			if (!empty($arquivos['name'])) {
				$ext = substr($arquivos['name'], strlen($arquivos['name'])-3, 3);
				$hashArquivo = md5($arquivos['name'] . $bdform->id);
				$novoNomeArquivo = $hashArquivo . "." . $ext;
				
				inserirImagem($novoNomeArquivo, $bdform->id, $conexao);
				inserirImagem2($novoNomeArquivo, $bdform->id, $conexao);
				
				move_uploaded_file($arquivos['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . "/editar/arquivos/editar_fotos/" . $novoNomeArquivo);
			}
		}
		
		
		
		session_start();
		
		$_SESSION['msg'] = "<table width='100%' border='0' cellspacing='0' cellpadding='2' class='menu'><tr><td><p><b><strong>$ed_aviso_01</strong></b></td></tr></table>";
		header("location:listar.php");

	}  else {
		$msgErro = "<table width='100%' border='0' cellspacing='0' cellpadding='2' class='menu'><tr><td><p><b><strong>$ed_aviso_02</strong></b></td></tr></table>";
 	} 
}

function inserirImagem($nome, $idAlbum, $conexao) {
	$sql1 = "select nome from editar_fotos where nome = '" . $nome ."'";
	if (mysql_num_rows(mysql_query($sql1, $conexao)) < 1) {
		$sql = "insert into editar_fotos (fk_album, nome, secao) values (" . $idAlbum . ", '" . $nome . "', 'noticias')";
		mysql_query($sql, $conexao);
	}
}

function inserirImagem2($fotohome, $conexao) {
	$sql2 = "select fotohome from editar_noticias where fotohome = '" . $fotohome ."'";
	if (mysql_num_rows(mysql_query($sql2, $conexao)) < 1) {
		$sql = "insert into editar_noticias (fotohome) values (" . $fotohome . ")";
		mysql_query($sql, $conexao);
	}
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na chamada da função inserirImagem2 você está passando 3 parâmetros quando na realidade

a mesma só recebe 2 parâmetros.

 

Corrija a chamada da função passando os parâmetros corretos ou adicione um parâmetros a função.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo mauro aconselho você a fazer o curso de PHP disponível no fórum do imasters

para entender pelomenos o básico da coisa antes de tentar desenvolver.

 

Você tem de retirar o parâmetro correto ou adicionar o parâmetro correto a função.

 

Tente chamar a função da seguinte forma:

 

inserirImagem2($novoNomeArquivo, $conexao);

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi desculpe a ignorância depois que eu fui ver a besteira que eu estava querendo fazer, na verdade a minha dúvida era de querer não inserir em 2 tabelas e sim por exemplo o $nome que está gravando da tabela editar_fotos também gravasse na tabela editar_noticias mais somente na coluna fotohome, dessa forma que eu estava fazendo anteriormente eu consegui arrumar mais ele duplica o registro me expressei errado, o que eu quero é ele pegue o nome da imagem que vai para editar_fotos e grave somente a coluna que puxa a foto, sem duplicar o registro, eu consigo isso fazendo 2 selects e 2 insert into na mesma função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você envia mais de um arquivo por Insert?

 

Se não envia o foreach ($_FILES as $arquivos) esta errado.

Ai seria ele a estar causando a duplicidade.

 

Explique melhor a duplicidade de registros para que possamos

ajudá-lo.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, insiro um arquivo só, ele está indo para a tabela editar_fotos na coluna nome, ao inserir esse arquivo na coluna nome da coluna editar_fotos eu gostaria de pegar esse mesmo arquivo e salvar também na tabela editar_noticias na coluna fotohome, acho que teria que fazer um select duplo e um insert into tb.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom não tem sentido estar duplicando. Continuo sem entender a duplicidade.

 

Se você envia um unico arquivo não tem de ter foreach pra tratar o arquivo enviado.

 

supondo que seu input seja <input name="arquivo">

ao inves de $arquivos['name'] seria $_FILES['arquivo']['name'];

E não teriamos o foreach.

 

Tem de funcionar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionando está 100% mais, mais eu preciso inserir nessa outra tabela e nessa coluna pois preciso puxar ela na home de minha página, por que as tabelas estão indexadas e se não fizer isso na home de meu site eu consigo puxar o tçitulo de uma noticia e não consigo puxar a foto ja que na home eu não puxo por id.

 

Ai na minha home hoje eu tenho:

 

<?php

$not = mysql_query("select * from editar_noticias where id order by id desc limit 0, 5", $conexao);
$rs = new RecordSet($conexao, $not, 1, 1);
$reg = $rs->registros;

$sql = "select * from editar_fotos where secao='noticias' and fk_album=" . $_GET['id'];

function fotoTituloAlbum($idAlbum, $conexao) {
	$sql = "select nome from editar_fotos where secao='noticias' and fk_album = " . $idAlbum . " order by id";
	$c = mysql_query($sql, $conexao);
	$r = mysql_fetch_array($c);
	
	return $r['nome'];
}

?>

Mas ai eu não estou conseguindo puxar essa imagem fiz de tudo resivei o código e mesmo assim não puxa. Ai resolvi fazer dessa outra forma ao inserir ele gravar tb em outra tabela.

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom como disse as orientações que passei são para que você insira os valores

nas duas tabelas que deseja sem duplicações (ou seja, um registro em cada tabela).

 

agora essa query da sua home eu não entendi:

 

$not = mysql_query("select * from editar_noticias where id order by id desc limit 0, 5", $conexao);
select * from editar_noticias where id ?????

where id oque?

id = 1?

id = 0??

id is null???

 

:huh:

 

where id order by id num vai rolar mesmo.

Da uma revisada no seu código veja se ele certinho.

Da uma debugada.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa beleza, seguindo seus conselhos consegui arrumar o que estava errado mais agora me deparei com um problema, ele está listando as nóticas tudo ok, mais quando chega na hora da foto como ele não está pegando o id da noticia para vincular com a outra tabela ele está jogando todas as fotos, queria se possivel que vcocê me desse uma luz nesse select das fotos o que eu poderia fazer para puxar as fotos.

 

<?php

ini_set("display_errors","On");
error_reporting(E_ALL);

include_once("editar/includes/conexao.inc.php");
include_once("editar/includes/recordset.class.php");

$sql = "select * from editar_noticias order by id desc";
$rs = new RecordSet($conexao, $sql, 6, 'pag');
$reg = $rs->registros;

$sql = "select * from editar_fotos where secao='noticias' and fk_album";

function fotoTituloAlbum($idAlbum, $conexao) {
	$sql = "select nome from editar_fotos where secao='noticias' and fk_album = " . $idAlbum . " order by id";
	$c = mysql_query($sql, $conexao);
	$r = mysql_fetch_array($c);
	
	return $r['nome'];
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal Mauricio.

 

Pra te ajudar com essa query eu preciso saber como você faz pra exibir a foto.

Preciso ver o código. Você tem o nome da foto nas duas tabelas não tem?

Como você está tentando exibir a foto?

 

Explique melhor o problema para que possamos te ajudar.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, então a foto está somente na tabela editar_fotos que tem a estrutura assim:

 

Tabela EDITAR FOTOS

 

Id = 134 | id auto

fk_album = 908 | grava nessa coluna o numero do id da tabela editar_noticias

nome = 156a9799640880624fe52947471bfec8.peg | nome do arquivo

secao = noticias | sessão onde entra a foto

 

 

Tabela EDITAR NOTICIAS

 

id

data

titulo

sumario

autor

email

conteudo

usuario

 

Se fosse uma página interna que depois de clicado ele pegasse a foto eu consegui, eu usei

 

$sql = "select * from editar_fotos where secao='noticias' and fk_album=" . $_GET['id'];

Mas na home do site ele joga as notícias por ordem do id, ai não estou sabendo como vincular as duas sem usar o $_GET

 

Para puxar a foto estou fazendo o seguinte:

 

<div id="destaques">
<ul>
<?for ($i=0; $i < sizeOf($reg); $i++) {?>
<li>
<div class="foto">
<?php   
$c = mysql_query($sql, $conexao);
while($r = mysql_fetch_array($c)) {
?>
<img src="/editar/arquivos/editar_fotos/<?=$r['nome'];?>" width="230" height="190" hspace="5" vspace="5" border="0" />
<?}?>
</div><!--<! foto --><br />
<div class="titulo">
<a href="noticias_ver.php?id=<?=$reg[$i]['id'];?>"><?=$reg[$i]['titulo'];?></a>
</div><!--<! titulo -->
<div id="setas">
 <a href="#" id="anterior"><img src="img/seta_esquerda.png" alt="Anterior" width="27" height="23" border="0" /></a>
 <a href="#" id="proximo"><img src="img/seta_direita.png" alt="Próximo" width="19" height="23" border="0" /></a>
</div><!--<! setas -->
</li>
<?}?>
</ul>
</div><!--<! destaque -->

E se eu colocar o select assim com o id ele puxa certinho:

 

$sql = "select * from editar_fotos where secao='noticias' and fk_album=908";

Obrigado mais uma vez!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora ficou claro amigo Mauro.

Estude sobre INNER JOIN no MySQL.

 

Para a query da home faça assim:

 

"select * from editar_fotos ef INNER JOIN editar_noticias en ON(ef.fk_album=en.id) where ef.secao='noticias'";

Acredito que esta query resolva.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora ficou claro amigo Mauro.

Estude sobre INNER JOIN no MySQL.

 

Para a query da home faça assim:

 

"select * from editar_fotos ef INNER JOIN editar_noticias en ON(ef.fk_album=en.id) where ef.secao='noticias'";

Acredito que esta query resolva.

 

Abraços.

 

Obrigado pela ajuda vou procurar sobre o assunto por que estou meio perdido, mas fiz da seguinte forma e não deu certo está jogando todas as fotos uma embaixo da outra, gostaria de testar sabe ro por que disso mais não tenho conhecimento de INNER JOIN.

 

<?php

 

include_once("editar/includes/conexao.inc.php");

include_once("editar/includes/recordset.class.php");

 

$sql = "select * from editar_noticias order by id desc";

$rs = new RecordSet($conexao, $sql, 6, 'pag');

$reg = $rs->registros;

 

$sql = "select * from editar_fotos ef INNER JOIN editar_noticias en ON(ef.fk_album=en.id) where ef.secao='noticias'";

 

function fotoTituloAlbum($idAlbum, $conexao) {

$sql = "select nome from editar_fotos where secao='noticias' and fk_album = " . $idAlbum . " order by id";

$c = mysql_query($sql, $conexao);

$r = mysql_fetch_array($c);

 

return $r['nome'];

}

 

?>

 

Obrigado amigo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué mas já ta vinculando as tabelas.

não tem que trazer todas as fotos?

 

não seria só acrescentar o que você ja tinha antes então?

 

É que sem ver exatamente o que você esta tentando fazer fica difícil.

 

O que posso te dar é dicas de como fazer.

 

Veja se isso resolve

 

"select * from editar_fotos ef INNER JOIN editar_noticias en ON(ef.fk_album=en.id) where ef.secao='noticias' order by ef.id desc limit 0, 5";
Estudando mais sobre INNER JOIN você passa a entender melhor oque precisa fazer para solucionar seu problema.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então estão vinculadas, é o seguinte sabe aquele esquema de noticias da uol que ficam passando umas 3 noticias em um box, então é igual aquele, ai no box está puxando os títulos das imagens certinho mais nas fotos não está puxando uma por uma está listando todas, ou seja quando aparece a noticia 1 deve aparecer a foto da noticia um em cima do tilulo, ai muda para noticia 2 ai mostra a noticia 2 e assim por diante. Agora fique na dúvida se esse skema do INNER JOIN vai servir para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele serve justamente pra isso.

 

Você está informando o caminho da imagem para cada noticia apartir dele não?

 

O que talvez você tenha que mudar é a forma como exibe os dados.

 

Outro problema é fazer INNER JOIN entre tabelas onde existem campos iguais

como por exemplo ID.

 

Se você precisa do campo id e tem 2 iguais, é necessário informar quem é quem se não não vai.

Outra dica boa é ao invés de usar * colocar os campos exatos que precisa.

Ex:

 

"SELECT en.id AS id_editar_noticia, ef.nome FROM ......."
Desta forma quando for se referir no PHP ao id você usa o id_editar_noticia

por exemplo.

 

Isto se chama Alias e provem de usar o AS depois do campo para modificar seu nome.

 

Desta forma você optimiza a query pois ela só vai trazer os campos utilizados para

exibição desejada. Basta separar os campos por, conforme o exemplo citado.

 

Dá uma verificada nisto e nos laços utilizados para exibir as noticias.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom vou dar uma estudava nisso por que não manjo nada sobre INNER JOIN nunca tinha mexido com ele então não sei o que le é capaz, mais obrigado pelas dicas quando conseguiur resolver esse pepino eu dou um toque obrigado pela ajuda.

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.