Linken naar een pdf-bestand
De overlijdensberichten zelf zijn in pdf formaat, en worden stelselmatig met identieke naamgeving opgeslagen: "Familienaam_Voornaam_geboortedatum_overlijdensdatum.pdf". Beide datumvelden in het formaat YYYYMMDD en alle data zonder spaties.
Met php heb ik een pagina gemaakt waarin ik alle gegevens uit de databank haal, en ze allemaal, record voor record in een tabel laad. Dat lukt perfect.
Maar nu probeer ik er ook voor te zorgen dat de vermelde naam in de kolom Familienaam voorzien is van een link naar het juiste overlijdensbericht. Zodoende dat gebruikers de pdf kunnen laden door op de naam te klikken.
Aan de hand van een variabele voor de locatie van het bestand en van de gegevens uit de databank kan ik de url voor het te laden pdf bestand eenvoudig samenstellen. Wanneer ik de variabele $bestandsnaam opvraag, dan krijg ik exact de juiste URL.
Het is echter met het toevoegen van de link zelf ("<a href=\"" en "</a>") dat het fout loopt. Hier doe ik blijkbaar iets verkeerd. Wanneer ik de code uitvoer zoals in de code hieronder, dan krijg ik weliswaar een lijst met gegevens, waarbij de familienaam inderdaad voorzien is van een link (onderlijnd en blauw), maar de link is compleet verkeerd. Bovendien wordt op die manier enkel de pare records weergegeven, niet de onpare.
Er is dus duidelijk iets niet correct met die samenstelling van de variabele $link. Iemand die me kan helpen?
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
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
<!DOCTYPE html>
<html>
<head>
<title>Toon alle records uit de databank</title>
</head>
<body>
<h2>Overlijdensberichten</h2>
<table border="1">
<tr>
<th>Familienaam</th>
<th>Voornaam</th>
<th>Geboortedatum</th>
<th>Overlijdensdatum</th>
</tr>
<?php
include "dbConn.php"; // Gebruik het bestandje voor databank connectie
$str_pdflocatie="C:\Users\Luc\Downloads\Overlijdensberichten 20211104";
$str_link_begin="<a href=\"";
$str_link_midden=">";
$str_link_einde="</a>";
$records = mysqli_query($db,"select * from overlijdensberichten"); // haal de data uit de databank
while($data = mysqli_fetch_array($records))
{
$familienaam = $data['ob_familienaam'];
$voornaam = $data['ob_voornaam'];
$geboortedatum = $data['ob_geboortedatum'];
$geboortedatum = substr($geboortedatum,0,4).substr($geboortedatum,5,2).substr($geboortedatum,8,2);
$overlijdensdatum = $data['ob_overlijdensdatum'];
$overlijdensdatum = substr($overlijdensdatum,0,4).substr($overlijdensdatum,5,2).substr($overlijdensdatum,8,2);
$bestandsnaam = $familienaam . "_". $voornaam . "_". $geboortedatum . "_". $overlijdensdatum;
$bestandsnaam=$str_pdflocatie ."\\".$bestandsnaam.".pdf";
$link=$str_link_begin.$bestandsnaam.$str_link_midden.$familienaam.$str_link_einde;
?>
<tr>
<td><?php echo $familienaam; ?></td>
<td><?php echo $voornaam; ?></td>
<td><?php echo $data['ob_geboortedatum']; ?></td>
<td><?php echo $data['ob_overlijdensdatum'] ?></td>
</tr>
<?php
}
?>
</table>
<?php mysqli_close($db); // Sluit de connectie met de databank ?>
</body>
</html>
<html>
<head>
<title>Toon alle records uit de databank</title>
</head>
<body>
<h2>Overlijdensberichten</h2>
<table border="1">
<tr>
<th>Familienaam</th>
<th>Voornaam</th>
<th>Geboortedatum</th>
<th>Overlijdensdatum</th>
</tr>
<?php
include "dbConn.php"; // Gebruik het bestandje voor databank connectie
$str_pdflocatie="C:\Users\Luc\Downloads\Overlijdensberichten 20211104";
$str_link_begin="<a href=\"";
$str_link_midden=">";
$str_link_einde="</a>";
$records = mysqli_query($db,"select * from overlijdensberichten"); // haal de data uit de databank
while($data = mysqli_fetch_array($records))
{
$familienaam = $data['ob_familienaam'];
$voornaam = $data['ob_voornaam'];
$geboortedatum = $data['ob_geboortedatum'];
$geboortedatum = substr($geboortedatum,0,4).substr($geboortedatum,5,2).substr($geboortedatum,8,2);
$overlijdensdatum = $data['ob_overlijdensdatum'];
$overlijdensdatum = substr($overlijdensdatum,0,4).substr($overlijdensdatum,5,2).substr($overlijdensdatum,8,2);
$bestandsnaam = $familienaam . "_". $voornaam . "_". $geboortedatum . "_". $overlijdensdatum;
$bestandsnaam=$str_pdflocatie ."\\".$bestandsnaam.".pdf";
$link=$str_link_begin.$bestandsnaam.$str_link_midden.$familienaam.$str_link_einde;
?>
<tr>
<td><?php echo $familienaam; ?></td>
<td><?php echo $voornaam; ?></td>
<td><?php echo $data['ob_geboortedatum']; ?></td>
<td><?php echo $data['ob_overlijdensdatum'] ?></td>
</tr>
<?php
}
?>
</table>
<?php mysqli_close($db); // Sluit de connectie met de databank ?>
</body>
</html>
Vanwaar het opdelen van je 'a href' in losse variabelen? Je kan gewoon ook de anchor-tag zelf gebruiken, en de href waarde en de inhoud invullen.
Let op: Het openen van lokale files is in Chrome tegenwoordig standaard uitgeschakeld (niet toegestaan). Dat kun je blijkbaar weer inschakelen bij opstarten (vanaf de command line), of via een plugin.
Als je resulterende $bestandsnaam double quotes (") bevat gaat het mis. Gebruik daarom:
Code (php)
1
$link=$str_link_begin.htmlspecialchars($bestandsnaam).$str_link_midden.$familienaam.$str_link_einde;
Overigens gebruik je $link nu nergens ... (?). Geen idee overigens waarom je alleen de "pare" ("even" voor NL) records te zien krijgt. Ik zou vermoeden dat je dan ergens een keer extra mysqli_fetch_array() aanroept (maar er niks mee doet), maar dat zie ik niet in bovenstaande code staan.
> 2300 PDF-bestanden is voor MySQL geen probleem, ook niet als ze per stuk een paar megabytes groot zijn. Het is dan handig om 1 tabel te hebben met de metadata, en indices waar nodig:
Voorbeeldtabellen:
- bericht(id int, familie text, voornaam text, geboren date, overleden date)
incides op familie, voornaam, geboortedatum en overlijdensdatum kunnen handig zijn
- berichtpdf(bericht_fk int, pdf mediumblob)
Dan zorg je dat je die tabellen maakt met de engine InnoDB, en dan leg je een Foreign Key relatie aan tussen `berichtpdf`.`bericht_fk` en `bericht`.`id` . Je kunt dan een apart downloadscript maken in PHP waar je naar linkt alsof je naar het originele bestand linkt.
Quote:
In een mysql databank houdt onze genealogische vereniging de data van een grote hoeveelheid (>2300) overlijdensberichten bij.
En dan verwijs je naar:
Ik snap niet waarom je naar:
- Een persoonlijke map verwijst.
- Een downloadsfolder verwijst (die is eigenlijk bedoeld voor tijdelijke opslag, Windows kán die inhoud na bevestiging verwijderen)
Je draait PHP, je hebt een website, dus waarom parkeer die die overlijdensberichten niet op je webserver?
Twee bemerkingen:
-Ik probeer momenteel om het script draaiend te krijgen, en doe dit voorlopig inderdaad op mijn PC thuis. XAMP geïnstalleerd, en daarom verwijs ik natuurlijk ook naar een locatie op mijn harde schijf. Als ik dit goed kan krijgen, is het uiteraard de bedoeling om scripts en bestanden online te plaatsen.
Ik veronderstel dat er op de webserver zelf niet met "file:///" naar de pdf bestanden moet verwezen worden. Of wel?
-In het script hierboven wordt $link inderdaad niet gebruikt. Toen het fout liep heb ik vervangen door Op die manier krijg ik mijn html tabel met ALLA records zonder probleem.
Als ik gebruik, krijg ik ook de HTML tabel, maar enkel de pare records worden getoond.Dus enkel en alleen door de andere variabele te gebruiken. Voor de rest geen veranderingen in het script.
In het laatste geval krijgen alle familienamen in de eerste kolom een link (onderstreept en blauw) maar deze is totaal foutief.
Hieronder plak ik de koppeling die onderaan in de statusbalk van de browser verschijnt wanneer ik over de link van één der familienamen hover. In dit geval wordt de familienaam van het tweede record in de reeks getoond in de tabel (ADAM). In de koppeling zal je zien dat de familienaam uit het eerste record (ACKE)wordt vermeld. (Begrijpe wie kan)
c:\Users\Luc\Downloads\Overlijdensberichten 20211104\Acke_Jacqueline_19340313_20200813.pdf>Acke</a></td> <td>Jacqueline</td> <td>1934-03-13</td><td>2020-08-13</td> </tr> <tr><td><a href=
Er moet dus duidelijk iets fout lopen met de samenstelling van die variabele link$
Misschien gaat er nu bij iemand een lichtje branden? In elk geval reeds hartelijk dank voor jullie tips.
Er stond geen sluitende dubbel-qoute na je href. Dit had je ook kunnen ontdekken door de "bron" van je resulterende HTML te controleren (Ctrl+U in de meeste browsers).
En ik vermoed dat dit dan ook meteen alle records worden getoond. Nu "verdwijnen" de onpare records in de "link" van de pare records. Daarna was je twee keer een dubbel quote vergeten, en "klopte" het weer (= volgende record werd weer wel correct getoond).
Ik probeerde om de 2 screenshots (opgeslagen als jpg-bestandjes) hier in te voegen, maar dit lukt me niet. Hoe krijg ik dit voor elkaar?
Edit:
Onnodige niet-werkende afbeeldingen verwijderd
Gewijzigd op 14/11/2021 15:02:24 door - Ariën -
De URL moet je tussen de img-tags plaatsen.
Hartelijk dank Rob, probleem opgelost ! Nu worden inderdaad alle records getoond, en wordt de link naar het pdf bestand correct gemaakt.
Edit:
Do you believe this, Frank? We know that you are a forum-spammer. So, stop this annoying sh*t and get a life.
Gewijzigd op 22/11/2021 14:21:25 door - Ariën -