van dbase naar .xls en ok massmail versturen
het zijn hier wel 2 vragen.
Wat ik wilde weten is het volgende
bestaat er een mogelijkheid om met de uitkomst van een sql dit naar exel file te importen?
Zoja, hoe, kan iemand me helpen?
Mijn 2de vraag:
ik zou een massmail met php willen versturen.
Daar heb ik geen ervaring mee dus kan iemand me tippen hoe ik dit moet aanpakken?
Met dank
https://phpexcel.codeplex.com/, maar je kunt beter gewoon in PHPMyAdmin naar exporteren gaan en dan "CSV voor MS Excel" exporteren.
2.) Belangrijk is zo'n script is dat:
- Je een library gebruikt zoals SwiftMailer of PHPMailer, deze libraries zorgen ervoor dat de "headers" van je emails meteen goed staan (waardoor de kans dat de emails aankomen en niet in de spambox terecht komen veel groter is).
- Je niet in één keer 10.000 mails gaat versturen, het kan best zijn dat je dat de mails dan worden aangemerkt als spam.
1.) Bedoel je met PHP waarden ophalen uit de database en dan in een excel bestand zetten? dan zul je een externe library moeten gebruiken zoals 2.) Belangrijk is zo'n script is dat:
- Je een library gebruikt zoals SwiftMailer of PHPMailer, deze libraries zorgen ervoor dat de "headers" van je emails meteen goed staan (waardoor de kans dat de emails aankomen en niet in de spambox terecht komen veel groter is).
- Je niet in één keer 10.000 mails gaat versturen, het kan best zijn dat je dat de mails dan worden aangemerkt als spam.
SpreadsheetML-vorm. Je kunt die XLSX-bestanden dus ook met PHP openen, en vervolgens de XML manipuleren.
Afhankelijk van het gewenste resultaat kan SpreadsheetML nog wel eens een tijdrovende bezigheid zijn. Je kunt het sterk versimpelen door een template aan te maken in Excel, en dan via XPath de inhoud van alle relevante XML-nodes vervangen met een soort %VARIABELENAAM%. En er zijn ook PHP libraries als PHPExcel die het schrijven van Excel files versimpelen.
Toevoeging op 03/09/2015 20:34:38:
2.) Mass mailen is een ding apart, er zijn nogal wat zaken waar je rekening mee moet houden.
Er zijn wettelijke beperkingen, technische beperkingen, ed.
En je moet niet vergeten om als je dan een script hebt gemaakt, het eerst te testen tegen een dummy-ontvanger. Anders loop je het risico om direct gebeld te worden met boze reacties, door een flink deel van je e-mailbestand, met misschien nog een schadeclaim van je hostingpartij die dat geen fair use vindt, etc.
Dus in dit geval zou je het echt beter kunnen uitbesteden. Tenzij je denkt het structureel vaker te gaan doen, dan is het de tijdsinvestering waard.
1.) Het Excel 2007+ bestandsformaat is net als met andere Microsoft Office formaten gezipte XML-bestanden. Je kunt een XLSX-bestand gewoon de extentie .zip geven en dan openen. De opmaak van de XML-bestanden is in Afhankelijk van het gewenste resultaat kan SpreadsheetML nog wel eens een tijdrovende bezigheid zijn. Je kunt het sterk versimpelen door een template aan te maken in Excel, en dan via XPath de inhoud van alle relevante XML-nodes vervangen met een soort %VARIABELENAAM%. En er zijn ook PHP libraries als PHPExcel die het schrijven van Excel files versimpelen.
Toevoeging op 03/09/2015 20:34:38:
2.) Mass mailen is een ding apart, er zijn nogal wat zaken waar je rekening mee moet houden.
Er zijn wettelijke beperkingen, technische beperkingen, ed.
En je moet niet vergeten om als je dan een script hebt gemaakt, het eerst te testen tegen een dummy-ontvanger. Anders loop je het risico om direct gebeld te worden met boze reacties, door een flink deel van je e-mailbestand, met misschien nog een schadeclaim van je hostingpartij die dat geen fair use vindt, etc.
Dus in dit geval zou je het echt beter kunnen uitbesteden. Tenzij je denkt het structureel vaker te gaan doen, dan is het de tijdsinvestering waard.
Elian degroot op 03/09/2015 17:30:23:
Beste,
> het zijn hier wel 2 vragen.
..
> het zijn hier wel 2 vragen.
..
Ik raad aan om het lekker simpel te houden en dit via phpMyAdmin een database dump te laten uitvoeren in jouw gewenste format. Als je specifieker wilt zijn, moet je je inderdaad zoals boven vermeld om een bibliotheek zoals de "php-excel.class.php" maar dat vereist de nodige PHP kennis. Je kan ook dit script gebruiken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#http://stackoverflow.com/questions/15699301/export-mysql-data-to-excel-in-php
<?php
/*******EDIT LINES 3-8*******/
$DB_Server = "localhost"; //MySQL Server
$DB_Username = "username"; //MySQL Username
$DB_Password = "password"; //MySQL Password
$DB_DBName = "databasename"; //MySQL Database Name
$DB_TBLName = "tablename"; //MySQL Table Name
$filename = "excelfilename"; //File Name
/*******YOU DO NOT NEED TO EDIT ANYTHING BELOW THIS LINE*******/
//create MySQL connection
$sql = "Select * from $DB_TBLName";
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno());
//select database
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno());
//execute query
$result = @mysql_query($sql,$Connect) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());
$file_ending = "xls";
//header info for browser
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=$filename.xls");
header("Pragma: no-cache");
header("Expires: 0");
/*******Start of Formatting for Excel*******/
//define separator (defines columns in excel & tabs in word)
$sep = "\t"; //tabbed character
//start of printing column names as names of MySQL fields
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . "\t";
}
print("\n");
//end of printing column names
//start while loop to get data
while($row = mysql_fetch_row($result))
{
$schema_insert = "";
for($j=0; $j<mysql_num_fields($result);$j++)
{
if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep;
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
$schema_insert .= "\t";
print(trim($schema_insert));
print "\n";
}
?>
<?php
/*******EDIT LINES 3-8*******/
$DB_Server = "localhost"; //MySQL Server
$DB_Username = "username"; //MySQL Username
$DB_Password = "password"; //MySQL Password
$DB_DBName = "databasename"; //MySQL Database Name
$DB_TBLName = "tablename"; //MySQL Table Name
$filename = "excelfilename"; //File Name
/*******YOU DO NOT NEED TO EDIT ANYTHING BELOW THIS LINE*******/
//create MySQL connection
$sql = "Select * from $DB_TBLName";
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno());
//select database
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno());
//execute query
$result = @mysql_query($sql,$Connect) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());
$file_ending = "xls";
//header info for browser
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=$filename.xls");
header("Pragma: no-cache");
header("Expires: 0");
/*******Start of Formatting for Excel*******/
//define separator (defines columns in excel & tabs in word)
$sep = "\t"; //tabbed character
//start of printing column names as names of MySQL fields
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . "\t";
}
print("\n");
//end of printing column names
//start while loop to get data
while($row = mysql_fetch_row($result))
{
$schema_insert = "";
for($j=0; $j<mysql_num_fields($result);$j++)
{
if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep;
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
$schema_insert .= "\t";
print(trim($schema_insert));
print "\n";
}
?>
Deze kan je dan opslaan in dump.php of zoiets en als je dan de pagina bezoekt krijg je een downloadbare xls bestand voorgeschoteld. Deze zou alleen achter slot en grendel moeten gaan van dit is gewoon een hefige data leak.
Voor twee, dit hangt ervan af waar de Mail server zich bevind. Als het jouw lokale server is, word vrijwel elke email die je stuurt als spam gezien. Je kan ook de mail server van je provider gebruiken, maar daar staat vaak een limiet op. Je kan ook via de SMTP server van jouw email provider gebruiken om als "jouw email" de emails te versturen. Je kan ook een mail server huren, deze zijn gecertificeerd versturen en de verzonden emails worden niet direct gemarkeerd als spam. Deze rekenen vaak 10k emails p/month for $#.##
voor de rest, het zelfde als Bo Ter Ham zei over SwiftMailer & PHPMailer (en dan raad ik PHPMailer aan)
Gewijzigd op 03/09/2015 22:38:45 door Johan K
Mijn antwoord voor het exporteren van SQL naar XLSX is wel wat ingewikkeld voor een éénmalige actie, gezien de vraag kan je idd beter gaan voor phpMyAdmin.
Met massmail bedoel ik eigenlijk +- 100 mails.
Maar met de phpmailer lukt dit wel.
Met dank,
Elian
Gewijzigd op 04/09/2015 09:34:39 door elian degroot