Mês passado fiz um post ensinando a gerar uma planilha excel com um código php, porém esta planilha era bastante simples, o php exportava praticamente um molde porque os dados eram todos inseridos diretamente na planilha.
Como criar e exportar planilhas do Excel com dados de um BD em PHP
Agora vamos partir para um nivel 2 deste projeto porque os dados serão fornecidos por um banco de dados mysql, para isto segue o código abaixo que já está comentado, deixando somente uma dica adicional, que está abaixo do código.
<?php
//-- conecta no banco de dados automaticamente, tem um post aqui
//-- no blog ensinando como fazer
include "conecta_mysql.inc";
//- Definimos o nome do arquivo que será exportado -------------
$arquivo = 'planilha.xls';
//--- Consultando dados no banco -------------------------------
$sql = mysql_query("SELECT campo1,campo2,campo3
FROM tabela") or die(mysql_error());
//--- Fazendo o preenchimento inicial --------------------------
$row=mysql_fetch_array($sql);
//--- Contando o numero de linhas que a consulta gerou ---------
$sql2 = mysql_query("SELECT * FROM formulario");
$aux = mysql_num_rows($sql2);
// Criamos uma tabela HTML com o formato da planilha
$html = '';
$html .= '<table border="1">';
$html .= '<tr>';
$html .= '<td colspan="3"><b>Gerando uma planilha</b></td></tr>';
// -- Cabeçalho do arquivo -------------------------------------
$html .= '<tr><td align="center"><b>Campo 1</b></td>';
$html .= '<td align="center"><b>Campo 2</b></td>';
$html .= '<td align="center"><b>Campo 3</b></td></tr>';
//--------------------------------------------------------------
for($i=1; $i<=$aux; $i ++){
$sql = mysql_query("SELECT campo1,campo2,campo3 FROM tabela
WHERE id = ".$i) or die(mysql_error());
$row=mysql_fetch_array($sql);
$html .= '<tr><td>'.$row[0].'</td><td>'.$row[1].'</td>
<td>'.$row[2].'</td></tr>';
}
$html .= '</table>';
// Configurações header para forçar o download
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
header ("Content-Description: PHP Generated Data" );
// Envia o conteúdo do arquivo
echo $html;
exit;
?>
Veja que dentro do for, usei o índice $i para comparar com a id (chamada de campo1) fazendo assim a montagem correta da planilha. Se eu não tivesse feito esta comparação, eu teria $i linhas iguais no excel.
Até a próxima!
😉
Anúncios
Bom dia..
ando dando uma fuçada em seu blog, e o conteúdo postado aqui é realmente bom.
Mas, neste artigo, por exemplo… tenho algumas sugestões para melhorar o script…
Você fez uma query para consulta geral, outra pra contar as linhas, e dentro do for, vc faz um select por vez a cada iteração do laço…
Cara…. se tiver 5 mil registros na tabela, isso aí sobrecarregará muito o sistema…
Um dica, em resumo, é usar apenas o Primeiro Select..
Armazenar tudo num vetor (com o fetch_array)..
Aí pra fazer o laço vc pode usar o while, usando o resultset do array… ou então dá um count no array e faz um while ou o for mesmo baseado na qtde de indices que tem o array…
Aí dentro do laço, vc vai iterando os índices do array… e pegando todos os campos.
Com isso… vc poderá diminuir de 5 mil selects para um…
Falou
Kra, mando bem no comentário, valeu!
eu sou noob em sql ainda….to fazendo a matéria na facul esse semestre só, aí o que eu sei só serve pra apagar fogueira msm, no geral da pra fazer algumas coisas mas nem tudo fica 100%, vlw msm ae a colaboração, inclusive se tiver alguma consideração sobre qualquer outro post e quiser contribuir, fique a vontade!
Assim que tiver um tempinho vou testar sua idéia e se rolar msm posto o resultado aki tb.
vlw kra,
att
sanoj
😉
Se você quisesse mandar o excel criado pelo select direto para download automático no servidor, como faria?
cara não sei te falar viu, mas pelo que eu vi tem diferença de navegador pra navegador. Eu testei no firefox só, e o arquivo abre direto para o usuario…. no explorer se não me engano não é a mesma coisa…
como faço para que quando eu selecionar o nome aparecer o id co nome
<?php
//acesso ao bd
include ('connection.php');
$sql = mysqli_query($db,"SELECT email,id FROM usuarios") or die(mysqli_error());
while($row=mysqli_fetch_array($sql)){
echo "”.$row[‘email’].””;
}
mysqli_close($con);
?>
Oi Fabiano,
Não entendi direito sua pergunta! Você quer selecionar o nome e fazer aparecer o nome com o id correto?
Quando você fala selecionar, quer dizer fazer o SELECT no banco de dados?