PDF uit db wordt niet correct gedownload
s.schoolkrant in de query is het PDF bestand in de database.
Enige hulp zou erg welkom zijn. b.v.d.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
foreach($schoolkrant as $row) {?>
<h2><?php echo $row['titel']; ?></h2>
<p><a href="?schoolkrant_id=<?php echo $row['schoolkrant_id']; ?>" title="Download deze schoolkrant editie"><img src="<?php echo ADMIN_PATH; ?>schoolkrant/showthumbs.php?image_id=<?php echo $row['image_id']; ?>" alt="<?php echo $row['image_name']; ?>" width="<?php echo $row['thumb_width']; ?>px" height="<?php echo $row['thumb_height']; ?>px" /></a></p>
<?php //echo $row['info']; // $row['info'] is al opgemaakt als paragraph style (<p>) d.m.v. wysiwyg-editor ?>
<?php
}
try {
$db = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_GET['schoolkrant_id'])) {
$db->beginTransaction();
$schoolkrant_id = $_GET['schoolkrant_id'];
$stmt = $db->prepare("
SELECT
s.schoolkrant_id, s.titel, s.naam, s.type, s.size, s.datum, s.schoolkrant, s.info
FROM
schoolkrant s
WHERE
schoolkrant_id = :schoolkrant_id
");
$stmt->bindParam(':schoolkrant_id', $schoolkrant_id, PDO::PARAM_INT);
$stmt->execute();
$db->commit();
$array = $stmt->fetchAll();
foreach($array as $row) {
header("Content-Description: Schoolkrant download");
header("Content-Disposition: attachment; filename=".basename($row['naam']));
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length:".$row['size']);
header("Content-Type:".$row['type']);
header("Pragma: public");
ob_clean();
flush();
readfile($row['schoolkrant']);
exit();
}
}
}
# catch errors
catch(PDOException $e) {
if(isset($db)) {
$db->rollBack();
}
echo '<pre>';
echo 'Regelnummer: '.$e->getLine().'<br />';
echo 'Bestand: '.$e->getFile().'<br />';
echo 'Foutmelding: '.$e->getMessage().'<br />';
echo '</pre>';
}
?>
foreach($schoolkrant as $row) {?>
<h2><?php echo $row['titel']; ?></h2>
<p><a href="?schoolkrant_id=<?php echo $row['schoolkrant_id']; ?>" title="Download deze schoolkrant editie"><img src="<?php echo ADMIN_PATH; ?>schoolkrant/showthumbs.php?image_id=<?php echo $row['image_id']; ?>" alt="<?php echo $row['image_name']; ?>" width="<?php echo $row['thumb_width']; ?>px" height="<?php echo $row['thumb_height']; ?>px" /></a></p>
<?php //echo $row['info']; // $row['info'] is al opgemaakt als paragraph style (<p>) d.m.v. wysiwyg-editor ?>
<?php
}
try {
$db = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_GET['schoolkrant_id'])) {
$db->beginTransaction();
$schoolkrant_id = $_GET['schoolkrant_id'];
$stmt = $db->prepare("
SELECT
s.schoolkrant_id, s.titel, s.naam, s.type, s.size, s.datum, s.schoolkrant, s.info
FROM
schoolkrant s
WHERE
schoolkrant_id = :schoolkrant_id
");
$stmt->bindParam(':schoolkrant_id', $schoolkrant_id, PDO::PARAM_INT);
$stmt->execute();
$db->commit();
$array = $stmt->fetchAll();
foreach($array as $row) {
header("Content-Description: Schoolkrant download");
header("Content-Disposition: attachment; filename=".basename($row['naam']));
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length:".$row['size']);
header("Content-Type:".$row['type']);
header("Pragma: public");
ob_clean();
flush();
readfile($row['schoolkrant']);
exit();
}
}
}
# catch errors
catch(PDOException $e) {
if(isset($db)) {
$db->rollBack();
}
echo '<pre>';
echo 'Regelnummer: '.$e->getLine().'<br />';
echo 'Bestand: '.$e->getFile().'<br />';
echo 'Foutmelding: '.$e->getMessage().'<br />';
echo '</pre>';
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Marco
Dan is 't beter leesbaar.
Edit: Waarom open en sluit je php steeds? Je kan ook gewoon je html erin zetten hoor.
Gewijzigd op 01/01/1970 01:00:00 door Michael -
Ja klopt maar deze manier hanteer ik meestal en dan houd ik het liever consistent :)
Dit had je al gemerkt wanneer je niet met ob_start(); gewerkt had. (hier ga ik van uit a.d.h.v. lijn 51)
Als je die pdf nu eens zou openen met kladblok of een andere tekst editor zou je dit al gemerkt hebben..
Nu heb ik de opmaak en php van elkaar gescheiden maar nog krijg ik het niet voor elkaar om er een pdf van te maken. Sterker nog met de huidige code haal ik een pdf op van 0 kb waar niks in staat.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="block news">
<h1>Schoolkranten</h1>
<?php
foreach($schoolkrant as $row) {?>
<h2><?php echo $row['titel']; ?></h2>
<p><a href="<?php echo LIB_PATH; ?>schoolkrant/schoolkrant.php?schoolkrant_id=<?php echo $row['schoolkrant_id']; ?>" title="Download deze schoolkrant editie"><img src="<?php echo ADMIN_PATH; ?>schoolkrant/showthumbs.php?image_id=<?php echo $row['image_id']; ?>" alt="<?php echo $row['image_name']; ?>" width="<?php echo $row['thumb_width']; ?>px" height="<?php echo $row['thumb_height']; ?>px" /></a></p>
<?php //echo $row['info']; // $row['info'] is al opgemaakt als een paragraph style (<p>) d.m.v. wysiwyg-editor ?>
<?php
}
?>
</div>
<h1>Schoolkranten</h1>
<?php
foreach($schoolkrant as $row) {?>
<h2><?php echo $row['titel']; ?></h2>
<p><a href="<?php echo LIB_PATH; ?>schoolkrant/schoolkrant.php?schoolkrant_id=<?php echo $row['schoolkrant_id']; ?>" title="Download deze schoolkrant editie"><img src="<?php echo ADMIN_PATH; ?>schoolkrant/showthumbs.php?image_id=<?php echo $row['image_id']; ?>" alt="<?php echo $row['image_name']; ?>" width="<?php echo $row['thumb_width']; ?>px" height="<?php echo $row['thumb_height']; ?>px" /></a></p>
<?php //echo $row['info']; // $row['info'] is al opgemaakt als een paragraph style (<p>) d.m.v. wysiwyg-editor ?>
<?php
}
?>
</div>
schoolkrant.php
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
53
54
55
56
57
58
59
60
61
62
63
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
53
54
55
56
57
58
59
60
61
62
63
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_GET['schoolkrant_id'])) {
$db->beginTransaction();
$schoolkrant_id = $_GET['schoolkrant_id'];
$stmt = $db->prepare("
SELECT
s.schoolkrant_id, s.titel, s.naam, s.type, s.size, s.datum, s.schoolkrant, s.info
FROM
schoolkrant s
WHERE
schoolkrant_id = :schoolkrant_id
");
$stmt->bindParam(':schoolkrant_id', $schoolkrant_id, PDO::PARAM_INT);
$stmt->execute();
$db->commit();
$array = $stmt->fetchAll();
foreach($array as $row) {
header("Content-Description: Schoolkrant download");
header("Content-Disposition: attachment; filename=".basename($row['naam']));
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length:".$row['size']);
header("Content-Type:".$row['type']);
header("Pragma: public");
readfile($row['schoolkrant']);
}
}
}
# catch errors
catch(PDOException $e) {
if(isset($db)) {
$db->rollBack();
}
echo '<pre>';
echo 'Regelnummer: '.$e->getLine().'<br />';
echo 'Bestand: '.$e->getFile().'<br />';
echo 'Foutmelding: '.$e->getMessage().'<br />';
echo '</pre>';
}
?>
try {
$db = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_GET['schoolkrant_id'])) {
$db->beginTransaction();
$schoolkrant_id = $_GET['schoolkrant_id'];
$stmt = $db->prepare("
SELECT
s.schoolkrant_id, s.titel, s.naam, s.type, s.size, s.datum, s.schoolkrant, s.info
FROM
schoolkrant s
WHERE
schoolkrant_id = :schoolkrant_id
");
$stmt->bindParam(':schoolkrant_id', $schoolkrant_id, PDO::PARAM_INT);
$stmt->execute();
$db->commit();
$array = $stmt->fetchAll();
foreach($array as $row) {
header("Content-Description: Schoolkrant download");
header("Content-Disposition: attachment; filename=".basename($row['naam']));
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length:".$row['size']);
header("Content-Type:".$row['type']);
header("Pragma: public");
readfile($row['schoolkrant']);
}
}
}
# catch errors
catch(PDOException $e) {
if(isset($db)) {
$db->rollBack();
}
echo '<pre>';
echo 'Regelnummer: '.$e->getLine().'<br />';
echo 'Bestand: '.$e->getFile().'<br />';
echo 'Foutmelding: '.$e->getMessage().'<br />';
echo '</pre>';
}
?>
verder kan je eens var_dump van die $array doen om te zien wat je uberhaut vanuit de DB terug krijgt..
Klopt ik had het script even gekopieerd van een bestand waarin ik wel meerdere queries gebruikte en ben vergeten de transactie en commit weg te halen. En je hebt inderdaad gelijk wat betreft fetchAll, dat is niet echt nodig hier. Ik haal nu alleens de s.schoolkrant (blob) op maak gebruik van fetchColumn.
Met de 'var_dump' krijg ik een string terug met de inhoud van het PDF bestand alleen dan in de meest uiteenlopende tekens :)
Kortom ik ben nog niet veel verder. Iemand een suggestie of ervaringen hoe het wel goed te downloaden is? B.v.d.