Jump to content

[Resolvido] Javascript embutido em PHP


op_h2tuga

Recommended Posts

Ola,

Tenho este código:

echo "<script type='text/javascript'>
var perg = confirm ('Pretende pagar a encomenda imediatamente?')
if (perg)
{";
 $this->executarSQL("insert into total_encomenda(id_encomenda, total_encomenda) values('$prox_id_enc','$total_produtos')");
 echo"alert ('Total da sua encomenda e $total_produtos $ieuros')

}
else
{";
 $this->executarSQL("insert into total_encomenda(id_encomenda, total_encomenda, divida) values('$prox_id_enc','$total_produtos', '$total_produtos')");
 echo"alert ('A sua compra foi efectuada, tem uma divida de $total_produtos euros')

}
</script>
";

E o problema está em que ele entra sempre nas duas condições, quer o valor do perg seja true ou false, alguém sabe o que pode estar a originar esta situação?

Cumprimentos

Edited by brunoais
geshi!
Link to comment
Share on other sites

Não podes fazer isso... O PHP é executado no servidor e o JavaScript é executado no browser. Quando a página chegar ao browser, ambos os inserts já foram executados, e a única coisa que varia é a mensagem de alerta que é apresentada.

Dito por outras palavras, a página é pedida ao servidor, que executa:

echo

$this->executarSQL()

echo

$this->executarSQL()

echo

E quando chega ao browser tens:

<script type='text/javascript'>
var perg = confirm ('Pretende pagar a encomenda imediatamente?')
if (perg)
{
alert ('Total da sua encomenda e X Y')       
}
else
{
alert ('A sua compra foi efectuada, tem uma divida de X euros')
}
</script>
Edited by KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Não é exactamente como funciona o JavaScript, é mais em que âmbitos é que as linguagens funcionam. Podes utilizar o PHP para definir variáveis/constantes de JavaScript de forma dinâmica, mas não podes fazer o contrário, porque o PHP é executado antes do JavaScript.

Aquilo que podes fazer, assumindo que queres que o utilizador confirme dentro da própria página (sem refresh), é fazer uma chamada ao servidor por "um PHP" que execute a query que pretendes. O ideal é uma chamada AJAX em que recebes um objecto de volta para o JavaScript para garantir que a operação foi bem sucedida.

Espreita o JQuery.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

JQuery é uma biblioteca de JavaScript que tem as funções que precisas para fazeres isso.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Eu sou da opinião de não usar bibliotecas para algo simples como isso.

Aconselho-te a usar diretamente o API do DOM level 3.

XMLHttpRequest()

e

JSON()

Nota (tb para outros) Aconselho isto para ti que estás a aprender javascript como digo para quem está a aprender C a usar o open(), o read() e o write() antes de usar bibliotecas.

Edit:

Vê isto para aprenderes a usar a técnica AJAX.

https://developer.mozilla.org/en/Ajax

Edited by brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

A minha opção não está exactamente relacionada com a simplicidade das operações. Tem a haver com a interacção que iria depois adicionar para dar um feedback decente ao utilizador, que é facilmente implementada utilizando JQuery. Já estava a pensar dois passos à frente.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

A minha opção não está exactamente relacionada com a simplicidade das operações. Tem a haver com a interacção que iria depois adicionar para dar um feedback decente ao utilizador, que é facilmente implementada utilizando JQuery. Já estava a pensar dois passos à frente.

Podias-me dar um exemplo? já estive a pesquisar mas exemplos de jquery com php para a minha situação não vi nenhum, só vejo para tudo em javascript.

E mais uma questão, o php é primeiro lido que o javascript, mas quando aparecer as MessagesBox ao utilizador e eu tiver uma variável no javascript que fica a true se entrou numa ou na outra condição, e depois passa-la para o php assim já dá? ou continua sempre a ser tudo interpretado antes?

Link to comment
Share on other sites

E mais uma questão, o php é primeiro lido que o javascript, mas quando aparecer as MessagesBox ao utilizador e eu tiver uma variável no javascript que fica a true se entrou numa ou na outra condição, e depois passa-la para o php assim já dá?

Sim, se a enviares para o PHP dá.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Tens que pensar no JavaScript (e JQuery) como uma coisa independente do PHP. O PHP gera o código que é enviado para o browser e para o PHP nem interessa se a sintaxe do código que gerou está correcta, apenas interessa que a sintaxe do código PHP esteja correcta. O PHP nem sabe se está a escrever JavaScript, ou HTML, ou qualquer outra coisa que decidas, apenas se preocupa em escrever aquilo que tu lhe pedes. Logo, não faz sentido que andes à procura de JavaScript com PHP.

Basicamente, o browser faz a chamada à página e tudo o que o PHP tiver que fazer será feito antes do código chegar ao browser para o JavaScript ser interpretado. Para que o PHP execute alguma coisa depois de uma acção do utilizador na página, tens que fazer um pedido ao servidor.

Sobre o JQuery, tens:

http://jquery.com/

Mais especificamente, aquilo que procuras:

http://api.jquery.com/jQuery.ajax/

Podes ver vários exemplos no final da documentação, antes dos comentários.

Basicamente, aquilo que queres é fazer um request por uma página que vai executar o insert consoante o que o utilizador pedir:

$.ajax({
 type: "POST",
 url: "executa_insert.php",
 data: { escolha_user: "true" }
 success: function(data) { // recebes o resultado do PHP na variável data, que podes utilizar para validar a inserção
   alert("xpto");
 }
});

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Pff....

É a luta entre usar bibliotecas ou não. Eu uso jQuery mas não para coisas simples como esta, até desaconselho o uso do jQuery (ou equivalente) para coisas simples como esta especialmente para quem está a aprender.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

$.ajax({
 type: "POST",
 url: "executa_insert.php",
 data: { escolha_user: "true" }
 success: function(data) { // recebes o resultado do PHP na variável data, que podes utilizar para validar a inserção
alert("xpto");
 }
});

Eu como já não tenho muito tempo fiz de esta maneira:


var perg = confirm ('Pretende pagar a encomenda imediatamente?')
if (perg)
{
window.location.href='?id=confirmarEncomenda&op=0&prox_id_enc=$prox_id_enc&total_produtos=$total_produtos';
}
else
{
window.location.href='?id=confirmarEncomenda&op=1&prox_id_enc=$prox_id_enc&total_produtos=$total_produtos';
}

Resolvi fazer a passagem por url.

Obrigado pela ajuda.

Cumprimentos

Edited by brunoais
geshi! + indentação
Link to comment
Share on other sites

Os diferentes ambientes em que corre Javascript e PHP... embora seja possível "misturar" as duas linguagens esta possibilidade gera confusão para quem se está a iniciar.

A contar pelo alto número de dúvidas que surgem sobre isto penso que já merecia um Stickie a explicar isto. Algo com um título bem apelativo que não passasse despercebido, tipo: "PHP + Javascript". E de preferência que indicasse o melhor método/arquitectura a demonstrar a interação entre as duas linguagens.

Link to comment
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.