Ir para conteúdo

POWERED BY:

Arquivado

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

paulo_hpedro

SELECT com PHP e BD

Recommended Posts

olá pessoal...

 

estou a desenvolver um formulario para um sistema de garagem de carros..

 

o bd tera duas tabelas "Marca" e "Modelo".... OK

 

A idéia é quando clicar em marca o select tem que me mostrar as opções certas.

 

como exemplo deste site da ctbc --> http://www.ctbc.com.br

 

 

desde já agradeço....

Compartilhar este post


Link para o post
Compartilhar em outros sites

=] da pra usa ajax man... eh bem simples principalmente se ultiliza algum auxilio(frameworks, bibliotecas etc..) ... no caso eu vo ultiliza no exemplo o prototypeJS...

 

no primero select você faz a listagem de todas as marcas e adiciona no onchange do select essa função

<select name="ref" id="ref" onchange="MM_jumpMenu()">
*dica: dexa o primero valor um selecionar ou algo assim pra fica mais bunito

 

ae no segundo select adiciona uma div com uma id e dexa como disable

<div id="ccorpo"><select name="ccorpo" disabled></select></div>

ae adiciona no head da pagina

<script src="prototype.js" type="text/javascript"></script>
<script type="text/JavaScript">

function MM_jumpMenu(targ,selObj,restore){ // esse selObj eu acho q nem precisa te.. eh que eu tava usando uma otro comando pra pega o valor... mas por via das duvidas dexa ae... mal n vai faze
	var valor = $F('ref'); //esse ref eh o nome do primero select ...

new Ajax.Request('ajax_response_ccorpo_ref.php?referencia='+valor, //pagina na gual vai tratar oq sera devolvido
			   {   
				 onSuccess: function(transport) 
					 {	  
						   $('ccorpo').innerHTML = transport.responseText; //nome da div no caso ccorpo
					  } 
			 }); 
}
agora cria ajax_response_ccorpo_ref.php ... no caso a pagina que vai trata a resposta

 

<select name="ccorpo">
<?php 
require_once('Connections/conn.php'); 
// só executa se tiver valor no GET de referencia
if($_GET['referencia'] != '')
{
	mysql_select_db($database_conn);
	$query_ref = "SELECT * FROM ref_corcorpo where referencia=".$_GET['referencia'];
	$ref = mysql_query($query_ref, $conn) or die(mysql_error());

?>

	<?php while($a = mysql_fetch_assoc($ref)) { ?>
		<option value="<?php echo($a['corcorpo']); ?>" selected><?php echo utf8_encode(($a['corcorpo'])); ?>	</option>
	<?php 
	} // fim do while
} // fim do if tem valor no GET
?>
</select>
no caso um select com os valores que deseja retornar...

 

o prototypeJS você pode baixar atravez desse site http://www.prototypejs.org/

 

valw espero ter ajudado

 

*OBS: possivelmente esse topico vai se movido por um movedor.. ops q dise moderador... para Javascript / DHTML e la ninquem mais vai posta resposta... mas qualque coisa manda pm tamo ae... =]

 

Alterado por Will -> nao eh piadinha eh critica .. e eu dise moderador pra nao cita nome(especifico)... mas nao eh pra todos =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

e por que nao tentar responder por la will?

 

nao é obrigado a responder como ninguem é mas tambem nao deve fazer este tipo de piadinha e discrimiar os moderadores do forum

 

creio nao ter sido um comentario muito adequado seu

 

perdeu uma otima oportunidade de nao ter digitado isso

 

abraços

 

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

 

Um movedor em acao

 

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

 

Tópico Movido

 

Origem: PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Destino: Javascript

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá paulo_hpedro...caso queira uma segunda opnião...você pode usar o framework xajax para fazer isso...ele é bem simples...

 

Aqui tem um select por exemplo "Marca"

 

Observe as duas primeiras linhas, elas devem serem requeridas no formularios onde você deseja realizar a busca, pois elas irão chamar o xajax, para ser mais especifico, a primeira linha é onde irá estar a sua função de busca.

 

E um detalhe: Não pode haver nenhum echo na frente dessas linhas, caso queria colocar...use uma variavel para receber o html e depois retornar ele (na classe consultar mais adiante tem uma demonstração)

 

require_once $_SERVER["DOCUMENT_ROOT"]."/sistema/php/freamework/FunctionXajax/evtXajax.php"; 
$ajax->printJavascript("/sistema/php/freamework/xajax/");

<select name="maraca" id="valor" onchange="xajax_buscarModelo(document.getElementById('valor').value)>
	<option value="0">-- Escolha uma Opção --</option>
		<?=
			$marca->consultar();
		?>
</select>

<div id="resultado">
	<select>
		<option>Primeiro Selecione uma Marca</option>
	</select>
</div>

Vamos supor que...você já fez a classe de consulta da marca ok e a mesma já está listando aí ok.

 

Ao clicar em alguma opção, o evento onchange irá passar o valor escolhido pelo id="valor" para o xajax que irá retornar o valor para o div resultado que está abaixo do primeiro select, o segundo select aí, é só para mostrar para o usuario, mais de nada irá servir, pois o xajax irá retornar um novo.

 

Lembrando que...você deverá ter o framework XAJAX aí na sua máquina ok. Donwload Aqui

 

Então já com ele em sua maquina, vai na pasta FunctionXajax/evtXajax.php (seja lá onde ela estiver na versão que você baixou)

 

 

Primeiramente, você deve registrar a função com o mesmo nome que você colocou no evento onchange que irá fazer a busca, o motivo é obvio né, é para chamar essa função...rsss

$ajax->registerFunction("buscarModelo");

E logo abaixo crie uma função semelhante à essa

function buscarModelo($valor){

		$modelo = new modelo();// instanciando o metodo onde está realizando a consulta do modelo
		$consulta =$modelo->consultar($valor);//consultando o modelo atravez do codigo passado, onde o mesmo é o id da marca enviado do form.

		
		$select.='<select name="modelo">

				<option value="0">Escolha um Item</option>
					'.$consulta.'
		</select>';

		$objResponse = new xajaxResponse('ISO-8859-1');
		$objResponse->assign("resultado", 'innerHTML',"$select");
		return $objResponse;
	
	}

Observe essa linha

$objResponse->assign("resultado", 'innerHTML',"$select");

o "resultado" é o nome do div que está no form para onde irá retorna a variavel "$select" já com a consulta realizada atraves do "$consulta".

 

E aqui um modelo +/- da classe "modelo"

public function consultar($valor = ""){
		
			$conexao=mysql_connect("localhost","usuario","senha");
			mysql_select_db("nome_do_banco");
			
			$sql = "SELECT  modelo.`id_modelo`,`modelo`.`descricao` FROM `modelo`
					WHERE `modelo`.`id_marca` = $valor";
			$consultar = mysql_query($sql);
			
			while($linha = $db->get_linha($resultado)){
				
				
				$consultar.= "<option value =".$linha["id_modelo"]." ";
				
				if($codigo != "" && $codigo == $linha["id_modelo"]){
					
					$consultar.="selected";
				}
				
				$consultar.=">".$linha["descricao"]."</option>";
		  }
			
			return $consultar;
		}

 

 

SQL UTILIZADA

 

DROP DATABASE IF EXISTS `veiculo`;

CREATE DATABASE `veiculo`
	CHARACTER SET 'latin1'
	COLLATE 'latin1_swedish_ci';

USE `veiculo`;

DROP TABLE IF EXISTS `marca`;

CREATE TABLE `marca` (
  `id_marca` int(11) NOT NULL AUTO_INCREMENT,
  `descricao` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id_marca`),
  UNIQUE KEY `id_marca` (`id_marca`)
);


DROP TABLE IF EXISTS `modelo`;

CREATE TABLE `modelo` (
  `id_modelo` int(11) NOT NULL AUTO_INCREMENT,
  `descricao` varchar(20) DEFAULT NULL,
  `id_marca` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_modelo`),
  UNIQUE KEY `id_modelo` (`id_modelo`),
  KEY `id_marca` (`id_marca`),
  CONSTRAINT `modelo_fk` FOREIGN KEY (`id_marca`) REFERENCES `marca` (`id_marca`)
);


INSERT INTO `marca` (`id_marca`, `descricao`) VALUES 
  (1,'Chevrolet'),
  (2,'Wolskagem');


INSERT INTO `modelo` (`id_modelo`, `descricao`, `id_marca`) VALUES 
  (1,'Celta',1),
  (2,'Vectra',1),
  (3,'Gol',2),
  (4,'Golf',2);

Bom aí está...espero que te ajude em algo...e lembrando que...esse framework é super simples de utiliza-lo...e após aprender...dá pra fazer um bocado de coisas...

 

Amigo...um abraço.... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.