Auto Combo em Ajax - Customizável

Coisas Complexas, ajax, scripts 6 Comments »

Buenas…

Ao estudar um pouco de ajax, desenvolvi um script bastante útil e fácil de ser utilizado, baseado em um script de cidades/estados cuja autoria desconheço…

O script funciona da seguinte forma:

1- O select ‘1′ é preenchidos com os dados de uma tabela escolhida (no arquivo xml.php) do bd.
2- Ao selecionar um campo do select ‘1′, o select 2 é preenchido a partir dos campos de uma segunda tabela do bd que contenha, em um campo escolhido (no arquivo xml.php), o mesmo valor (value) do select ‘1′.

EXEMPLO

O código: disponível para download logo abaixo

[index.php ]

<?
include(”xml.php”);

?>
<script type=”text/javascript” src=”combo.js”></script>
<body onLoad=”Dados(document.getElementById(’select1′).value);”>
<?
$sql = “SELECT * FROM $tb1_nome”;
$sql = mysql_query($sql);
$row = mysql_num_rows($sql);
?>
<form>
<select name=”select1″ id=”select1″ onChange=”Dados(this.value);”>
<? for($i=0; $i<$row; $i++) { ?>
<option value=”<? echo mysql_result($sql, $i, $tb1_valor); ?>”>
<? echo mysql_result($sql, $i, $tb1_desc); ?></option>
<? } ?>
</select><br>

<select name=”select2″ id=”select2″>
<option id=”opcoes” value=”0″>Selecione a categoria</option>
</select>
</form>

[xml.php] - Este arquivo contém as variáveis a serem editadas.

<?

############## EDITAR #######################

$bd_host = ‘localhost’; // host… 99,9% de chance de ser localhost..
$bd_name = ‘bd’; //nome do banco de dados
$bd_user = ‘root’; //nome do usuário
$bd_pass = ’senha’; //senha do usuário

$tb1_nome = ‘tabela1′; //nome da tabela que contém os valores do select 1
$tb1_valor = ‘valor’; //campo da tabela que ficará no ‘value’ do option
$tb1_desc = ‘nome’; //campo da tabela que ficará na descrição do option… a parte visível

$tb2_nome = ‘tabela2′; //nome da tabela que contém os valores do select 2
$tb2_valor = ‘valor’; //campo da tabela que ficará no ‘value’ do option
$tb2_desc = ‘nome’; //campo da tabela que ficará na descrição do option… a parte visível
$tb2_comp = ‘tipo’; //campo da tabela 2 para comparação com o value da select 1… ‘WHERE’ $tb_comp =

###############################################

$connection = @mysql_connect($bd_host, $bd_user, $bd_pass) or die(”Unable to connect to database!”);
@mysql_select_db($bd_name, $connection) or die(”Unable to select database!”);

$sql = ” SELECT * FROM $tb2_nome WHERE $tb2_comp = ‘$_POST[vsel1]‘ “;
$sql = mysql_query($sql);
$row = mysql_num_rows($sql);

if($row) {
$xml  = “<?xml version=\”1.0\” encoding=\”ISO-8859-1\”?>\n”;
$xml .= “<cidades>\n”;
for($i=0; $i<$row; $i++) {
$codigo    = mysql_result($sql, $i, $tb2_valor);
$descricao = mysql_result($sql, $i, $tb2_desc);
$xml .= “<cidade>\n”;
$xml .= “<codigo>”.$codigo.”</codigo>\n”;
$xml .= “<descricao>”.ucfirst(strtolower($descricao)).”</descricao>\n”;
$xml .= “</cidade>\n”;
}
$xml.= “</cidades>\n”;
Header(”Content-type: application/xml; charset=iso-8859-1″);
}

echo $xml;
?>
[combo.js]

function Dados(valor) {

try {
ajax = new ActiveXObject(”Microsoft.XMLHTTP”);
}
catch(e) {
try {
ajax = new ActiveXObject(”Msxml2.XMLHTTP”);
}
catch(ex) {
try {
ajax = new XMLHttpRequest();
}
catch(exc) {
alert(”Esse browser não tem recursos para uso do Ajax”);
ajax = null;
}
}
}
if(ajax) {
document.forms[0].select2.options.length = 1;

idOpcao  = document.getElementById(”opcoes”);

ajax.open(”POST”, “xml.php”, true);
ajax.setRequestHeader(”Content-Type”, “application/x-www-form-urlencoded”);

ajax.onreadystatechange = function() {
if(ajax.readyState == 1) {
idOpcao.innerHTML = “Carregando…”;
}
if(ajax.readyState == 4 ) {
if(ajax.responseXML) {
processXML(ajax.responseXML);
}
else {
idOpcao.innerHTML = “Selecione a categoria”;
}
}
}
var params = “vsel1=”+valor;
ajax.send(params);
}
}

function processXML(obj){
var dataArray   = obj.getElementsByTagName(”cidade”);

if(dataArray.length > 0) {
document.forms[0].select2.options.length = 0;
for(var i = 0 ; i < dataArray.length ; i++) {
var item = dataArray[i];
var codigo    =  item.getElementsByTagName(”codigo”)[0].firstChild.nodeValue;
var descricao =  item.getElementsByTagName(”descricao”)[0].firstChild.nodeValue;

var novo = document.createElement(”option”);
novo.setAttribute(”id”, “opcoes”);
novo.value = codigo;
novo.text  = descricao;
document.forms[0].select2.options.add(novo);
}
}
else {
idOpcao.innerHTML = “Selecione a categoria”;
}
}

############

Para fazer o download dos arquivos do script clique aqui

############

Qualquer dúvida quanto a utilização, envie por comentário.

Resolvendo problema de espaço entre < li > no IE6 (CSS)

CSS, Menus No Comments »

Muita gente encontra um problema de remover o espaçamento entre

  • na construção de menus..

    abaixo o exemplo do problema:

    Para resolver o problema acima, basta adicionar a seguinte linha na página CSS:

    ul li { display: inline; }

    ;)

  • Colocando uma imagem de ‘loading’ na página

    Coisas Simples, PHP 4 Comments »

    Exemplo: Carregando…

    Recarregue a página para rever o exemplo.

    Vamos colocar uma imagem de loading na página…

    1º - Se desejar, pegue esta imagem (ou outra de sua preferência) -

    2º - Coloque a imagem e/ou um texto dentro de uma div com a id carregando

    <div id=”carregando”><img src=”dir/loader.gif”> Carregando…</div><

    3º - Adicione na tag <body> o seguinte comando:
    <body onLoad=”document.getElementById(’carregando’).style.display = ‘none’;”>

    feito!