Ir para conteúdo
Fórum Script Brasil
  • 0

Tentando separar o HTML e o PHP


Frank K Hosaka

Pergunta

Todos os meus códigos estão em PHP. Hoje tentei montar um extrato contábil, de um lado o HTML solicitando as informações e do outro o PHP prestando o serviço.

É um trabalho para lá de difícil. 

Eu queria mandar 15 registros de cada vez pelo PHP, e eu não consegui.

Então, decidi mandar todos os registros para o HTML e o HTML ficou de mostrar os 15 registros de cada vez.

O problema é que eu não consegui fazer a função toLocaleString("pt-br") funcionar, então usei a função replace(".",",") - o problema é que não dá para separar os milhares com esse código. Eu fiz um teste isolado, e a função funciona, ele só não funciona no codigo do extrato contábil que fiz em HTML.

A seguir o meu código:

 

astudy.html

<script>
k=0
j=0
ob={}
async function diario() {
	form = new FormData();
	response=await fetch("astudy.php", {method: "POST", body: form});
	body=await response.json()
	j=body.length
	ob=body
	listadiario()}
function listadiario() {
	if (k<j) {
		exibe="<table><tr><th>Docto<th>Conta<th>Valor<th>Historico"
		for (i=k;i<k+15;i++){
			if (i==j){break}	
			if (ob[i].debito!=null){valor=ob[i].debito}
			if (ob[i].credito!=null){valor="<font color=red>"+ob[i].credito+"</font>"}
			valor=valor.replace(".",",")
			exibe+="<tr><td>"+ob[i].docto+"<td>"+ob[i].conta+"<td align=right>"+valor+"<td>"+ob[i].hist}
		exibe+="<tr><td><td><td><td><input type=submit value=Continua onclick=listadiario()></table>"
		recdiv.innerHTML=exibe
		k=i
		if (k>=j){k=0}
		}}
</script>
Extrato do dia <input type=submit onclick=diario() value="25/06/2022">
<div id=recdiv></div>

---------------------

astudy.php

<?php
$dia='2022/06/25';
$mysqli=new mysqli("localhost","root","","diario");
$query = $mysqli->query("select * from tbdiario where dia='$dia'");
$rows = mysqli_fetch_all($query, MYSQLI_ASSOC);
$json=json_encode($rows);
echo $json;

 

Ajuntei novamente o PHP com o HTML (ou seja, não usei a tecnologia da função assíncrona), e o problema do toLocaleString("pt-br") persistiu, e assim conclui que essa função não funciona se a variável for definida a partir de um objeto Jason.

 

astudy.php - problema na função toLocaleString("pt-br")

<style>.esconder {display:none} </style>
<script>
k=0
j=0
ob={}
function diario() {
	ob=JSON.parse(recdiv.innerHTML)
	j=ob.length
	alert(j)
	listadiario()}
function listadiario() {
	if (k<j) {
		exibe="<table><tr><th>Docto<th>Conta<th>Valor<th>Historico"
		for (i=k;i<k+15;i++){
			if (i==j){break}	
			if (ob[i].debito!=null){valor=ob[i].debito}
			if (ob[i].credito!=null){valor="<font color=red>"+ob[i].credito+"</font>"}
			valor=valor.toLocaleString("pt-br",{minimumFractionDigits:2})
			exibe+="<tr><td>"+ob[i].docto+"<td>"+ob[i].conta+"<td align=right>"+valor+"<td>"+ob[i].hist}
		exibe+="<tr><td><td><td><td><input type=submit value=Continua onclick=listadiario()></table>"
		recdiv.innerHTML=exibe
		recdiv.style.display='block'
		k=i
		if (k>=j){k=0}
		}}
function teste() {
	valor=1234.56
	valor=valor.toLocaleString("pt-br",{minimumFractionDigits:2})
	recdiv.innerHTML=valor
	recdiv.style.display='block'}
</script>
<?php
$dia='2022/06/25';
$mysqli=new mysqli("localhost","root","","diario");
$query = $mysqli->query("select * from tbdiario where dia='$dia'");
$rows = mysqli_fetch_all($query, MYSQLI_ASSOC);
$json=json_encode($rows);
echo "Extrato do dia <input type=submit onclick=diario() value='25/06/2022'>";
echo "<br><br><input type=submit value=Teste onclick=teste()>";
echo "<div id=recdiv class=esconder>$json</div>";
?>

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Descobri o problema do toLocaleString("pt-br"), ele só funciona para valores numéricos, ele não tem nenhum problema com funções assíncronas ou o Json. Usei o seguinte código para testar.

<meta charset="UTF-8">
<script>
function teste(){
	t='{"salário":1212}'
	i=JSON.parse(t)
	recdiv.innerHTML=i.salário.toLocaleString("pt-br",{minimumFractionDigits:2})}
</script>
<div id=recdiv></div>
<script>teste()</script>

Basta apenas colocar aspas em 1212 que o toLocaleString("pt-br") não vai funcionar.

Link para o comentário
Compartilhar em outros sites

  • 0

Agora que consegui resolver o problema da formatação, aqui está o código final. O arquivo HTML coloquei na pasta HTML, e o arquivo PHP na pasta PHP, dentro da pasta HTML.

html/diario.html

<script>
k=0
j=0
ob={}
async function diario() {
	form = new FormData();
	response=await fetch("php/diario.php", {method: "POST", body: form});
	body=await response.json()
	j=body.length
	ob=body
	listadiario()}
function listadiario() {
	if (k<j) {
		exibe="<table><tr><th>Docto<th>Conta<th>Valor<th>Historico"
		for (i=k;i<k+15;i++){
			if (i==j){break}	
			if (ob[i].debito!=null){valor=parseFloat(ob[i].debito).toLocaleString("pt-br",{minimumFractionDigits:2})}
			if (ob[i].credito!=null){valor="<font color=red>"+parseFloat(ob[i].credito).toLocaleString("pt-br",{minimumFractionDigits:2})+"</font>"}
			exibe+="<tr><td>"+ob[i].docto+"<td>"+ob[i].conta+"<td align=right>"+valor+"<td>"+ob[i].hist}
		if (i!=j) {exibe+="<tr><td><td><td><td><input type=submit value=Continua onclick=listadiario()>"}
		exibe+="</table>"
		recdiv.innerHTML=exibe
		k=i
		if (k>=j){k=0}
		}}
</script>
Extrato do dia <input type=submit onclick=diario() value="25/06/2022">
<div id=recdiv></div>

------------------------------

html/php/diario.php

<?php
$dia='2022/06/25';
$mysqli=new mysqli("localhost","root","","diario");
$query = $mysqli->query("select * from tbdiario where dia='$dia'");
$rows = mysqli_fetch_all($query, MYSQLI_ASSOC);
$json=json_encode($rows);
echo $json;

O problema desse código é que está amarrado a apenas uma data, vou procurar um calendário para mudar a data.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...