phpbar.de logo

Mailinglisten-Archive

[php] Download erst nach richtig ausgefuellten Formular

[php] Download erst nach richtig ausgefuellten Formular

Stefan Krister krs_(at)_treu-elektro.de
Fri, 11 Feb 2000 11:23:43 +0100


Hi Liste,

im nachfolgendem Script wir folgendes ermöglicht:

- der Kunde bekommt eine Datei erst dann downgeloadet, wenn er in
  einem Formular seine Kundennummer und seine Postleitzahl eintippt.
- Fehler in der Kundennummer / Postleitzahl werden mit Hinweisen
  quittiert
- Die Kundennummer wird lediglich anhand des bei uns üblichen Afbaus
  geprüft (4 Buchstaben, zwei Ziffern), da die Einbindung der
  Kundennummern aus der Warenwirtschaft einen zu großen Aufwand im
  Bereich der Aktualisierung bedeuten würde.
- Die Postleitzahl wird insofern geprüft, daß es fünf Ziffern sein
  müssen.

Der Einsprung in dieses Script kommt über einen Link der Dateiauswahl
zum Download:

<a
href="download.php3?pfad=/pfad/zur/datei/&datei=dateiname.ext">Laber</a>

Es funktioniert soweit. Möglicherweise fällt Euch noch was zur
Verbesserung ein ...

Speziell, wenn der Kunde ned ganz so blöd ist, kann er die Datei direkt
in die Adresszeile eingeben und bekommt das Teil. Welche Möglichkeiten
habe ich da, das zu unterbinden?

+++ download.php3 +++
<?php
$error = 0;                 // Default-Einstiegswert
if ($download)              // Download-Knopf gedrückt?
{
	if(!$kundennummer)  // Feld 'Kundennummer' leer?
	{
		$error = 1; // Keine Kundennummer angegeben
	} elseif ( !ereg( "([a-z]|[A-Z]){4}([0-9]){2}", $kundennummer) )
	{
		$error += 2; // FALSCHE Kundennummer angegeben
	} 
	if (!$postleitzahl)  // Feld 'Postleitzahl' leer?
	{
		$error += 4; // KEINE Postleitzahl angegeben
	} elseif ( !ereg( "([0-9]){5}", $postleitzahl) ) {
		$error += 8; // FALSCHE Postleitzahl angegeben
	}
	
/*
       Werte in $error:

              ! Kundennummer  ! Postleitzahl  !
       $error ! ohne ! falsch ! ohne ! falsch !
       ----------------------------------------
            0 !      !        !      !        !
       ----------------------------------------
            1 !  X   !        !      !        !
       ----------------------------------------
            2 !      !   X    !      !        !
       ----------------------------------------
            4 !      !        !   X  !        !
       ----------------------------------------
            5 !  X   !        !   X  !        !
       ----------------------------------------
            6 !      !   X    !   X  !        !
       ----------------------------------------
            8 !      !        !      !    X   !
       ----------------------------------------
            9 !  X   !        !      !    X   !
       ----------------------------------------
           10 !      !   X    !      !    X   !
       ----------------------------------------
*/	
	
	if ($error == 0) // Alles o.k. der Download kann beginnen ...
	{        
	        // Erzeugen einer EMail an die Abteilung
		$mailtext =  "Erfolgreicher Start eines Dateidownloads!\n\n";
		$mailtext .= "Kundennummer: $kundennummer\n";
		$mailtext .= "Postleitzahl: $postleitzahl\n";
		$mailtext .= "Datei:        $pfad/$datei\n\n";
		$mailtext .= "Kommentar:\n\n";
		$mailtext .= "$kommentar\n\n";
		$mailtext .= "Zusaetzliche Informationen:\n\n";
		$mailtext .= "Browser:      $HTTP_USER_AGENT\n";
		$mailtext .= "Adresse:      $REMOTE_ADDR\n";
		$mailtext .= "Hostname:     $REMOTE_HOST\n\n";
		$header = "From: webserver_(at)_treu-elektro.de\n";
		mail("eibdownload_(at)_treu-elektro.de", "Erfolgreicher Dateidownload",
$mailtext, $header);
		
		// Spezialheader, damit der Browser
		// a) des Zeug ned im Browserfenster anzeigt und
		// b) ned fragt, ob eine Anwendung zu wählen ist.
		// Nur der IE weiß es besser und fragt trotzdem nach der 
                // Anwendung.
		header("Content-type: application/octet-stream");
        	header("Content-Disposition: attachment; filename=$datei");
        	header("Content-Description: PHP3 Generated Data"); 
        	// Datei öffnen und zum Browser printen
        	$rfile = $pfad . "/" . $datei;
        	$rf = fopen("$rfile", "r");
        	$archiv_daten = fread($rf, filesize( $rfile ));
        	fclose($rf);
        	echo $archiv_daten;
        	// Leider gibt's keine Möglichkeit um zu prüfen, ob der 
        	// Download vollständig geklappt hat.    
        }
        
} 
?>	

Ab hier kommt der erklärende Text, das Formular und die je nach Inhalt
der Variablen $error erzeugten Fehlermeldungen.

MfG

Stefan Krister


--
You have moved your mouse. Windows must be rebooted for the
changes to take effect.


php::bar PHP Wiki   -   Listenarchive