Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
ao criar a funcao javascript eu pego o valor de um input (produto) e passo pra uma variavel javascript. dentro do java script eu inicio uma sessao php e preciso passar o valor da variavel javascript para uma variavel php. Resumindo: como podem ver no codigo abixo eu preciso fazer a variavel php vProduto ter o mesmo conteúdo que a variavel javascript vCodPro
function ValorItem() {
var **vCodPro **= parseFloat(document.getElementById('produto').value);
<?php
$**vProduto **= "document.write(vCodPro)";
var_dump(vProduto);
document.getElementById('idpro').value =
$Par = "EM={$_SESSION['userlogin']['emCODIGO']}";
$Fil = " where emCODIGO = :EM";
?>
}eu preciso pegar duas informações no banco de dados (mysql). primeiro eu pego a ID de um produto usando o select do html, mas preciso tb pegar alem da ID o valor desse produto. entao a minha ideia seria pesquisar a id do produto para encontar o registro correspondente e pegar o valor. se alguem puder me dar uma ideia de como fazer isso usando apenas um formulario, eu agradeço.
O que você está tentando fazer exige AJAX, pois o ID do produto será definido pelo usuário utilizando o select, mas os produtos estão na sua aplicação/banco.
Para isso você pode usar:
1 - Fetch, nativo do navegador: [https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API/Using_Fetch](https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API/Using_Fetch)
2 - ou, se estiver usando jQuery, $.get: [https://api.jquery.com/jquery.get/](https://api.jquery.com/jquery.get/)
Você apenas precisa criar um endereço na sua aplicação que receba um ID e retorne o valor. (Exemplo: example.com/valor-produto.php?id=32).
Daí com AJAX (JS) você busca o valor informando o ID em resposta ao evento **change** do seu select.Apenas complementando o que o Omar já explicou:
Existe um processo de execução dos serviços:
1 - O usuário faz a requisição.
2 - Seu servidor a recebe e chama o programa (PHP) responsável pelo processamento dela.
2 - O PHP faz o que precisa ser feito e responde com o conteúdo (HTML/JS/CSS crús) que servirá para que o navegador renderize o que você instruiu. Você pode nessa etapa inserir uma variável do PHP, assim por exemplo:
var id = parseInt( <?php echo $id ?> );
Pois após o PHP processar e responder, **o que chega ao navegador é isso:**
var id = parseInt( 5 );// se $id fosse 5...
Por isso código PHP é inacessível ao usuário, pois ele é executado dentro da máquina que está servindo a aplicação (servidor).
Entenda que não tem como eu executar PHP **novamente** após a interação do usuário, ao menos que eu mande OUTRA (uma segunda) requisição em background (sem que o usuário perceba) utilizando JS. A esse tipo de requisição em background damos o nome de AJAX: [https://developer.mozilla.org/pt-BR/docs/Web/Guide/AJAX](https://developer.mozilla.org/pt-BR/docs/Web/Guide/AJAX)
Resumindo: PHP roda no servidor, HTML/CSS/JS roda no navegador. São camadas e momentos totalmente diferentes.
Sacou?Além do ajax que é o mais comum de uso existe outra possibilidade.
Carregar os dados que deseja no carregamento do documento. Dessa forma não se precisa enviar nova requisição toda vez que algum produto é selecionado.
Qual melhor alternativa?
R: Ambas, pois depende do resultado a obter e da proposta da função.
Veja nesse exemplo onde simulo um resultado da query quando se acessa a página, assim uso esse resultado para criar um json com todos registros.
Com o json uso ele para criar um seletor de produtos, que ao ser alterado busco novamente no json os dados e informo mais conteúdos.
<?php
// SELECT produto_id, produto_nome, produto_preco FROM tabela_produtos
$exemplo_do_resultado = [
// 'id' => produto_id, 'nome' => produto_nome, 'preco' => produto_preco
['id' => 0, 'nome' => 'Maçã', 'preco' => '11'],
['id' => 1, 'nome' => 'Banana', 'preco' => '22'],
['id' => 2, 'nome' => 'Laranja', 'preco' => '33'],
['id' => 3, 'nome' => 'Melancia', 'preco' => '44'],
['id' => 4, 'nome' => 'Melão', 'preco' => '55']
];
?>
<div id="local_do_seletor"></div>
<div id="local_para_mostrar">
<p>Selecione um produto</p>
</div>
<script>
var selecionar = document.getElementById('local_do_seletor');
var mostrar = document.getElementById('local_para_mostrar');
var produtos = JSON.parse('<?= json_encode($exemplo_do_resultado) ?>');
// ou dependendo de como está trazendo o array do banco de dados
// var produtos = '<?= json_encode($exemplo_do_resultado) ?>';
function carregarLista() {
var seletor = document.createElement('select'), opcao = {};
window.produtos.forEach(function (coluna, indice) {
opcao = document.createElement('option');
opcao.value = coluna.id;
opcao.innerText = coluna.nome;
seletor.appendChild(opcao);
});
selecionar.addEventListener('change', verProduto, false);
selecionar.appendChild(seletor);
}
function verProduto(evento) {
var idAlvo = parseInt(evento.target.value), texto = '';
window.produtos.forEach(function (coluna, indice) {
if (coluna.id === idAlvo) {
texto = 'Você selecionou o produto ID (' + coluna.id + ') ';
texto += 'de nome (' + coluna.nome + ') ';
texto += 'e seu valor é (' + coluna.preco + ') ';
}
});
if (texto.length > 1) {
mostrar.children[0].innerText = texto;
}
}
carregarLista(); // Cria o seletor com as opções
</script>
**Prós:** Não é necessária uma nova requisição sempre que selecionar algum produto.
**Contras:** Quanto mais registros existirem mais lento a página é carregada. (Depende mais do hardware do usuário e sua conexão)
>
Citar
!!IMPORTANTE!!
Cuidado ao passar informações sigilosas com essa técnica, qualquer informação carregada nesse método o usuário terá acesso e ficará salva na máquina dele.
Vou estudar a opçãodo ajax, visto que a depender do cadastro de produtos fica inviável usar o json. Tenho um cliente que possui mais de 10.000 ítens em cadastrados, então como você mesmo disse, a lentidão será inevitável.
Mais uma vez muito obrigado a ambos.
<input type="text" class="form-control" id="produto" name="produto" onblur="BuscaPr()">
Ola. eu chamo a função JS a seguir no onblur do input acima. cikiqyeu is alerts para confirmar a chamada da função. ta chamando. mas alem dos alerts nao acontece mais nada. segue a função JS e o arquivo php que é chamado no ajax:
**FUNSAO JS**
function BuscaPr(){
var buscaTexto = document.getElementById('produto').value
alert(buscaTexto)
alert(buscaTexto.length)
$.ajax({
method: 'post',
url: 'sistema/produto/buscapr.php',
data: {busca: 'sim', texto: buscaTexto},
dataType: 'json',
success: function(retorno){
if(retorno.qtd == 0){
alert('q = 0')
$('#resbuscapro').html('<p>Não encontramos resultados para sua busca</p>');
}else{
alert('q + 0')
$('#resbuscapro').html(retorno.dados);
}
}
});
}
O ARQUIVO PHP:
<?php
if (!session_id()):
session_start();
endif;
require_once('_app/Config.inc.php');
require_once('./Lib.php');
if (isset($_POST['busca']) && $_POST['busca'] == 'sim'):
$textoBusca = strip_tags($_POST['texto']);
$retorno = array();
$Par = "EM={$_SESSION['userlogin']['emCODIGO']}";
$Fil = " where emCODIGO = :EM and prDESCRICAO like '%{$textoBusca}%' ";
$Produto = new Read;
$Produto->FullRead("select * from produto {$Fil}", $Par);
if ($Produto->getResult()):
$retorno['qtd'] = $Produto->getRowCount();
foreach ($Produto->getResult() as $pro):
extract($pro);
$retorno['dados'] .= '<a href="#" id='.$prCODIGO.':'.$prVENDA.'">'. utf8_encode($prDESCRICAO).'</a>';
endforeach;
endif;
echo json_encode($retorno);
endif;
?>Ao inves de usar o JavaScript, por que não usar o método $_GET ou $_POST?
comeca_aqui.html
<form method=get action=procuraproduto.php>
<input name=produto placeholder=produto>
<input type=submit>
</form>
procurarproduto.php
<?php
$produto=$_GET['produto'];
$sql="select produto from tbproduto where produto like ' %$produto%' ";
etc...resolvi o problema utilizando um array, onde eu adiciono as informações dos produtos a partir de um select. obrigado pela colaboração.
Dessa forma não é possível.
Veja o javascript é executado do lado do usuário ou seja na máquina dele.
Enquanto que o php é executado no lado do servidor, ou seja se o usuário já interage ou acessa o conteúdo o php já foi executado e não tem seus dados alterados mais.
Em resumo digamos isso:
>
Citar
É por essa má prática entre mais outras que muitas pessoas bloqueiam sites de enviarem javascript.
Fora a questão da manutenção que vai virar o verdadeiro inferno.
Não se deve alterar funções javascript com escrita do php.
O cache é uma coisa que se deve pensar, se escreve todo ou alguma parte de um escopo de função do javascript no php ao solicitar a mesma função novamente o cache ainda está ativo e caso a função agora seja diferente a uma infinidade de erros que podem ocorrer.
No caso crie a função a mesma só irá trabalhar com dados vindo de parâmetros, então se desejar re-executar a função basta então apenas charmar-la novamente enviando outra informação como parâmetro.
// JavaScript