Beiträge von Arne Drews

    Hallo,

    Es tut mir leid, dass Dir scheinbar niemand innerhalb von einer Stunde geholfen hat.
    Aber in einem Forum lässt man die Fragestellung der Etikette halber stehen und postet die Lösung dazu, denn andere mit ähnlichem Problem könnten darin schon die auch für sich finden.

    Gruß Arne

    Das hast Du eigentlich bei jedem Hosting-Paket dabei.
    Je nach Preisklasse kann es Begrenzungen geben, wie viele E-Mail Accounts Du anlegen darfst, aber generell bietet das jeder halbwegs vernünftige Hosting-Provider mit an.

    Ich kann auch ehrlich gesagt nicht verstehen, dass es Unternehmen mit eigener Website gibt und dann als Kontakt GMX, T-Online, o.ä. haben...

    Hallo,

    Ich denk, dass Du in der URL-Adresszeile des Browsers weiterhin

    Code
    www.example.com/design

    stehen haben willst, aber intern der Inhalt von

    Code
    [COLOR=#333333]www.example.de/index.php?route=products[/COLOR]

    geladen werden soll, oder?

    Das nennt sich UrlRewriting und ist relativ einfach, wenn man sich das mal genau anschaut.
    Du solltest eine .htaccess anlegen ( wenn Apache im Einsatz ist ), sofern noch nicht vorhanden und dort bspw. diese Zeilen hinterlegen:

    Apache Configuration
    RewriteEngine On
    RewriteBase /
    
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    
    RewriteRule ^ index.php [QSA,L]


    Diese Zeilen sorgen dafür, dass alle Anfragen, die nicht direkt auf eine Datei oder ein Verzeichnis zeigen auf die index.php umgeleitet wird.
    Jetzt kannst Du in der index.php steuern, welcher Inhalt geladen wird. Deinen Wert "design" findest Du in der Superglobalen $_SERVER['REQUEST_URI'].

    Ganz trivial und unschön könntest Du das bspw. so umsetzen:

    PHP
    if ( $_SERVER['REQUEST_URI'] == '/design' ) {
    
    
        $route = 'products';
    
    
    }


    Wie gesagt, ist keine tolle Verabrietung, aber es soll es Dir nur veranschaulichen.

    Eine Einführung, wie man das verarbeiten könnte findest Du hier: http://www.php-rocks.de/thema/58-einfa…s-umsetzen.html
    Wenn Du Fragen dazu hast gerne auch nachfragen.

    Gruß Arne

    Zitat von djlong

    Ich glaube, ich lebe einfach damit, dass das PDF-File im Browser geöffnet wird

    Ist ja auch keine schlechte Variante, die Browser stellen das ja mittlerweile sehr schön dar.
    Unangenehm wird es erst bei großen PDF's, da die Ladezeit i.d.R. sich dann auch erhöht. Aber da puffern die Browser mittlerweile auch schon, wenn ich mich nicht irre.

    Zitat von Gastl

    Dein test.pdf wird bei mir heruntergeladen, so ist es im FF eingestellt, verwundert also nicht. Du kannst es jetzt beeinflussen, dass die test.pdf nicht heruntergeladen, sondern direkt im Browserfenster angezeigt wird?
    Oder geht das nur umgekehrt, also statt direkt anzuzeigen einen Download initiieren?

    Ja, mir wäre jetzt nur der Weg bekannt. Ein Öffnen zu forcieren kenne ich nicht.

    Zitat von Gastl

    Ich gehe aber davon aus, djlong meint nicht per PHP erstellte PDF-Dateien, sondern eher mit z.B. einem PDF-Druckertreiber auf dem heimischen PC erstellte Dateien.


    Ich erstelle ja auch keine PDF online, sondern lade mit readfile() eine auf dem Server liegende.
    Aber die möchte er doch online als Download zur Verfügung stellen, ohne dass sie vom Browser automatisch geöffnet wird?!

    Jedenfalls habe ich das so verstanden:

    Zitat von djlong

    Ich möchte auf meiner erstellten Website ein PDF-File zum Download anbieten.
    Den Downloadlink habe ich schon eingebaut, aber das PDF-File wird direkt im Browser angezeigt.
    Ich hätte aber gerne das Downloadfenster, wo man auswählen kann, ob man das File speichern will oder öffnen.


    :confused:

    Du benötigst nicht mal alles, das hier sollte minimal drin sein:

    PHP
    $sFileName = 'test.pdf';
    
    
    header ( 'Content-Type: application/pdf' );
    header ( 'Content-Length: ' . filesize($sFileName) );
    header ( 'Content-Disposition: attachment; filename=' . $sFileName );
    
    
    readfile( $sFileName );


    Ersetzen musst Du für Deinen Fall zunächst mal nur den Dateinamen:

    PHP
    $sFileName = 'test.pdf'; // hier einfach Deine PDF-Datei eintragen, auch mit Pfad möglich


    Der Rest kann unverändert bleiben, das war's schon.

    Wenn Du das Script für mehrere PDF-Dateien verwenden willst, solltest Du einen Parameter übergeben, in Deinem Falle wohl eher GET, also per URL/URI:

    Code
    http://www.example.com/download.php?file=meine-datei&ext=pdf


    Dann müsste das Script so in etwa angepasst werden:

    Hier schaust Du halt erst, ob es den Parameter 'file' in der URI gibt und bastelst Dir damit den Pfad zur Datei zusammen ( $sFilePath ).
    Dann prüfst Du noch, ob es sich überhaupt um eine Datei handelt und definierst dann den Header und liest die Datei, die dann wieder an den Browser gesendet wird und automatisch runtergeladen wird.

    Naja dann:


    Über PHP ist das eine relativ flexible Lösung, weil man in dem Script auch auf Parameter aus GET oder POST zurückgreifen kann, um bspw. ein Download-Bereich zu erstellen.

    Testlink: http://php-rocks.de/dpone/download.php


    Einfacher wäre es noch über die .htaccess ( Apache Webserver ):

    Code
    AddType application/octet-stream .pdf


    Hier kannst Du allerdings nur global sagen, dass es für alle PDF gilt.
    Mit application/octet-stream sagen wir dem Browser, dass es sich um eine ausführbare ( executable ) Datei handelt, womit wir das Standard-Öffnen Verhalten des Browsers umgehen.

    Ja, das sagte ich ja! Du kannst das nicht beeinflussen. Damit meine ich, dass ich es per HTML und CSS nicht beeinflussen kann, wie ein PDF bei Dir im Browser verarbeitet wird.
    Das geht nur serverseitig mit entsprechenden Header-Definitionen.

    Hallo,

    Nicht ganz... ;)
    Aber Du machst jetzt ja auch was anderes... Das ist nicht die gleiche Logik, die ich Dir gegeben habe. Soll es denn so sein oder hast Du Dich vertan?

    Bei Dir passiert folgendes:

    Das macht so eigentlich keinen Sinn, denn das erste Element existiert immer bei Deiner Grundlage. Damit würde er eh nie das empty() zwischen dem Fragezeichen und dem Doppelpunkt anwenden.

    Bei mir war die Logik anders:

    Wenn Du die Logik mit dem Vergleich der Eingabe nicht mehr benötigst, ist das auch kürzer und einfacher abbildbar:


    was das gleiche ist, wie:

    PHP
    $fehler = empty( $data[0] )? $data[1]: null;

    Dadurch hast Du in $fehler ein Array, in dem jedes Element entweder eine Fehlermeldung oder null ist.
    array_filter() "schmeisst" nun jedes Element, das auf bool gecastet nicht true ergibt aus dem Array raus. Und da man bei array_filter die Callback-Funktion auch weglassen kann, sieht das ganze in Kurzform so aus:

    PHP
    $fehler = array_filter( $fehler );


    Das einzige, was ich gemacht habe ist, dass ich anstelle von $fehler die komplette array_map()-Verarbeitung als Parameter an array_filter() übergeben habe, was am Ende nur das Ergebnis von array_map() ist, nämlich das Array $fehler mit den Fehlermeldungen oder eben dem Wert null in den Elementen.

    Hallo,

    Ich übergebe der Callback-Funktion ja jedes Array-Element als $data, das ist bspw. im ersten Durchlauf das hier:

    PHP
    [$name, 'Bitte geben Sie Ihren Namen an!']

    ...was ja ebenfalls ein Array ist. In diesem Fall mit zwei Elementen, also $data[0] und $data[1].
    Im Falle Deines Hakens willst Du aber eine "erweiterte" Prüfung auf den Wert haben. Für den Durchlauf bekommt die Callback-Funktion im Gegensatz zu den anderen Durchläufen ein Array mit drei Elementen:

    PHP
    [$eingabeuser, 'Fehler bei Angabe des Kreuzes!', 'Pferd']

    Also prüfe ich einfach, ob $data[2], also ein drittes Array-Elelment existiert und prüfe entsprechend auf leer und Wert oder halt nur auf leer.

    Gruß Arne

    Hi,

    Also array_map() und array_filter() machen vom Grunde her das gleiche.
    Sie führen für jedes Element des übergebenen Array eine Callback-Funktion aus.
    Der Unterschied liegt ganz einfach darin, dass Du bei array_map() für jedes Element den Rückgabewert über return selbst definieren kannst, während array_filter die Rückgabe auf bool castet und alle Elemente, bei denen ein false aus dem Callback kommen quasi aus dem Array entfernt.

    Daher nutze ich erst array_map(), um die Fehlermeldungen oder null für keinen Fehler in das Array $aErrors zu schreiben und lasse das ganze dann noch einmal durch array_filter() laufen, um die null ( hier äquivalent zu false ) Werte zu entfernen. Übrig bleiben dann nur noch die Fehler.

    Zitat

    Warum setzt du denn vor dem überprüfen ob index submitted abgesendet wurde die variablen ?


    Du kannst die auch leer definieren und dann innerhalb des DIV aus den POST-Daten setzen, wie Theas1965 es gemacht hat. Ist vom Ergebnis dasselbe.

    Zitat

    Bis auf, das das Wort welches richtig ist auch ausgegeben wird und wenn ich keine foreach schleife beim ausgeben im html teil mache gibt er mie die fehlermeldung : Array to string conversion.

    Dann hast Du vermutlich meine Korrektur aus #5 noch nicht gehabt. ;)

    Mit dem jetzigen Wissenstand mag das sein, aber eigentlich ist er immer aufgeschlossen, neues zu lernen, sonst hätte ich mir die Mühe nicht gemacht... ;)

    Ist allerdings ein Logikfehler drin, musste ich gerade feststellen, es muß über array_map laufen, da array_filter nur auf Basis von true und false auswertet: