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!