Jump to content
femo

Update SQL via PHP (AJAX?)

Recommended Posts

femo

Tenho uma página web que mostra uma lista de registos através de um Select SQL.

Quero colocar um botão à frente de cada registo que permita alterar um campo do mesmo, preferencialmente sem fazer o refresh à página.

Alguém pode ajudar?

 


Fernando Morais

Share this post


Link to post
Share on other sites
M6

Se não queres fazer refresh a toda a página tens mesmo de usar AJAX.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
femo

Obrigado pela resposta mas o meu problema é mesmo esse: não o sei fazer :-(


Fernando Morais

Share this post


Link to post
Share on other sites
M6

Dá uma olhadela nos artigos que temos na Revista: https://www.revista-programar.info/?s=ajax

Em especial neste aqui: https://www.revista-programar.info/artigos/jquery-1-5-e-ajax/

Se quiseres um tutorial que contemple PHP, vê aqui: http://www.devmedia.com.br/criando-um-cadastro-com-php-ajax-e-jquery/28046


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
femo

Finalmente (quase) que está a funcionar mas apenas faz o update ao 1º registo.

Segui o tutorial da devmedia.com.br. (Obrigado!)

No HTML criei uma tabela em que cada linha é um Form com os input fields e o botão para atualizar esse registo.

Ou seja:

(como é na nossa intranet, não posso difundir aqui o endereço)

<form id='form_enc' class='form-inline' action='' method='post'>

<tr>

<td><input type='number' name='peso' id='peso' value='$peso' size='2' min='1' /></td>
<td><input type='hidden' id='enc' name='enc' value='$encweb'/></td>  [$encweb= variável que vem do query SQL]
<td><input type='hidden' id='status' name='status' value='1' /></td>

<td><input type='button' value='Pronto' id='salvar' /></td>

</tr>

</form>

O script:

<script type="text/javascript" language="javascript">

    $(document).ready(function() {
        $('#salvar').click(function() {
            var dados = $('#form_enc').serialize();
alert(dados);
            $.ajax({
                type: 'POST',
                dataType: 'json',
                url: 'salvar3.php',
                async: true,
                data: dados,
                success: function(response) {
                    location.reload();
                }
            });

            return false;
        });

});

</script>

No meu entender, dado que cada registo é um form e um botão independente, tudo devia funcionar mas nos restantes registos nada acontece, só no 1º.

Alguma ideia?


Fernando Morais

Share this post


Link to post
Share on other sites
HappyHippyHippo

responde somente a esta questão:

- sabendo que o atributo id de uma tag html deverá ser por definição único, quantas tags no teu html tem o atributo id com o valor "salvar" ?

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
femo

Boa! Às vezes basta pensar no básico... :confused:

Agora assim surge-me outro problema: corrigindo todos os ID's de todas as tags HTML do form (id=qualquercoisa_$encweb ), incluindo o ID do próprio form, o script dá erro visto não receber a informação de que form é para tratar.

Como passo o valor dessa variável para a função?


Fernando Morais

Share this post


Link to post
Share on other sites
HappyHippyHippo

podes usar a familia de atributos data-* para guarda a informação que pretendes em qualquer tag, que é para isso que eles servem


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
femo

Obrigado pela ajuda.

Após andar às voltas com os atributos data-* e sempre com um resultado de NaN (?!), descobri algo que funciona mas não sei se terá outras implicações:

Atribuí ao botão o ID da variável e no Javascript apenas criei uma variável a que atribuí o this.id. Depois, como o form tem um ID='form_enc_$encweb', serializei o form com o ID obtido e foi esta variável "dados" que enviei para fazer o update da BD.

var encomenda=this.id;
var dados = $('#form_enc_'+encomenda).serialize();

Funciona! \o/

Mas....

O location.reload() faz o reload de TODOS os forms, ou seja, volta a fazer o query completo, o que torna tudo muito lento. Há maneira de fazer diferente?


Fernando Morais

Share this post


Link to post
Share on other sites
femo

Bem pensado. Na realidade é apenas por uma razão: as encomendas "Prontas" têm uma cor de fundo diferente.

Vou tentar alterar a class no success, sem fazer reload.

Obrigado mais uma vez.


Fernando Morais

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.