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

Download do PHP só funciona se você ficar de braço cruzado


Frank K Hosaka

Pergunta

Fiquei o dia todo testando o download do PHP, tentando atualizar a tela do orçamento, mas não consegui.

Eu só consegui fazer o download funcionar, quando eu pedi para ele não fazer mais nada.

Existe algum macete para fazer o download e em seguida pedir para o PHP atualizar a tela do orçamento?

A Gemini sugeriu usar o JavaScript para redirecionar, tipo echo "<script>window.location.href='orcamento.php'</script>; o download funcionou, mas o Java Script não.

<?php
class ControleOrcamento extends Controle 
{

// ...

public function bling($pedido)
    {
        $pBling=$_GET['pBling'];
        $this->Conexao->update("tbpedido set bling=$pBling where ped=$pedido");
      	$contato="Consumidor Final";
        $itens=$this->Conexao->select("* from tbhistped where ped=$pedido");
        $desconto=$this->Conexao->select("sum(subtotal) as soma from tbhistped
            where subtotal < 0 and ped=$pedido")[0]->soma;
        $total=$this->Conexao->select("total from tbpedido where ped=$pedido")[0]->total;
      	$data=date('d/m/Y',strtotime($this->Conexao->select("dia from tbpedido 
            where ped = $pedido")[0]->dia));
        $dados = array(
            array("Número pedido","Nome Comprador","Data","CPF/CNPJ Comprador","Endereço Comprador",
                  "Bairro Comprador","Número Comprador","Complemento Comprador","CEP Comprador","Cidade Comprador",
                  "UF Comprador","Telefone Comprador","Celular Comprador","E-mail Comprador","Produto",
                  "SKU","Un","Quantidade","Valor Unitário","Valor Total",
                  "Total Pedido","Valor Frete Pedido","Valor Desconto Pedido","Outras despesas","Nome Entrega",
                  "Endereço Entrega","Número Entrega","Complemento Entrega","Cidade Entrega","UF Entrega",
                  "CEP Entrega","Bairro Entrega","Transportadora","Serviço","Tipo Frete",
                  "Observações","Qtd Parcela","Data Prevista","Vendedor","Forma Pagamento",
                  "ID Forma Pagamento"));
        foreach($itens as $item)
        {
            if($item->subtotal>0)
            {
                $dados[]=array($pBling,$contato,$data,null,null,
                    null,null,null,null,null,
                    null,null,null,null,null,
                    $item->codprod,$item->un,$item->qt,$item->unitario,$item->subtotal,
                    $total,null,$desconto,null,null,
                    null,null,null,null,null,
                    null,null,null,null,null,
                    null,1,$data,null,1,
                    0);
            }
        }
        $arquivo = fopen("$pBling.csv", "w");
        fputcsv($arquivo, $dados[0]);
        foreach ($dados as $linha) 
        {
            if ($linha != $dados[0]) 
            {
                fputcsv($arquivo, $linha);
            }
        }
        fclose($arquivo);
      	if (file_exists("$pBling.csv"))
        {
        	header('Content-Description: File Transfer');
    		header('Content-Type: application/octet-stream');
    		header('Content-Disposition: attachment; filename=' . basename("$pBling.csv"));
    		header('Content-Length: ' . filesize("$pBling.csv"));
    		readfile("$pBling.csv");
          	unlink("$pBling.csv");
		} 
    // return header("location:?ControleOrcamento.inicio");
    exit;
    }
    

 

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

2 respostass a esta questão

Posts Recomendados

  • 0

Depois de várias tentativas, creio que não é possível fazer mais nada depois que você pede para o PHP fazer o download; se você coloca uma instrução para voltar para o orçamento, ele faz o serviço, mas não faz o download, isso porque o PHP carrega todas as instruções de uma vez para o navegador. Não há como pedir para o PHP fazer por parte, eu até usei o comando sleep. Não sei para que inventaram esse comando.

Por outro lado, dá para fazer um monte de gambiarra antes de pedir para o PHP fazer o download com a ajuda do JavaScript, assim:

<script>
  
function bling(pedido)
{
	pBling=prompt("digite o número do pedido na Bling")
	window.location.href="?ControleOrcamento.bling."+pedido+"&pBling="+pBling
	alert('Por favor, aguarde o download')
  	location.replace()
}
</script>

Essa função foi definida no formulário do orçamento, e ele é executado a partir de um link. O Java Script pede o número do pedido na Bling, a seguir ele pede para o PHP fazer o download, a seguir pede para o usuário aguardar, a seguir o navegador (testei o Chrome e o Edge) confirma o download, e finalmente o usuário clica ok no alerta, e finalmente o Java Script atualiza a tela, onde o usuário vê a confirmação do pedido da Bling no orçamento PHP.

Esse Java Script é muito bom, se bem que toda essa improvisação eu consegui na base da tentativa e erro.

Link para o comentário
Compartilhar em outros sites

  • 0

Na hora de mandar o arquivo para a Bling, a Bling se recusou de receber porque estava fora do padrão que ela esperava. Eu fui ver o arquivo, e levei um susto.

Hoje eu aprendi que o comando do PHP header( ) é poderoso, mas se tiver alguma ponta solta lá atrás, o resultado é um completo desastre.

Para resolver o meu problema, eu tive que tirar o comando include('menu.php'), e no lugar eu criei uma conexão com o banco de dados $mysqli=new mysqli etc. Ou seja, eu devo ter feito muita besteira no arquivo menu.php para atrapalhar o serviço de download do PHP.

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,7k
×
×
  • Criar Novo...