Ir para conteúdo

POWERED BY:

Arquivado

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

Kiito

Relacionamento

Recommended Posts

Boa noite a todos!

 

to com uma dúvida

 

por exemplo

 

tenho 2 tabelas em meu DB

 

--
-- Estrutura da tabela `construtora`
--

DROP TABLE IF EXISTS `construtora`;
CREATE TABLE `construtora` (
  `Id_ap` int(11) NOT NULL auto_increment,
  `projeto` text collate latin1_general_cs,
  `imagem` text collate latin1_general_cs,
  `link` text collate latin1_general_cs,
  `estado` text collate latin1_general_cs,
  `cidade` text collate latin1_general_cs,
  `tipo_imovel` text collate latin1_general_cs,
  `area_privativa` text collate latin1_general_cs,
  `fase_obra` text collate latin1_general_cs,
  `valor` text collate latin1_general_cs,
  PRIMARY KEY  (`Id_ap`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs AUTO_INCREMENT=3;


-- --------------------------------------------------------

--
-- Estrutura da tabela `users`
--

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `usuario` varchar(254) collate latin1_general_ci default NULL,
  `senha` varchar(32) collate latin1_general_ci default NULL,
  `nome` text collate latin1_general_ci,
  `ip` text collate latin1_general_ci,
  `favorito` set('1') collate latin1_general_ci default '',
  `Id_ap` int(11) NOT NULL default '0',
  `nome_ap` varchar(255) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`id`),
  KEY `Id_ap` (`Id_ap`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1;

A operação q deve ocorrer é... q o usuario consiga marcar na listagem dos aps... quais são os favoritos dele... e assim ele guarda nakele campo favorito, mas na listagem quero q apareça o nome do ap e nao a ID =x por isso o campo nome_ap

 

A estrutura ta certa pra fazer tal operação?

 

 

 

 

Outra dúvida

 

Nesta mesma pagina que ele marca os favoritos... ele executa uma ação ... seria insert? alter? update?

 

essas são minhas duvidas... alguém pode me esclarecer?

 

para inserir os dados nas 2 tabelas.. como faço? =x

 

desde já agradeço http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

A estrutura ta certa pra fazer tal operação?

Hum... talvez não hein?!

Vamos lá.. você tem as "construtoras"? :blink:

 

Não seriam "apartamentos" ?

e você tem os usuários, que podem ter vários contruturas/apartamentos como favoritos, certo ? (atenta para o vários, já trabalhou com access ?)

 

Textinho..eu posso ter 3 apartamentos que escolhi com favoritos, mas você pode ter 15 favoritos..

viu o problema ai ?

Nessa situação, com a tua modelagem, você precisaria ter 15 vezes as linhas do usuário. Com várias informações repetidas.

 

Eu sugiro criar mais uma tabela, apenas para o relacionamento.

Ficando:

TABLE `apartamento/contrutora` #não entendi pq você chama de construtora, afinal, UMA construtora, tem VÁRIOS apartamentos, ou não ?

`Id_ap`

`nome_ap`

..

 

TABLE `users`

`id`

 

TABLE `favorito`

`id_user`

`Id_ap`

 

Ai você faria uma ação de insert, cada vez que o usuário escolhesse um favorito. Mas apenas na tabela `favorito`

Compartilhar este post


Link para o post
Compartilhar em outros sites

William... depois olhei com calma e vi a besteira que eu fiz

 

o BD chama construtora

 

as tabelas sao

 

Empreendimento

Users

e Favoritos

 

segue abaixo como funciona a listagem dos campos

 

<form action="insert.php" method="post">
<?php
mysql_connect("localhost","root","");
mysql_select_db("construtora");
$listagem = "SELECT * FROM empreendimento";
$query = mysql_query($listagem);
while ($linha=mysql_fetch_array($query)){
	$id = $linha["id_empre"];
	$projeto = $linha["empreendimento"];
	echo "<input type=\"checkbox\" value=\"$id\" name=\"ide[]\" />".$projeto."<br />";
}
?>
<input type="submit" value="enviar" />
</form>

agora a pagina q ira gravar

 

<?php
mysql_connect("localhost","root","");
mysql_select_db("construtora");

foreach($_POST["ide"] AS $valor_id)
$sql = mysql_query("INSERT INTO favorito (id_empre)VALUES($valor_id)"); 


?>

visto que a tabela favorito tem campo id_empre e id_user ((ambas buscando dados das tabelas correspondentes)) porem dps com as sessoes gravarei o id do usuario.. sem problema, soh queria gravar no db as infs

 

porem aparece esse erro

 

Notice: Undefined index: ide in C:\wamp\www\testes\insert.php on line 5

 

Warning: Invalid argument supplied for foreach() in C:\wamp\www\testes\insert.php on line 5

 

 

 

=x

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho.. esses erros ai apareceram qndo você acessou a insert.php direto, ne?!

Ou depois de enviar o POST do formulário ?

 

faça isso:

var_dump($_POST["ide"]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao... qdo envio o formulario.. da esse erro =/

 

vou tentar o var_dump... assim que chegar em casa!!

 

qualquer coisa posto aqui denovo william!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o var_dump é só pra gente ver oque tá vindo nesse array ai.

foreach($_POST['ide'] as $valor_id)
{
$sql = mysql_query("INSERT INTO `favorito` (`id_empre`) VALUES ($valor_id) ")or die(mysql_error()); 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae cara

 

tentei

 

deu isso

 

Notice: Undefined index: ide in C:\wamp\www\testes\insert.php on line 5

 

Warning: Invalid argument supplied for foreach() in C:\wamp\www\testes\insert.php on line 5

 

Notice: Undefined index: ide in C:\wamp\www\testes\insert.php on line 8

NULL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostra como está o teu script agora...

Mas já que você está com todos os erros habilitados, antes de usar teste:

if(isSet($_POST['ide'])){
foreach($_POST['ide'] as $valor_id)
{
$sql = mysql_query("INSERT INTO `favorito` (`id_empre`) VALUES ($valor_id) ")or die(mysql_error());
}
}
else {
echo 'Não veio o post dos check!!';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

William... brigadao... a parte do insert ele foi

 

mas nao traz a resposta... creio q o problema esteja no formulario

 

<?php
mysql_connect("localhost","root","");
mysql_select_db("construtora");
if(isset($_POST['ide'])){
foreach($_POST['ide'] as $valor_id)
{
$sql = mysql_query("INSERT INTO `favorito` (`id_empre`) VALUES ($valor_id) ")or die(mysql_error());
}
}
else {
echo 'Não veio o post dos check!!';
}
?>

esse eh o formulario

 

<form action="insert.php" method="post" name="form">
<?php
mysql_connect("localhost","root","");
mysql_select_db("construtora");
$listagem = "SELECT * FROM empreendimento";
$query = mysql_query($listagem);
while ($linha=mysql_fetch_array($query)){
	$id = $linha["id_empre"];
	$projeto = $linha["projeto"];
	?>
	<input type="checkbox" value="<?php echo $id ?>" name="ide[]" /><?php echo $projeto ?><br />
<?php	
}
?>
<input type="submit" value="enviar" />
</form>

tentei atribuir name="ide" mas nao deu tambem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não cara..

para marcar checkbox, é mais complicadinho que isso.. hehe :lol:

 

A idéia, é você gravar num array todos os values que estão no banco.

E ai na hora de listar, você compara se o check atual, está no array, se estiver você imprime um

checked="checked" no input.

 

Caso contrário, não imprime nada.

Eu fiz um método aqui, para isso.

/* o parâmetro $string, é o WHERE `idRepresentante` = 2, por exemplo, ai o método só retorna todos os check, e marca apenas os que forem relacionados ao representante de id 2. Se você não passar nada, o método preenche a lista de checks, toda desmarcada. */
	function checkProduto( $string )
	{
		$sql = ("SELECT * FROM `produto2` ");
		
		if( $string != '' ) {
			$sql2 = ("SELECT idProduto FROM `produtoRepresentante` ");
			$sql2 .= $string;
			
			$consulta2 = mysql_query($sql2);
					
			if(mysql_num_rows($consulta2)!=0)
			{
				while($dadosRel = mysql_fetch_assoc($consulta2))
				{
						$vetorProd[] = $dadosRel['idProduto']; 
				}
			}
		}

		
		$consulta = mysql_query($sql);
		
		while( $dados = mysql_fetch_assoc( $consulta ) )
		{
			if( $string != '' ) {
				if( in_array( $dados['idProduto'], $vetorProd ) ) 
					$checked = 'checked="checked" ';
				else
					$checked = '';
			}
				
			$check .= "\t".'<label>'.$dados['nomeProduto'].'<input type="checkbox" name="idProduto[]" value="'.$dados['idProduto'].'" '.$checked.'/></label>'."\n\t\t";
		}
		return $check;
	}
Esse é um método de uma classe minha, na verdade, ele já devolve a lista de checkbox inteira.. seja para cadastrar, ou para alterar, e ai coloca os checked nos que estão no banco.

Se você não entender, posta a estrutura da tua tabela, que agente desenvolve aqui.. mas olha, o "segredo", é esse trecho:

if( in_array( $dados['idProduto'], $vetorProd ) )

$checked = 'checked="checked" ';

else

$checked = '';

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos la!!

 

entender, nao entendi mto bem... tem funçao ali que desconheço.

 

minha tabela eh simples

 

CREATE TABLE `empreendimento` (
  `id_empre` int(11) NOT NULL AUTO_INCREMENT,
  `projeto` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_empre`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

CREATE TABLE `favorito` (
  `id_empre` int(11) NOT NULL DEFAULT '0',
  `id_user` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_empre`),
  KEY `usuario` (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `usuario` (
  `id_user` int(11) NOT NULL AUTO_INCREMENT,
  `usuario` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
#
#  Foreign keys for table favorito
#

ALTER TABLE `favorito`
ADD CONSTRAINT `usuario` FOREIGN KEY (`id_user`) REFERENCES `usuario` (`id_user`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `empre` FOREIGN KEY (`id_empre`) REFERENCES `empreendimento` (`id_empre`) ON DELETE NO ACTION ON UPDATE NO ACTION;

num keria algo tao complexo... eh base de estudo msm...

 

saka..

 

mas se puder dar uma ajuda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cheguei à testar..

mas acho que tá tudo certo.

Vê ai, o formulário para editar ficaria assim:

<form action="insert.php" method="post" name="form">
<?php
mysql_connect("localhost","root","");
mysql_select_db("construtora");
$listagem = "SELECT * FROM empreendimento";
$query = mysql_query($listagem);

		$sql2 = ("SELECT id_empre FROM `favorito` WHERE `id_user` = {1} "); // o 1 aqui, você troca pelo id do usuário corrente
			
		$consulta2 = mysql_query($sql2);
					
		if(mysql_num_rows($consulta2)!=0) // só realiza o fech, se existir resposta, para não retornar erro, caso não tenha NENHUM favorito
		{
			while($dadosRel = mysql_fetch_assoc($consulta2))
			{
				$vetorFav[] = $dadosRel['id_empre']; // aqui eu guardo tudo oque tá no banco, relacionado à tal usuário no $vetorFav
			}
		}
			
	while ($linha=mysql_fetch_array($query)){
	$id = $linha["id_empre"];
	$projeto = $linha["projeto"];
	
		if( in_array( $dados['id_empre'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav
			$checked = 'checked="checked" '; // se tiver, é pq precisa mostrar marcado
		else
			$checked = ''; // caso contrário, não precisa por nada.. e imprime um "VAZIO" no input
			
	echo	 '<input type="checkbox" value="'.$id.'" name="ide[]" '.$checked.'/>'.$projeto.'<br />';
	}//fecha while
?>
<input type="submit" name="enviar" value="enviar" />
</form>
E atenção, que aqui:

$sql2 = ("SELECT id_empre FROM `favorito` WHERE `id_user` = {1} "); // o 1 aqui, você troca pelo id do usuário corrente

você precisa trocar a cláusula do WHERE, por uma vinda do sistema. Já que:

 

você tem vários usuários. Cada um tem um id_user

e cada usuário, tem vários favoritos, certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummm.. entendi...

 

mas a clausula q você se refere... necessito trocar a id do cara..

 

aaa isso sem problema.. resgatarei através do login quando ele efetuar! para certificar!! sem problema =D

 

 

vou realizar o teste e posto o resultado..

 

william.. você ta quebrando 1 galhao... me ajudando bastante... tem coisa q num tinha visto e ta ficando mais claro!!

 

vlw msm!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que trocar sim cara..

veja que eu passei 1 pro WHERE.. desse jeito, ele só vai trazer os dados do usuário com id 1 !

você deve colocar ali, uma variável, que guarda o id do usuário.

 

Como funciona o teu sistema ?

Cada usuário faz login?

Salva numa SESSION, e joga o id ai nessa query.

 

Se retornar algum erro, avisa ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\testes\teste.php on line 23

Notice: Undefined variable: dados in C:\wamp\www\testes\teste.php on line 35

Notice: Undefined variable: vetorFav in C:\wamp\www\testes\teste.php on line 35

Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\wamp\www\testes\teste.php on line 35

foi esse o erro q apareceu... variavel nao definida Oo

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim.. a ideia vai ser essa msma... mas to no começo ainda... ja fiz o sistema de buscas, cadastro de empreendimento e tals.. agora to no final da navegaçao dos usuarios!

 

esse do checkbox me deixo preocupado... imagina o resto? hahahahahhaa!!

mas vo continuar... tenho q aprender... curto php!!

 

soh as vezes q me perco =P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troca essa query aqui, não entendi pq o num_rows falhou. Disso decorreu todos os outros erros.

$sql2 = ("SELECT id_empre FROM `favorito` WHERE `id_user` = {1} ")or die(mysql_error()); // o 1 aqui, você troca pelo id do usuário corrente

Hum.. erro meu. Esqueci de trocar o $dados por $linha que você usou:

if( in_array( $linha['id_empre'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav

Compartilhar este post


Link para o post
Compartilhar em outros sites

vixiiii o kra reparo na foto huauhahuahuahuahuahuauhahuauhahaa

 

mas nao fui eu q fiz =P

 

huahuahuahuahua vo troca dps.. preciso mudar.. essa ta feia huauhahuauhahuahuhuahua

 

=D

 

postando o q houve

 

<?php
mysql_connect("localhost","root","");
mysql_select_db("construtora");
$listagem = "SELECT * FROM empreendimento";
$query = mysql_query($listagem);

		$sql2 = ("SELECT id_empre FROM 'favorito' WHERE 'id_user' = {1} ")or die(mysql_error()); // o 1 aqui, você troca pelo id do usuário corrente
			
		$consulta2 = mysql_query($sql2);
					
		if(mysql_num_rows($consulta2)!=0) // só realiza o fech, se existir resposta, para não retornar erro, caso não tenha NENHUM favorito
		{
			while($dadosRel = mysql_fetch_assoc($consulta2))
			{
				$vetorFav[] = $dadosRel['id_empre']; // aqui eu guardo tudo oque tá no banco, relacionado à tal usuário no $vetorFav
			}
		}
			
	while ($linha=mysql_fetch_array($query)){
	$id = $linha["id_empre"];
	$projeto = $linha["projeto"];
	
		if( in_array( $linha['id_empre'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav
			$checked = 'checked="checked" '; // se tiver, é pq precisa mostrar marcado
		else
			$checked = ''; // caso contrário, não precisa por nada.. e imprime um "VAZIO" no input
			
	echo	 '<input type="checkbox" value="'.$id.'" name="ide[]" '.$checked.'/>'.$projeto.'<br />';
	}//fecha while
?>

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\testes\teste.php on line 23

 

Notice: Undefined variable: vetorFav in C:\wamp\www\testes\teste.php on line 35

 

Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\wamp\www\testes\teste.php on line 35

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.