Beiträge von Arne Drews

    Hallo,

    Bau die eingabe.php doch mal so um:

    Sollte dann etwas schief gehen, solltest Du zumindest Fehler angezeigt bekommen...

    Gruß Arne

    Hallo,

    Mach das ohne iframe.

    Wenn Du zur Anzeige des Bildes den Bildnamen ( btw. Du sollest Leer- und Sonderzeichen im Bilddateinamen besser weglassen ) per Parameter überträgst, kann das PHP-Script erweitert werden, so dass es entweder ein Bild anzeigt oder eben die Galerie.
    Und da Du Dich dann nicht in einem iframe befindest, kannst Du auch einen ganz normalen Link zur Galerie als "Zurück"-Button einbauen.

    Gruß Arne

    Hi,

    Du hast es fast ;)
    Bzgl. der Verarbeitung meinst Du das richtige, hast es aber andersrum erklärt, daher nochmal Step-by-Step:

    Bei verschachtelten Verarbeitungen wird von innen nach außen ausgewertet, d.h. hier wird zuerst array_map() verarbeitet.
    array_map() benötigt als Pflichtparameter ein Array, über dessen Werte es iteriert, hier übergeben wir einfach $formulardaten, weil wir die Werte daraus auf "leer" prüfen wollen.
    Zurückgeben möchten wir entweder eine Fehlermeldung oder null. Damit wir die Verarbeitung weitesgehend automatisieren können, habe ich den Formulardaten einen Array-Schlüssel verpasst, den wir in der Fehlermeldung verwenden können. Damit unsere Closure diese aber kennt, müssen wir sie als weiteren optionalen Parameter übergeben und das passiert mit array_keys(), welches ein Array mit den Schlüssel eines Array liefert:

    array_map() liefert der Closure immer in Paar, bestehend aus dem ersten und zweiten Parameter:

    Code
    1. Durchlauf: foo, vorname
    2. Durchlauf: bar, nachname
    3. Durchlauf: baz, wohnort

    Erst wenn array_map() alles verarbeitet hat, wird im dargestellten Fall das Ergebnis in Form eines Arrays an array_filter() übergeben, wo dann - wie Du richtig sagtest - alle Werte, entfernt werden, bei denen der Rückgabewert der Closure als false gecastet wird.
    Da wir für array_filter() keine Closure-Funktion angewendet haben, wird der jeweils zu bearbeitende Wert zu false gecastet. Ein Leerstring, also ein leeres Formularfeld ist zu bool gecastet in PHP auch false, daher fliegen die raus.
    Due hast so am Ende nur noch die aufgetretenen Fehler im Array.

    Auf die Weise spart man sich umständliche IF-Konstrukte und muss den Code nicht anpassen, wenn mal Formularfelder dazu kommen.

    Gruß Arne

    Hallo,

    Grundsätzlich gebe ich euch recht, aber es wäre jetzt auch nicht fair diesen Beitrag nicht zuzulassen, angesichts in welcher Forum-Kategorie das gepostet wurde.
    Wenn man unter "Link Tipps" keine Werbung geschickt einfummeln kann, wo dann... ;)
    Taucht so was bspw. in den Programmierforen auf, wird sowas gelöscht.

    Begeistert bin ich wie gesagt auch nicht, aber man muß auch mal tief einatmen und ohne Kommentar zum nächsten Thread gehen.

    Zitat

    Wieso? Die Vergangenheit zeigt doch, dieses Forum ist perfekt Werbemüll zu hinterlassen.

    Richtig, wir arbeiten daran.
    :razz:

    Hi,

    Die beiden Meldungen kommen, weil ich vergessen habe die Keys des Array an die Closure zu übergeben, richtig muss es so aussehen:

    PHP
    $errors = array_filter(
                array_map(
                    function( $data, $key ) {
                        return empty(trim($data))? 'Bitte ' . $key . ' eingeben!': null;
                    }
                    , $formulardaten
                    , array_keys( $formulardaten )
                )
            );
    Zitat

    Warum tuhst du $formulardaten nicht erst zu einem array umwandeln ?


    Wozu? $formulardaten wird ja im Erfolgsfall ( also wenn die Formulardaten gesendet wurden ) ein Array zugewiesen. Und im Fehlerfall wird das auf null gesetzt.
    Dadurch kann ich an notwendigen Punkten ( siehe die Validierung ) mit !is_null() immer prüfen, ob Daten vorhanden sein müssten. Auch is_array() würde hier gehen, aber für nicht gesetzte Werte handle ich das immer gern mit null.

    Zitat

    In der function welche schaut ob es errors gibt sprichst du mit $data die felder an und mit $key den namen des feldes ?

    Ja richtig, ich hatte lediglich vergessen, das Array mit den Keys zu übergeben, s.o.

    Zitat

    Würdest du es bei der ausgabe der errors beim formular auch so machen oder hälst du dies etwas übertrieben?

    Das halte ich persönlich für übertrieben und entspricht für mein Verständnis nicht EVA.
    Ich würde die Ausgabe auf Basis des $errors-Array vorher zusammenklöppeln und in der Ausgabe dann nur kurz und knackig:

    PHP
    if ( is_null($sHtmlErrors) )
        echo $sHtmlErrors;


    Wobei $sHtmlErrors dann halt die zusammengelöppelte Variable ist.
    Ebenso kannst Du das auch mit dem Erfolgstext machen.

    Gruß Arne

    Na ich würde klassisch mit dem dafür vorgesehenen Link-Tag <a> arbeiten:

    HTML
    <a class="btnImage" href="http://www.example.com" target="_blank">&nbsp;</a>

    Mit ein wenig CSS ist das Hover-Bild dann auch kein Problem. Allerdings würde ich die Bilder zusammenführen als ein Bild und beim Hover nur die Position ändern:

    Code
    A.btnImage { display:block; width:546px; height:107px; background:url( /ordner/bild1.png ) top left no-repeat; text-decoration:none; }
    A.btnImage:hover { background-position:bottom left; }

    Hallo,

    Die zweite von Gastl genannte Variante ist die gängigste und lässt sich bereits als Grundlage für Templating betrachten.
    Wie schon rauszulesen ist, musst Du die Datei auf den Server laden ( an "zentrale" Stelle ) und in den entsprechenden Seiten an entsprechenden Stellen einbinden.
    Dabei ist es fast egal, ob die eingebundene Seite statisch ( HTML ) oder dynamisch ( bspw. PHP ) ist, jedoch unterscheidet sich die Methodik der Einbindung basierend darauf.

    Zum Einbinden selbst benötigst Du eine Server seitige Scriptsprache, wie bspw. PHP.
    Mit dieser kannst Du, wie bereits gesagt weitere dynamische PHP-Seiten über include() oder require() einbinden.

    Statische Seiten bindet man allerdings i.d.R. mit file_get_contents() ein, da bei einem include() oder require() der PHP-Parser davon ausgeht, die einbindende Seite verarbeiten zu müssen.
    Da dies nicht der Fall ist, verwendet man file_get_contents().

    Der Vollständigkeit halber sei noch erwähnt, dass es auch noch include_once() und require_once() gibt.

    Gruß Arne

    Hi,

    Die Prüfung der Daten kannst Du flexibler gestalten.
    Auf Deine Weise musst Du jedesmal, wenn ein Feld im Formular dazu kommt auch den Code anpassen, so wie hier musst Du das nicht:

    PHP
    $formulardaten = isset( $_POST['form']['data'] )? $_POST['form']['data']: null;
    
    
        if ( !is_null($formulardaten) )
            filter_var_array( $formulardaten, FILTER_SANITIZE_STRING );

    Grundsätzlich würde ich auch überlegen, ob Du die Formular Felder nicht auch komplett benennst:

    HTML
    <label>Vorname:</label><input type="text" name="form[data][vorname]"><br>
    <label>Nachname:</label><input type="text" name="form[data][nachname]"><br>
    <label>Wohnort:</label><input type="text" name="form[data][wohnort]"><br>


    Dann kannst Du - ist jetzt ein wenig weiter führend, aber erwähnenswert, wie ich finde - das Array $error bspw. bequem gegen die Namen laufen lassen:

    So brauchst Du auch im Prinzip nie wieder diese Logik anzufassen, selbst wenn Du Dein $_POST['form']['data'] mal erweiterst.Es gibt hier natürlich noch etliche andere Wege und auch bessere, aber es zeigt glaube ich ganz gut, dass man sich ne Menge Arbeit sparen kann, wenn man die Dinge logisch benennt und anpackt.

    Bei den try-/catch Blöcken unterstelle ich Dir mal, dass Du die Exceptions fangen willst, die von PDO kommen. Die sind allerdings dann vom Typ PDOException:

    PHP
    catch ( PDOException $e ) { ...

    Würde dann insgesamt alles so aussehen ( allerdings ungetestet! ):

    Gruß Arne

    Hallo,

    Wie sollen wir helfen, wenn die meisten hier vermutlich OpenBiblio nicht im Einsatz haben?
    Du müsstest schon relevanten Quellcode zeigen, wobei die Frage ist, ob man das hier darf ( siehe Lizenzbestimmungen von OpenBiblio ).

    Weiterhin würde ich Dir raten Dich nach einer anderen Lösung umzusehen, denn der Code scheint stark veraltet, zumindest nach Sichtung der Systemanforderungen:

    Zitat von Auszug Systemanforderung auf openbiblio.de


    PHP, [...] Dabei wird aber mind. PHP 4.2.x gefordert! Unter Windows müssen sie PHP mindestens als 4.2.x (PHP in 5er Serie empfohlen, aber nicht notwendig)

    MySQL, mind. Version 4.0.12

    Das lässt leider nicht drauf schließen, dass da viel am Code modernisiert wird.

    PHP5 Version wurde bereits vor über 12 Jahren eingeführt ( Release Date: 13.07.2004 ) und der Support für PHP4 wurde offiziell schon vor 9 Jahren eingestellt ( 31.12.2007 )!
    Scripte auf der Basis zu warten macht einfach keinen Sinn mehr.

    Und auch MySQL hat bereits den Versionsstand 5.7 ( an der 8.0 wird bereits gearbeitet, woher der Sprung kommt, kann ich nicht sagen )


    Gruß Arne