Quero fazer um formulário de cadastro interativo e dinâmico. Alguns campos textfield normais e outros dinâmicos combobox.
PHP, MySql e JavaScript + Ájax são meus aliados...
Eu estou preenchendo alguns campos do form normalmente, então seleciono uma combobox e vejo que não foi cadastrado determinado item. Eis que ao lado da combo tenho um botão para cadastrá-lo naquele instante! Clico no botão, que faz surgir uma div (outro form) que faz o cadastro do novo item no servidor, retorna mensagem de sucesso e atualiza o combobox, tudo isso sem REFRESH, já que tenho campos que foram digitados.
O que já consegui fazer:
1- form que clica, aparece a div com o outro form.
2- Cadastra o novo item e retorna a mensagem de sucesso
O que não consegui fazer:
1- recarregar apenas o combobox com os dados do db.
Estrutura do db:
id | nome
index.php
<script type="text/javascript" src="ajax.js"></script>
<input type="text" />
<div id="pai">
<div id="filho">
<?
include("combobox.php");
?>
</div>
</div>
<input type="submit" name="button" id="button" value="Submit" onclick="document.getElementById('novo_item').style.display='block'" />
<div style="display:none; border:1px solid gray;" id="novo_item">
 <form id="frm">
	<center>
	 novo item
	   <input type="text" name="nome" id="nome">
	  <input type="button" value="cadastrar" onclick="cadastra();">
	</center>
  </form>
</div>
<script language="javascript">
// cadastro com PHP, javascript, DOM, xmlhttprequest
var request = getXmlHttp();
function cadastra(){
  var nm = document.getElementById('nome').value;
  var url= "cadastra.php?nome="+nm;
  request.open('GET', url, true);
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.onreadystatechange = confirma;
  request.send(null);
}
function confirma(){
  if(request.readyState == 4){
	var response = request.responseText;
	var divmain = document.getElementById('novo_item');
	var formid = document.getElementById('frm');
	var pelement = document.createElement("p");
	var text = document.createTextNode("Parabens  " + response + ", Cadastro Concluido! ");
	pelement.appendChild(text);
	divmain.replaceNode(pelement,frm);
	var ael = document.createElement("button"); //cria um elemento
	var textlink = document.createTextNode("voltar"); //cria um texto
	
	ael.appendChild(textlink);  //insere texto
	ael.setAttribute("type","onclick");
	ael.onclick = function () {include_combobox()};
		
	//document.appendChild(ael);
		
		
	pelement.appendChild(ael); //insere elemento
   }
 
  }
  
	function include_combobox(){
	
	document.getElementById('filho').innerHTML = "combobox.php";
	}
	
//function include_combobox()
//		{
//		   alert ('hello');
//		}
//</script>ajax.js
function getXmlHttp() {
var xmlhttp;
try{
 xmlhttp = new XMLHttpRequest();
}catch(ee){
 try{
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 }catch(e){
  try{
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }catch(E){
	xmlhttp = false;
  }
 }
}
return xmlhttp;
} combobox.php
<?
include("config.php");
$select = "SELECT * FROM clientes";
$query = mysql_query($select) or die("Não foi possível realizar consulta ao banco de dados Clientes.");
if ($_REQUEST['pagina'] == "novo_item"){
 echo '<input name="text" id="text">';
} else {
 
  echo '<select name="select" id="select">';
	
?>
<?	
	while($row = mysql_fetch_array($query)){
		$id		 = $row["id"];
		$nome_list	 = $row["nome"];
		
	echo "<option>";	
	echo $nome_list;
	echo "</option>";	
	}
	}
?>cadastra.php
<?
include "config.php";
$nm = addslashes(trim($_REQUEST['nome']));
$sql = "INSERT INTO clientes(nome) VALUES ('$nm')";
$cadastra = mysql_query($sql, $conn);
if(!$cadastra){
echo "Não foi possivel realizar seu cadastro!";
}else{
echo $nm;
}
mysql_close();
?>Qualquer luz....Agradeço à todos!










