login  Naam:   Wachtwoord: 
Registreer je!
 Forum

functie uitvoeren met link

Offline maigel - 11/07/2007 16:09 (laatste wijziging 11/07/2007 16:10)
Avatar van maigelPHP beginner hoe maak je een link waarbij een bestand wordt gedownload en tegelijkertijd een php-functie wordt uitgevoerd?
(javascript werkt niet had ik ergens gelezen, omdat clien-side en server-side niet kunnen samenwerken...)

17 antwoorden

Gesponsorde links
Offline Koen - 11/07/2007 16:13
Avatar van Koen PHP expert
maigel schreef:
omdat clien-side en server-side

Gaat wel?
Zet maar eens een Javascript alert box in een for lus van PHP xD
Offline maigel - 11/07/2007 16:14
Avatar van maigel PHP beginner zou kunnen, maar een php functie met onclick() laten samenwerken lukte mij toch niet hoor
Offline Grayen - 11/07/2007 16:23
Avatar van Grayen PHP ver gevorderde
Citaat:
javascript werkt niet had ik ergens gelezen, omdat clien-side en server-side niet kunnen samenwerken...


En of ze dat kunnen. Ooit gehoord van AJAX? Met AJAX kun je clien-side met server-size koppelen. Dat is een mogelijk oplossing. Ook zou je in de bijvoorbeeld het volgende kunnen doen (in puur PHP):

  1. <?php
  2. if(isset($_GET['action']) && $_GET['action'] === 'download')
  3. {
  4. // De PHP functie die je wilt uivoeren bij het downloaden.
  5. phpfunction();
  6.  
  7. $sFile = 'Locatie van het bestand dat moet worden gedownload.';
  8.  
  9. // Controleren of het bestand wel bestaat en of hij wel leesbaar is.
  10. if(is_readable($sFile) === true)
  11. {
  12. // De benodigde headers om een browser te vertellen om een bepaald bestand te downloaden.
  13. header('Content-Description: File Transfer');
  14. header('Content-Type: application/force-download');
  15. header('Content-Disposition: attachment; filename='.basename($sFile)); // basename geeft enkel de naam van het bestand terug.
  16.  
  17. // Leest het bestand uit.
  18. readfile($sFile);
  19. }
  20. }
  21. ?>
  22.  
  23. <a href="?action=download">Download</a>


Veel succes
Offline maigel - 11/07/2007 16:30
Avatar van maigel PHP beginner oké zal het eens proberen 
Offline marten - 11/07/2007 16:32
Avatar van marten Beheerder Booleans controlleer je met ===. Strings ,zoals hier, controleer je met ==
Offline Grayen - 11/07/2007 16:42 (laatste wijziging 11/07/2007 16:42)
Avatar van Grayen PHP ver gevorderde
Citaat:
Booleans controlleer je met ===. Strings ,zoals hier, controleer je met ==


Mag ik je vragen waar je dat uit opmaakt? Die opmerking zie ik wel vaker staan, maar dat is klink klare onzin. Zoek nou maar eens voor de verandering het op op php.net en wat vindt je en wat blijkt ook uit testen het volgende:

Citaat:
Example:
$a === $b

Name:
Identical

Result:
TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)


Ik kan me voorstellen dat mensen die gedachte krijgen, je controleer immers altijd met === bij booleans, omdat je er dan zeker van wilt zijn dat ze een boolean zijn en dat ze gelijk zijn van elkaar. Dat doen ===. Die operator controleert of hetgeen wat met elkaar wordt vergeleken van dezelfde type zijn en of ze gelijk zijn aan elkaar. Je kunt strings dus ook gewoon met === vergelijken.

Ik zou alleen nog graag willen weten welke sneller is, == of ===, waarschijnlijk ==, omdat je daar die extra controle niet hoeft te doen op type, maar veel zal het niet schelen, toch?
Offline maigel - 11/07/2007 17:02
Avatar van maigel PHP beginner @grayen
ik snap het niet zo goed, hoe moet ik m'n functie juist ingeven?
Offline Grayen - 11/07/2007 17:26
Avatar van Grayen PHP ver gevorderde Gewoon het script gebruiken wat ik twee post hiervoor heb gegeven. Vervang daarin de waarde van $sFile voor de locatie van het bestand dat moet worden gedownload en vervang phpfunction voor de naam van de php functie die je wilt uitvoeren.
Offline maigel - 11/07/2007 19:14 (laatste wijziging 11/07/2007 19:14)
Avatar van maigel PHP beginner en als ik nu dit wil uitvoeren bij het downloaden?
  1. include('../../dbconnect.php');
  2. $sQuery = "UPDATE htmldownloads SET downloads = (downloads + 1) WHERE naam = test";
  3. rResult = mysql_query($sQuery);

want ik krijg errors as ik dat wil uitvoeren
Offline Grayen - 11/07/2007 19:57
Avatar van Grayen PHP ver gevorderde Je kan dan gewoon phpfunctie(); vervangen voor die paar regels. Welke errors krijg je? zou je die willen posten, zodat ik kan kijken wat er fout is?
Offline maigel - 11/07/2007 20:08 (laatste wijziging 11/07/2007 20:10)
Avatar van maigel PHP beginner
  1. <?php
  2.  
  3. if(isset($_GET['action']) && $_GET['action'] === 'download')
  4.  
  5. {
  6.  
  7. // De PHP functie die je wilt uivoeren bij het downloaden.
  8.  
  9.  
  10. include('../../dbconnect.php');
  11. $sQuery = "UPDATE htmldownloads SET downloads = (downloads + 1) WHERE naam = test";
  12. rResult = mysql_query($sQuery); //line 58
  13.  
  14.  
  15.  
  16.  
  17.  
  18. $sFile = 'test.rar';
  19.  
  20.  
  21.  
  22. // Controleren of het bestand wel bestaat en of hij wel leesbaar is.
  23.  
  24. if(is_readable($sFile) === true)
  25.  
  26. {
  27.  
  28. // De benodigde headers om een browser te vertellen om een bepaald bestand te downloaden.
  29.  
  30. header('Content-Description: File Transfer');
  31.  
  32. header('Content-Type: application/force-download');
  33.  
  34. header('Content-Disposition: attachment; filename='.basename($sFile)); // basename geeft enkel de naam van het bestand terug.
  35.  
  36.  
  37.  
  38. // Leest het bestand uit.
  39.  
  40. readfile($sFile);
  41.  
  42. }
  43.  
  44. }
  45.  
  46. ?>
  47.  
  48.  
  49.  
  50. <a href="?action=download">Download</a>

dat was dus het script
en deze error krijg ik :
Parse error: parse error, unexpected '=' in /home/www/xenos.freehostia.com/downloads/html/test.php on line 58
Offline Grayen - 11/07/2007 20:22
Avatar van Grayen PHP ver gevorderde ehm rResult is nu een constante, je bent vergeten er een dollar teken voor te zetten . Dus het moet..
  1. $rResult = mysql_query($sQuery);
..zijn ;).
Offline maigel - 11/07/2007 20:26
Avatar van maigel PHP beginner die error is nu opgelost maar nu krijg ik de volgende error
  1. 1.
  2. Warning: Cannot modify header information - headers already sent by (output started at /home/www/xenos.freehostia.com/downloads/html/test.php:12) in /home/www/xenos.freehostia.com/downloads/html/test.php on line 76
  3.  
  4. Warning: Cannot modify header information - headers already sent by (output started at /home/www/xenos.freehostia.com/downloads/html/test.php:12) in /home/www/xenos.freehostia.com/downloads/html/test.php on line 78
  5.  
  6. Warning: Cannot modify header information - headers already sent by (output started at /home/www/xenos.freehostia.com/downloads/html/test.php:12) in /home/www/xenos.freehostia.com/downloads/html/test.php on line 80
  7. zzfq fqz fzq fzq fzq fzq f zqf zq f zq f zqf zq f zqf q f zqf zqf zq Download
Offline smoos - 11/07/2007 20:26 (laatste wijziging 11/07/2007 20:27)
Avatar van smoos PHP gevorderde Btw waarom wil je dat bewaren? Na de update doe je er toch niets meer mee dus is het beter om het niet op te slaan in een variabele

dus gewoon:
  1. mysql_query($sQuery);
Offline maigel - 11/07/2007 20:29
Avatar van maigel PHP beginner maar met dit script wordt het bestand gelezen (ook logisch met readfile) maar hoe maakt ik het dat je het ook echt kan downloaden
?
Offline Grayen - 11/07/2007 20:36 (laatste wijziging 11/07/2007 20:38)
Avatar van Grayen PHP ver gevorderde
Citaat:
Cannot modify header information

Dat is een hele bekende errror, die ontstaat, doordat er al output was toen deze headers werden aangeroepen.

Ter verduidelijking
Headers geven informatie over een bestand aan de browser. Als het bestand al is gemaakt (er is al output) dan kan je de informatie (headers) van het bestand niet meer wijzigen.

Vaak komt het voor dat je headers moet gebruiken terwijl je al output hebt. Dan moet je de output bufferen. Dit kan door gebruik te maken van de php functie ob_start() die dit bufferen aanzet. Deze functie moet dus helemaal boven je script komen te staan, nog voor dat er output is. En op het einde van je script plaats je deze functie: ob_end_flush(); Die functie zet het bufferen van de output weer uit.

Let er nadrukkelijk op dat er geen tekens (zelfs spaties of newlines) voor <?php tag staat, dat is namelijk ook al output. En dan zullen die twee functies alsnog geen nut hebben. Dus helemaal boven aan je script die ob_start(); functie plaatsen.

Citaat:
maar met dit script wordt het bestand gelezen (ook logisch met readfile) maar hoe maakt ik het dat je het ook echt kan downloaden
?

Dat is juist het hele nut van al die headers, om ervoor te zorgen dat het bestand laat downloaden, maar deze werken niet, omdat er output is voordat de headers waren uitgevoerd, vandaar ook die foutmeldingen .
Offline maigel - 11/07/2007 20:54 (laatste wijziging 11/07/2007 20:57)
Avatar van maigel PHP beginner jeej  met die buffering werkt het scriptje  

edit

in de tabel gebeurt nix  het aantal downloads wordt niet aangepast 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.221s