PHP, HTML Profilbild

  • PHP

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Rootbob91.

    PHP, HTML Profilbild

    Guten Abend,

    ich bin gerade dabei ne kleine Form zu bauen, die einem Profil ähnlich ist.

    Dort soll natürlich auch die Möglichkeit geboten werden einen Avatar/Profilbild auszuwählen.

    Meine Frage:
    Ist es sinnvoller das Bild irgenwie direkt in die Datenbank zu speichern, oder sollte ich ggf. in der DB nur den Pfad hinterlegen und dann aus dem FTP darauf zugreifen (bzw. dem img-Tag dann den src zuzuweisen).
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Hallo,
    machst du eine Website mit PHP und möchtest diese bilder da einbinden oder mit VB?
    Was ich michbdabeindann frage wozu ftp?! Möchtest du dann jedem die FTP daten geben das der sein bild hochläd oder wie?

    Vernünftig bindest du das bild normal ein (dei auf deinem webspace) und ladst die über ein PHP script hoch.

    Lg Marcel1997
    Ja, auf einer kleinen Website.

    Daher nein, keiner sieht die FTP Daten. Geht sich nur um die Fragen welche der oberen Möglichkeit mehr Sinn ergibt, ich denke mal die Erste, den Avatar direkt (binär?) in die DB zu speichern.

    EDIT:
    Zu deinem letzteren Satz:
    Jo, das wäre Methode 2 gewesen, nur das in der DB ja die Zuordnung zum User dann sein muss.
    Oder eben halt Methode 1, dass das Pic direkt als Binär-Gedöhns in dem jeweiligen Datensatz gespeichert wird.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Ich weis nicht ob das jetzt immernoch so ist aber vor einiger Zeit habe ich mal einen Artikel gelesen zu dem Thema Bilder in einer DB. Dabei war die Kern Aussage "eine Datenbank ist eine Datenbank und keine Dateibank bzw Bilderbank"... :D
    du könntest stattdessen auch in deiner Datenbank eine Spalte mit der URL zum Bild machen. Dazu noch wieso FTP?!?!?!?! Wenn du mit PHP eine Seite machst brauchst du FTP nur zum hochladen der PHP Scripts. Ansonnten machst du was Falsch.
    Hi,

    ich würde es so machen dass in der DB nur ein Link zum Profilbild hinterlegt wird.
    Aber generell hast du mehrere Möglichkeiten:
    - In deiner Tabelle `benutzer` (oder so ähnlich) ein zusätzliches Attribut `avatar_url` hinzufügen
    - Oder halt ein Attribut `avatar_image` wo du den BLOB/Binary/Whatever speicherst
    - Wenn weitere Daten die den Avatar betreffen gespeichert werden sollen (z.B. Werte für Crop, falls du anbietest das Bild Online zurechtzuschneiden oder Transparenz oder Text der auf dem Bild mit angezeigt wird etc..) dann macht es mehr Sinn, eine eigene Tabelle `benutzer_avatare` (o.ä.) anzulegen (mit Fremdschlüssel-Attribut zu `benutzer`.`id` (o.ä.)) um das sauber zu trennen (Stichwort Redundanzen und Normalformen im Zusammenhang mit relationalen Datenbanken).
    - Falls du Gravatar bei dir implementierst brauchst du glaub ich gar nichts weiter tun, lediglich bei der Ausgabe dann in PHP den Gravatar anhand der E-Mail-Adresse einzubinden. Für den Fall solltest du natürlich dann entsprechend einen Standard-Avatar haben, falls für die E-Mail-Adresse kein Gravatar-Account verknüpft werden kann. (Ich rate jetzt blind dass es so in etwa funktioniert, aber sollte das tatsächlich eine Option sein für dich, kannst du dich ja hierzu belesen). //Edit ok, ist wie ich dachte, also auf der Seite hier steht wie man's in PHP einbindet, ist ganz easy mit den 4 Zeilen Code. Du musst nur im HTML img-Tag beim src-Attribut die automatisch generierte URL zum Gravatar aufrufen indem du die E-Mail (`benutzer`.`email` oder wie's halt bei dir ist) md5-gehashed (und getrimmed) übergibst und einen Standard-Avatar direkt mit übergibst :)

    Was -um deine obige Frage separat aufzugreifen- sinnvoller ist, bleibt dir überlassen. Mir würden jetzt mehr sinnvolle Dinge einfallen, die dafür sprechen, eine URL in der DB zu speichern, z.B. höhere Flexibilität, denn ein Bild kann ja durchaus auch ganz woanders liegen (bedeutet der User lädt keins hoch sondern gibt eine URL zu nem Bild auf einem entfernen Server ein). Hier solltest du dann nochmal kurz eine Validierung vornehmen (URL entspricht in etwa RegEx-Pattern \.(png|jpe?g|gif|tiff?|bmp)$) weil andernfalls ja auch mit PHP generierte Bilder zugelassen werden, was vielleicht nicht gewünscht ist. Naja wie gesagt ich halte nix von dem "Binary-Gedöns" wie du es nennst ^^ Aber trotzdem, mach dich ggf. schlau was bei der Binary/Blob-Sache die Vorteile sind und wäge ab welche der Vorgehensweisen deine Anforderungen besser erfüllt.


    Link :thumbup:


    www.xmgr.de
    PHP lernen | Programmierung | Sonstiger Krempel
    Zum Blog | PHP lernen | GitHub

    Haha ich wusste das mich mein Lieblingscharakter nicht im Stich lässt :D.

    Danke für den ausführlichen Beitrag, werde ich gleich durchgehen.

    Soweit hab ichs auch schon gelöst gehabt, aber bin ja immer für neuen/besseren Input offen ;).
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Rootbob91 schrieb:

    Ist es sinnvoller das Bild irgenwie direkt in die Datenbank zu speichern


    Eine klare Antwort darauf: NEIN.

    Bilder gehören nicht in die Datenbank. Sie sind enorme Speicherplatzfresser. Außerdem, spätestens ab dem moment wo du deine Webseite SEO-Optimieren willst, sind sie dort fehl am Platz.
    Lagere deine Bilder besser im Filesystem, Verlinke die jeweiligen Bilder über einen relativen Pfad mit dem Profil des jeweiligen Benutzers in der Datenbank. Dann hast du eine wesentlich größere Möglichkeit der Erweiterung der Anwendung, sei es z.B. image resizing. Oder wenn wir einmal tatsächlich zum Punkt SEO-Optimierung kommen und dahingehend auf das Thema OptiPng zu sprechen kommen.
    Jo, so hatte ich's mir schon gedacht, also war meine bevorzugte Methode.

    Aktuell hab ichs getrickst gelöst:
    Da jeder User nur ein Profilbild hat und jeweils eine eindeutige ID, habe ich die Dateien auf dem FTP einfach im Ordner "Profilbilder" abgespeichert..
    Das PHP-Script prüft nun ob eine Datei namens "[UserID].endung" vorhanden ist, wenn ja hat der User n Profilbild hochgeladen, wenn nicht - nicht!
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    wozu das filesystems dazu überprüfen? Lass die User Ihre Bilder hochladen, verlinke den namen in einer Tabelle innerhalb eines Datenbankschemas. Dann kannst du gegenprüfen ob spalte X null ist oder eben nicht. Wenn nicht, verwendest du diese spalte zur generierung des jeweiligen img elementes.

    Im Filesystem würde ich dafür nicht herumwerkeln, allein weil das Lesen von der Platte meistens länger dauert als ein Datenbankzugriff, wenn das Tabellenschema genug normalisiert ist.