Verwijzing naar bestand.

Status
Niet open voor verdere reacties.

machielv

Gebruiker
Lid geworden
20 jan 2012
Berichten
54
Ik wil graag op de site van de vereniging een bestand laten downloaden nadat het lid zijn lidnummer heeft ingevoerd.

Bijvoorbeeld:

Geef hier je lidnummer 0000-0000 in om je afstanden tabel te downloaden.

Heb zelf geen verstand van html of php weet wel hoe ik het evt. moet invoegen.

Hoop dat het mogelijk is.

Machiel

Er staan ca. 25 verschillende bestanden op de server voor ieder lid een ander.

Mijn verzoek komt erop neer dat indien het lid zijn nummer invoert b.v. 0123-0456 in voert en dan op Ga klikt ik naar het bestand 0456 op de server ga.

Als voorbeeld:
Vul hier je lidnummer in 0000-0000 (invoerveld) klik op Bevestig
 
Laatst bewerkt:
En hoe is de data nu opgeslagen?

Let wel op de regels omtrendt AVG, want ook ritregistratie (als je dat bedoeld) valt onder privacy.
Ik denk dat het niet slim is om deze enkel achter een lidnummer te verbergen. Op zijn minst een gecontroleerd account met gebruikersnaam en password lijkt mij van groot belang voor de veiligheid.
 
Heb je een html5 website en wil je alléén moderne browsers ondersteunen?
Dan is het vrij eenvoudig
Code:
<a href="/pad/naar/bestand.pdf" download="bestand">Klik hier om bestand te downloaden</a>

Meer info over 'download' vind je op
https://www.w3schools.com/tags/att_a_download.asp

Hier vind je de tabel vanaf welke versie de browsers de 'download' ondersteunen.
https://caniuse.com/#feat=download

Laat het even weten of je oudere browsers wilt ondersteunen want dan is wat Javascript nodig.
 
Laatst bewerkt:
Mijn verzoek komt erop neer dat indien het lid zijn nummer invoert b.v. 0456 klikt op Bevestig het pdf bestand 0456 op de server gaat downloaden.

Als voorbeeld:
Afstanden tabel downloaden.

Vul hier je laatste 4 cijfers van je lidnummer in 0000 (invoerveld) klik op Bevestig
 
Laatst bewerkt:
Hoe zit het hiermee...?
Toch wel belangrijk...

Een lidnummer is zo geraden.

Let wel op de regels omtrendt AVG, want ook ritregistratie (als je dat bedoeld) valt onder privacy.
Ik denk dat het niet slim is om deze enkel achter een lidnummer te verbergen. Op zijn minst een gecontroleerd account met gebruikersnaam en password lijkt mij van groot belang voor de veiligheid.
 
Laatst bewerkt:
Heb je een html5 website en wil je alléén moderne browsers ondersteunen?
Dan is het vrij eenvoudig
Code:
<a href="/pad/naar/bestand.pdf" download="bestand">Klik hier om bestand te downloaden</a>

Meer info over 'download' vind je op
https://www.w3schools.com/tags/att_a_download.asp

Hier vind je de tabel vanaf welke versie de browsers de 'download' ondersteunen.
https://caniuse.com/#feat=download

Laat het even weten of je oudere browsers wilt ondersteunen want dan is wat Javascript nodig.
Het idee is leuk, maar het houdt niet tegen dat anderen dit ook kunnen downloaden, en vooral als alles openbaar onbeveiligd
staat. Potentieel persoonsgegevens lek, vrees ik.
 
Het idee is leuk, maar het houdt niet tegen dat anderen dit ook kunnen downloaden, en vooral als alles openbaar onbeveiligd
staat. Potentieel persoonsgegevens lek, vrees ik.
Mee eens, het hangt af van de content van de download. Als voorbeeld, een wedstrijd overzicht van een sportvereniging is geen probleem als dit gekoppeld is aan de laatste 4 cijfers. Dit eenvoudige formulier mag niet als de download een gedeelte van het ledenbestand bevat, ook weer als voorbeeld.
 
Afgezien van het "of het mag" verhaal, kan je hiermee verder?

HTML:
<form id="downloadform" action="">
  <a id="hulplinkje" href="/pad/naar/0000.pdf" download="0000" style="display:hidden"></a>
  <label for="invoer">Laatste 4 cijfers van lidnummer</label><br />
  <input type="text" id="invoer" name="invoer" pattern="[0-9]{4}" placeholder="4 cijfers">
  <button type="submit">Verstuur</button>
</form>

<script>
document.querySelector("#downloadform").onsubmit = function(event) {
  event.preventDefault();
  // volgende regel wijzigen in juiste pad naar map
  let pathToFiles = '/form1/files/';
  let hulpLinkje = document.querySelector("#hulplinkje");
  hulpLinkje.setAttribute('href', pathToFiles + this.invoer.value + '.pdf');
  hulpLinkje.setAttribute('download', this.invoer.value);
  hulpLinkje.click();
}
</script>
 
Laatst bewerkt:
Getest

Mijn pad naar het bestand.

href="http://mijnsite.nl/media/2020_Vluchten/
In deze map staat het bestand 0490.pdf
Na op verstuur te hebben gedrukt verschijnt 0490.html om op te slaan.
Ik verander de extensie in pdf en kies opslaan.
De volgende mededeling verschijnt:
Mislukt geen bestand.
Dit is hetzelfde als ik als html opsla.
Het invoerveld hoeft ook niet groter te zijn dan 4 posities.
 
Je moet wel in de href naar je bestand linken, en niet naar de map.
Standaard linkt deze naar een dummy-bestand 0000.pdf

Maar even ter informatie: Mogen anderen via eenvoudig speurneuswerk de andere bestanden downloaden?
Het is toch iets wat ik wou weten voor een sluitend advies.
 
Laatst bewerkt:
Na op verstuur te hebben gedrukt verschijnt 0490.html om op te slaan.
Dan is het relatieve pad vanaf de root niet goed of het bestand bestaat niet. De volgende regel veranderen is voldoende:
Code:
let pathToFiles = '/media/2020_Vluchten/';

De html code bij <a ....> veranderen heeft geen invloed, die wordt door de Javascript goed ingevuld.
Als het goed is verschijnt (in jouw voorbeeld) 0490.pdf bij Opslaan als... , nadat je 0490 hebt ingevoerd.

Vooraf vanuit Javascript een controle doen of een bestand bestaat is met "ajax" mogelijk maar dan worden door browsers eisen gesteld aan webserver en scripts, bijvoorbeeld dat de webserver een ssl certificaat moet hebben voor https.

Het invoerveld hoeft ook niet groter te zijn dan 4 posities.
Je kan het volgende veranderen in de <input>
Code:
<input type="text" id="invoer" name="invoer" pattern="[0-9]{4}" [B]maxlength="4" style="width:8em"[/B] placeholder="4 cijfers">

Om de breedte van de input aan te passen kan je de 8em een andere waarde geven.
 
Laatst bewerkt:
Opgelost.

Hartelijk dank voor de medewerking het werkt na de aanvullende informatie perfect.

N.a.v. uw opmerkingen nog even het volgende.

Is het mogelijk dat u in het script eerst een inlogcode van b.v. 6 cijfers en 2 letters (345675Pv "zomaar bedacht") moeten ingeven welke we aan de leden verstrekken dient te worden ingevoerd alvorens verder te kunnen met downloaden.

Het bestand bevat v.w.b. de privacy enkel de volgende gegevens. 01129087 J. de Melker en dan een overzicht met Plaatsnamen en de afstand hemelsbreed naar zijn huis.

Hoop nog eens een keer een beroep op u te mogen doen als dit nodig zou zijn.

Met vr. groet
Machiel
 
Oef, dan zou ik me maar even goed inlezen in de AVG-wetgeving, en zul je toch wat meer beveiligingen moeten hebben.
Dit vereist wat meer scriptingwerk, en met name met PHP. Je moet eerst een systeem hebben om de inlogcodes in op te slaan, waarna je iemand toegang geeft.
En uiteraard mogen de bestanden ook niet openbaar oproepbaar zijn doordat iemand met getallen in de URL speelt.

Het kan wel, maar het is niet 1-2-3 gebouwd.
 
Laatst bewerkt:
Is het mogelijk dat u in het script eerst een inlogcode van b.v. 6 cijfers en 2 letters (345675Pv "zomaar bedacht") moeten ingeven welke we aan de leden verstrekken dient te worden ingevoerd alvorens verder te kunnen met downloaden.
Zoals php4u aangeeft is dit geen 1-2-3 om de reden dat dit in php op de webserver moet worden afgehandeld. Codes die in Javascript worden "verstopt" zijn door iedereen terug te lezen.

Alternatief: 2 invoervelden en bestandsnaam is combinatie van deze 2 velden.
Bijvoorbeeld: lidnr is 2618 en persoonlijke code is 5z4PxM. Het pdf bestand heet dan 2618-5z4PxM.pdf
Omdat de naam van het pdf bestand dan moeilijker te raden is, is het geheel iets veiliger.
Code:
<form id="downloadform" action="">
  <a id="hulplinkje" href="#" download="0000" style="display:hidden"></a>
  <label for="invoer">Laatste 4 cijfers van uw lidnummer</label><br />
  <input type="text" id="invoer" name="invoer" pattern="[0-9]{4}" maxlength="4" style="width:6em" placeholder="4 cijfers"><br />
  <label for="controle">Uw persoonlijke alfanumerieke code</label><br />
  <input type="text" id="controle" name="controle" pattern="[a-zA-Z0-9]{6}" maxlength="6" style="width:6em" placeholder="6 tekens"><br />
  <button type="submit">Verstuur</button>
</form>
 
<script>
document.querySelector("#downloadform").onsubmit = function(event) {
  event.preventDefault();
  // volgende regel wijzigen in juiste pad naar map
  let pathToFiles = '/media/2020_Vluchten/';
  let hulpLinkje = document.querySelector("#hulplinkje");
  let dwnl = this.invoer.value + '-' + this.controle.value;
  let href = pathToFiles + dwnl + '.pdf';
  hulpLinkje.setAttribute('href', href);
  hulpLinkje.setAttribute('download', dwnl);
  hulpLinkje.click();
}
</script>
 
Aanpassing

Heb het getest met het volgende resultaat.
Schermafbeelding 2020-02-20 om 20.19.17.png

Zou graag achter het vakje code de tekst Uw alfanumerieke zien staan.

Mvg.
Machiel
 

Bijlagen

  • Schermafbeelding 2020-02-09 om 10.50.41.png
    Schermafbeelding 2020-02-09 om 10.50.41.png
    177,2 KB · Weergaven: 49
Laatst bewerkt:
Door de <label> regel om te wisselen met de <input> regel kan je tekst en invoervakje omwisselen.
Door <br /> weg te halen zet je tekst voor/achter het invoervakje i.p.v. erboven.
Teksten in de html kan je aanpassen zoals je ze wilt hebben.

De onderste bijlage in je bericht is mij niet duidelijk, vermoedelijk is dit een captcha afbeelding maar die is niet met een paar regels code te maken.
 
Laatst bewerkt:
Aanpassing.

Dank voor de info is geslaagd en werkt prima.

De tweede afbeelding was een foute die ik niet kon verwijderen.

Nogmaals bedankt.
Machiel
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan