Formulário com Ajax

0 views
Skip to first unread message

Juscelino Barão

unread,
Aug 1, 2008, 4:43:36 PM8/1/08
to CInWeb2.0
Olá pessoal,

Seguinte, tenho uma tabela chamada MEDICAMENTOS.
Os campos dessa tabela são:

- id_medicamento
- nome_medicamento
- composto
- posologia
- responsavel
- status

Gostaria de criar um formulário, que tivesse alguns campos:
1 - NOME MEDICAMENTO
2 - POSOLOGIA

A dúvida é que queria que ao escolher o primeiro campo (NOME
MEDICAMENTO) o segundo campo (POSOLOGIA) deve ser preenchido com base
na escolha do primeiro campo.

Como se fosse um script de Estado e Cidades.

Alguem pode me ajudar?


Obrigado pela atenção.


Cordialmente,
Juscelino Barão
======================

delta9

unread,
Aug 5, 2008, 10:03:22 AM8/5/08
to CInWeb2.0
vc já usou ajax alguma vez??

aconselho usar o prototype.js (www.prototypejs.org)

eu só sei usar com php, vc faria o seguinte no change (ou no exit) do
primeiro campo vc faria uma requisição a uma pagina php q iria
retornar a posologia e vc entao preenche o segundo campo com o valor,
na verdade há várias maneiras de fazer isso q vc quer, aconselho dar
uma procurada no sao google

Juscelino Barão

unread,
Aug 5, 2008, 10:24:30 AM8/5/08
to CInWeb2.0
Pessoal encontrei um script tipo UF e cidade.

Mas quando escolho um dos medicamentos que aparecem no primeiro drop-
down, o segundo campo não me mostra o resultado esperado.
É como se a variável [nome_medicamento] que escolho, não fosse levada
pra o próximo campo, ela retorna vazia.

Veja o código abaixo:

<?
//set IE read from page only not read from cache
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

header("content-type: application/x-javascript;
charset=tis-620");

$data=$_GET['data'];
$val=$_GET['val'];
$nome_medicamento=$_GET['nome_medicamento'];

//set database
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "123456";
$dbname = "form";
mysql_pconnect($dbhost,$dbuser,$dbpass) or die ("Unable to connect to
MySQL server");


// NESSA PARTE O CÓDIGO FUNCIONA PERFEITO
if ($data=='states') { // first dropdown
echo "<select name='states' onChange=\"dochange('cities',
this.value)\">\n";
echo "<option value='0'>==== ESCOLHA ====</option>\n";
$result=mysql_db_query($dbname,"SELECT * FROM medicamentos
WHERE status = 'Ativado' ORDER BY nome_medicamento ASC");
while(list($id_medicamento,
$nome_medicamento)=mysql_fetch_array($result)){
echo "<option value=\"$id_medicamento\" >
$nome_medicamento</option> \n" ;
}

// JÁ NESSE O CODIGO NUM RETORNA NADA, SERA QUE TO COLOCANDO A
VARIÁVEL (NOME_MEDICAMENTO) CERTA?
} else if ($data=='cities') { // second dropdown
echo "<select name='cities' >\n";
echo "<option value='0'>==== veja ====</option>\n";
$result2=mysql_db_query($dbname,"SELECT id_medicamento, posologia
FROM medicamentos WHERE nome_medicamento = '".$nome_medicamento."' ");
while(list($id_medicamento, $posologia)=mysql_fetch_array($result2))
{
echo "<option value=\"$id_medicamento\" >$posologia</option>
\n" ;
}
}
echo "</select>\n";
?>

Por favor, me ajudem...
Obrigado.

Cassio Melo

unread,
Aug 5, 2008, 11:08:49 AM8/5/08
to cin_...@googlegroups.com
Juscelino, o código não funciona pois você está tentando fazer um novo acesso ao banco de dados a partir de uma página já foi gerada (se você olhar o source da página vai perceber que só a lógica de 'states' foi renderizada). Para contornar isso você vai precisar de uma chamada javascript para o servidor via xml (AJAX) como sugeriu data9. Prototype e JQuery são ambas muito boas para esse tipo de aplicação e simplificam bastante o código. Existem algumas bibliotecas javascript que já fazem esse tipo de coisa (selecao de estados e cidades do brasil), googla um pouquinho você vai encontrar. Caso queira implementar o seu próprio importe o prototype.cs e tente algo do tipo

var params; /* string de parametros que se passa para algum método state_select (que pega o estado e retorna as cidades dele) do servidor, no formato ?atributo=valor&atributo2=valor&... */

new Ajax.Request('state_selected', {
            method: 'post',
            parameters: params,
            onComplete: function(request){
                //parser do resultado pra JSON
                citiesArray= eval("(" + request.responseText + ")");
               
                addCitiesToSelect(citiesArray); // método que pega um array de cidades e renderiza o html select
            }
        });

Abraço,
Cassio

2008/8/5 Juscelino Barão <jusceli...@gmail.com>
Reply all
Reply to author
Forward
0 new messages