Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde. Não sei se aqui é o lugar correto, pois envolve AJAX, PHP e HTML. Seguinte, me deparei com um problema bem esquisito hoje aqui no serviço, que nunca havia ocorrido.
Utilizo uma função em que faz requisições AJAX em um arquivo PHP, e preenche uma div passada como parâmetro. A função é preencheCampo(campo, valor, tipo), onde campo é o nome da div que será preenchida, valor é a variável para fazer consultas em php no banco, por exemplo, e tipo é qual tipo de consulta que será jogado naquela div (pode ser um 'lista' ou um 'edit', por exemplo).
Eis um exemplo de funcionamento:
<tr>
<td align="center"><select name="estado" id="estado">
<option value="0">Todos</option>
<?php
$sql_estado = "SELECT * FROM estados";
$query_estado = $database->query($sql_estado);
if($query_estado){
while($result_estado = $database->fetch_object($query_estado)){
if($_REQUEST[estado] == $result_estado->sgl_estado)
echo utf8_encode("<option value=\"{$result_estado->sgl_estado}\" selected=\"selected\">{$result_estado->nom_estado}</option>\n");
else
echo utf8_encode("<option value=\"{$result_estado->sgl_estado}\">{$result_estado->nom_estado}</option>\n");
}
}
?>
</select></td>
</tr>
<tr>
<td align="center"><input class="btn" type="button" name="selecionar" id="selecionar" value=" Selecionar " onClick="preencheCampo('atualiza_ie', document.getElementById('estado').value, 'lista');"></td>
</tr>
<div id="atualiza_ie"></div>
Neste caso, ele vai preencher a div 'atualiza_ie' com uma lista das ies do estado selecionado. Bem simples, sempre funcionou perfeitamente. Posso inclusive passar mais de um valor, como por exemplo:
onblur="preencheCampo('data_fin', document.getElementById('data_fin').value+'-'+document.getElementById('data_ini').value);"
Neste caso não passei o tipo pois não era necessário, afinal para o campo 'data_fin' existe apenas esta consulta, mas passei 2 valores no campo 'valor', unificando-os com um '-', que na hora da consulta basta dar um explode para buscar os dois.
Acontece que, creio ser a primeira vez que tento utilizar esta função em um RADIO, e está acontecendo algo no mínimo bizarro...
Tentei de várias formas passar tanto o ID da empresa que está logada (que está gravado em uma $_SESSION), quanto o valor do radio button, da mesma forma citada acima, separando por um '-'. Mas quando é feita a requisição, o '-' é ignorado, os dois valores são passados juntos, e pra piorar, este valor ainda é salvo NA $_SESSION da empresa.
Eis o que fiz:
Pego o ID da empresa que está logada:
$empresa = $_SESSION['empresa'];
E tenho no HTML:
<tr>
<td class="titulo" rowspan="2">Valor de auxílio transporte:</td>
<td colspan="2"><input type="radio" name="tipo_transporte" value="D" onclick="preencheCampo('tc_select_transporte', '<?=$empresa?>'+'-'+this.value);" /> Valor diário
<input type="radio" name="tipo_transporte" value="M" onclick="preencheCampo('tc_select_transporte', '<?=$empresa?>'+'-'+this.value);" /> Valor mensal</td>
</tr>
<td><div id="tc_select_transporte"><input type="hidden" name="transporte" id="transporte" value="0" /></div>
</td>
Dentro da div tem como padrão um hidden apenas para verificação de não passar o valor em branco, assim que o usuário seleciona um dos inputs esta div já atualiza.
Na chamada AJAX tem o seguinte:
if($campo == "tc_select_transporte"){
$valor = explode("-", $valor);
$empresa = $valor[0];
$tipo = $valor[1];
echo "<select name=\"transporte\" id=\"transporte\" style=\"width:200px\" />
<option value=\"0\" selected=\"selected\" />Selecione...</option>";
$q = "SELECT id, transporte FROM empresa_transporte WHERE empresa = '$empresa' AND tipo = '$tipo' ORDER by transporte";
$q = $database->query($q);
if($q)
while($r = $database->fetch_object($q)) echo("<option value=\"$r->id\">$r->transporte</option>");
echo"</select>";
}
Coisa bem simples, usuário selecionaria se é pra trazer valores de transporte mensais ou diários, e a requisição ajax trás um select com os valores ou diários ou mensais.
Mas o que tem ocorrido é que, chamando a função desta forma, eu dei um echo em $valor e o que ele me retornou foi 30D (estava logado como empresa de id 30).
Dando um echo na busca, ele me retorna: "SELECT id, transporte FROM empresa_transporte WHERE empresa = '30D' AND tipo = '' ORDER by transporte".
E pra piorar tudo, ainda está jogando na $_SESSION["empresa"] o valor 30D, fazendo com que eu não possa fazer mais nada, a menos que deslogue e relogue no sistema!!
Tentei de outras formas fazer a chamada da função, como:
<input type="radio" name="tipo_transporte" value="D" onclick="preencheCampo('tc_select_transporte', '<? echo $empresa; ?>'+'-'+this.value);" />
<input type="radio" name="tipo_transporte" value="D" onclick="preencheCampo('tc_select_transporte', '<?=$empresa."-D"?>');" />
E até declarando um input hidden que recebe o valor de $empresa, e colocando lá um document.getelementbyid('empresa').value, mas em TODOS estes casos o resultado foi exatamente o mesmo, o hífen é ignorado e tal valor é armazenado na sessão.....
Eis o código que faz a requisição ajax (código original desenvolvido por Rafael Couto [[http://faael.net/],](http://faael.net/%5D,) porém com algumas adaptações que eu fiz para me servir melhor):
// Variável que receberá o objeto XMLHttpRequest
var ret;
function preencheCampo(campo, valor, tipo) {
// Verificar o Browser
// Firefox, Google Chrorme, Safari e outros
if(window.XMLHttpRequest) {
ret = new XMLHttpRequest();
}else if(window.ActiveXObject) {
ret = new ActiveXObject("Microsoft.XMLHTTP");
}
// Aqui vão os valores, caso haja mais de um, e o nome do campo que pediu a requisição.
var url2 = "../ajax/empresa/preenche.php?campo="+campo+"&valor="+valor+"&tipo="+tipo;
// Chamada do método open para processar a requisição
ret.open("Get", url2, true);
// Quando o objeto recebe o retorno, chamamos a função callback();
ret.onreadystatechange = function() {
// Exibindo mensagem de carregar
if(ret.readyState == 1) {
document.getElementById(''+ campo +'').innerHTML = '<!--<font color="gray">Buscando...</font>--><img src="../../images/loader.gif" />';
}
// Verifica se o Ajax realizou todas as operações corretamente (essencial)
if(ret.readyState == 4 && ret.status == 200) {
// Resposta retornada pelo executor.php
var resposta2 = ret.responseText;
// Abaixo colocamos a resposta na div do campo que fez a requisição
document.getElementById(''+ campo +'').innerHTML = resposta2;
}
}
ret.send(null);
}
Eu não tenho idéia do que possa estar acontecendo, já utilizo esta função há meses e nunca ocorreu nada do tipo, sempre funcionou perfeitamente bem, apenas com RADIO BUTTON que ela está dando este erro bizarro. Alguém tem alguma idéia do que possa estar acontecendo?
[]'s
Glauber
Carregando comentários...