bilder upload

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • bilder upload

    ich möcht eine bildupload-funktion für mein eigenes forum implementieren. jetzt steh ich vor dem problem, wie man das am besten und für den benutzer am verständlichsten umsetzen kann. was unbeding möglich sein soll ist, dass der benutzer mehrere bilder in ein posting einbauen können soll.

    gedacht hätte ich es mir in etwa so: der benutzer schreibt an die stellen an denen er das bild haben möchte den tag [pic]. möchte er bilder hinzufügen, so klickt er auf einen button mit der bezeichnung "bilder einfügen". anschließend wird das forumular abgeschickt und ausgewertet. während der auswertung werden die anzahl der [pic]-tags gezählt und entsprechend der anzahl "durchsuchen"-felder angezeigt. der benutzer kann dann x bilder von der platte auswählen und sie gesammelt hochladen.

    bis hierhin gefällt es mir persönlich recht gut. ich steh jetzt nur vor dem problem, wie man die bilder am server am besten verwalten kann. den dateinamen aus der id des postings und einer fortlaufenden nummer scheint mir am sinnvollsten.

    eine alternative variante wär jedes bild einzeln in einem externen fenster hochzuladen und den entsprechenden tag samt URL zum bild mit javascript in das eingabefeld einzugeben. das setzt allerdings aktiviertes javascript voraus. darauf möchte ich mich nicht verlassen...

    kennt jemand ein board/forum, das es erlaubt mehrere bilder inline in ein posting einzubinden? würd mir das handling gern bei einer fertigen lösung anschauen bevor ich mich selbst daran mach sowas zu schreiben.

  • #2
    ich steh jetzt nur vor dem problem, wie man die bilder am server am besten verwalten kann. den dateinamen aus der id des postings und einer fortlaufenden nummer scheint mir am sinnvollsten.
    Kann man lösen wie man will, bei mir habe ich aber auch die id genommen, so findest du automatisch immer das richtige bild.

    Bei mir habe ich aber 3 bilder vorgegeben und nicht unendlich, so wie ich es jetzt verstanden habe. Habe jeweils 6 ordner bei mir.
    1 Ordner Bild 1
    1 Ordner Bild 2
    1 Ordner Bild 3
    1 Ordner Bild 1 klein
    1 Ordner Bild 2 klein
    1 Ordner Bild 3 klein
    Somit weiß ich wo ich welches bild hinpacken muß.

    Bei dir mußt du es denn sehen. Wenn du die anzahl an Bilder beschränkst kannst du es ja vorgeben wohin welches bild.

    Aber du mußt dir auch mit der größe im klaren sein.
    Willst du die orginal größe des Bildes nehmen, was ein Benutzer hochläd?
    Wenn das Bild zu groß ist, würde es doch nicht mit in den Text passen.
    Kannst ja in den codeschnipsel dieses Forum suchen.
    Gut geraten ist halb gewußt.

    Kommentar


    • #3
      danke für deine antwort. eine beschränkung ist sicher sinnvoll. 5 bis 10 bilder sollten absolut ausreichend sein.

      verfolgst du mit der trennung der bilder in einzelne ordner einen bestimmten zweck? hat diese lösung einen vorteil gegenüber einer lösung wie 123_1.jpg, 123_2.jpg, 123_3.jpg (für die ersten 3 bilder zu nachricht nr. 123)?

      Willst du die orginal größe des Bildes nehmen, was ein Benutzer hochläd?
      eigentlich schon. ich würd beim upload die dateigröße und die dimension (breite) überprüfen und den upload ggf. abbrechen, wenn einer der werte überschritten wird. der user hat selbst dafür zu sorgen, dass die dateien entsprechend skaliert und komprimiert werden.

      hab leider imagemagick auf meinem webspace nicht zur verfügung, sonst würd ich die bilder serverseitig optimieren :-(

      Kommentar


      • #4
        Naja wie du die bilder sortierts ist ja jeden selbst überlassen.
        Gut geraten ist halb gewußt.

        Kommentar


        • #5
          das ist leider nicht so einfach. ich hatte einen denkfehler drin in meiner überlegung.

          der dateinamen sollte sich idealerweise aus der id des postings, sowie einer fortlaufenden nummer und der dateiendung zusammensetzen. ich stehe nun jedoch vor dem problem, dass mir die id des abzusetzenden postings vor dem eintrag in die datenbank noch nicht bekannt ist.

          die id die ich weiß ist auf welches posting sich eine antwort bezieht (= 0 falls ein neuer thread eröffnet wird). die id des postings selbst hol ich mir über mysql_insert_id() nur zu diesem zeitpunkt sind die bilder bereits hochgeladen.

          man könnte den bildern nun einen temporären dateinamen geben (evtl. uhrzeit in sekunden + zufallszahl) und sie dann mit hilfe von php umbenennen wenn der dateiname bzw. die id des postings feststeht. etwas anderes fällt mir nicht ein.

          und dann gibts erneut die schwierigkeit, wie besser ich den link zur datei aus, nachdem das posting eingetragen wurde? aufgrund der vorhandenen vorschaufunktion sollten sich die bilder bereits betrachten lassen, bevor das posting in die datenbank geschrieben wurde (dass bilder hochgeladen aber nicht verwendet werden können ist mir bewusst, solche bilder werden regelmäßig gelöscht).

          hat sonst wer ideen, wie man das sauber umsetzen kann?
          Zuletzt geändert von php_rookie; 04.01.2005, 15:24.

          Kommentar


          • #6
            warum trägst du nicht in die datenbank ein, ermittelst die id, verschiebst die hochgeladenen dateien und benennst sie dabei um und änderst dann den eintrag in der datenbank? die id hast du ja

            alternativ könntest du ja auch die tabelle sperren, die nächste id ermitteln, dein eintrag bearbeiten und eintragen und dann die bilder verscieben und umbenennen.
            aber nicht vergessen die sperre wieder rauszunehmen

            wird die vorschau akzeptiert, setzt du ein flag in der tabelle von 0 auf 1.
            datensätze, die 1 tag drinstehen und bei denen dies flag auf 0 steht, werden (mitsamt bildern) gelöscht
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              wenn du die ID im Namen setzen willst, wirst wohl du wohl um ein INSERT nicht herumkommen.

              Ich hab das ähnlich gemacht, zunächst prüfe ich, ob das IMG überhaupt temporär auf dem Server liegt, wenn dann die Bildgrösse, Dateigrösse und der MIME Typ meinen Vorgaben entspricht, setze ich den DB eintrag. Nachdem die Datei mit dem neuem Namen kopiert ist, folgt ein UPDATE auf den eben angelegten Datensatz.

              Dazu sind zwar mind. 2 Queries notwendig, aber anders wusste ich mir auch nicht zu helfen, und ich wollte halt meine Bilder eindeutig benennen.

              Alternativ habe ich überlegt den Timestamp anstelle der ID zu nutzen, aber falls man wirklich mal gezielt ein verknüpftes Bild sucht, hat mans schwer...

              Also, ob es DIE saubere Lösung gibt?

              Kommentar


              • #8
                @ mrhappiness: das mit dem sperren der tabelle ist etwas kritisch, find ich. wenn jemand einen beitrag absetzen will müsste ich die tabelle sperren. in der zeit kann kein anderer einen beitrag verfassen bzw. speichern. und wenn jemand vergisst den beitrag zu speichern bleibt die tabelle gesperrt (es sei denn man baut ein timeout oder sowas ein).


                @ MehrMeerHer: so in etwa hätt ichs mir auch gedacht.

                ich hab im moment zwei ordner:
                ./upload/
                und
                ./upload/tmp/

                in den tmp/-ordner kommen die bilder rein, die der benutzer hochladen und sich ggf. vor dem absenden vorher anschauen möchte. ist er damit nicht zufrieden, kann er das prozedere wiederholen und erneut 5 bilder hochladen (pro posting sind maximal 5 bilder möglich). die ursprünglichen bilder werden dabei überschrieben.


                die lösung hätte den vorteil, dass man einfach alle paar tage mal den tmp/-ordner säubern könnte, da im upload/-ordner nur jene bilder drin stehen, die auch wirklich verwendet werden.

                nur wie generiert man einen eindeutigen temporären namen, sodass ich man ihn nachher auch im text wiederfinden kann und die temporären bilder nach einem erneuten aufruf der vorschau funktion überschrieben werden?

                Kommentar


                • #9
                  Original geschrieben von php_rookie
                  nur wie generiert man einen eindeutigen temporären namen, sodass ich man ihn nachher auch im text wiederfinden kann und die temporären bilder nach einem erneuten aufruf der vorschau funktion überschrieben werden?
                  uniqid
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Original geschrieben von php_rookie
                    in den tmp/-ordner kommen die bilder rein, die der benutzer hochladen und sich ggf. vor dem absenden vorher anschauen möchte. ist er damit nicht zufrieden, kann er das prozedere wiederholen und erneut 5 bilder hochladen (pro posting sind maximal 5 bilder möglich). die ursprünglichen bilder werden dabei überschrieben.
                    steh ich auf dem Schlauch, oder versteh ich das falsch? Die Bilder müssen doch hochgeladen werden, um sie überhaupt auswerten zu können? Dann liegen sie doch temporär mit einem schon eindeutig zugewiesen Namen vor ($_FILES['image']['tmp_name']), das sollte für eine Vorschau doch reichen, oder nicht?

                    Kommentar


                    • #11
                      nein, denn hochgeladene dateien werden aus dem temp-ordner gelöscht, wenn der request abgearbeitet ist
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Wäre es nicht Sinnvoll, eine eigene Tabelle Dateianhänge zu machen, in der die Pics gespeichert werden?
                        Dann kann man dem Posting beim speichern die passenden Ids aus der Tabelle zuordnen.
                        Die Pics hätten dann den Dateinamen der Id aus der Tabelle Dateianhänge.....

                        Kommentar


                        • #13
                          @ mrhappiness: vielen dank, kannte ich noch nicht!

                          @ MehrMeerHer:
                          Die Bilder müssen doch hochgeladen werden, um sie überhaupt auswerten zu können? Dann liegen sie doch temporär mit einem schon eindeutig zugewiesen Namen vor ($_FILES['image']['tmp_name']), das sollte für eine Vorschau doch reichen, oder nicht?
                          und wenn der benutzer zweimal hintereinander auf "vorschau" klickt? kann sein, dass ich das falsch verstehe, aber ich habe bislang angenommen $_FILES würde sich ähnlich verhalten wie $_POST und ist nur für einen seitenaufruf lang gültig.

                          @ Peacie:
                          Wäre es nicht Sinnvoll, eine eigene Tabelle Dateianhänge zu machen, in der die Pics gespeichert werden?
                          Dann kann man dem Posting beim speichern die passenden Ids aus der Tabelle zuordnen.
                          Die Pics hätten dann den Dateinamen der Id aus der Tabelle Dateianhänge.....
                          klingt interessant, aber belastet man damit die datenbank nicht zusätzlich?

                          Kommentar


                          • #14
                            Ich denke, beim Posten unwesentlich.

                            Hätte aber den Vorteil, das man in Unterschiedlichen Postings gleiche Bilder verwenden kann, ohne sie doppelt hochzuladen, wenn das überhaupt der Fall sein könnte bei Dir

                            Kommentar


                            • #15
                              im moment kann ich nur bilder einfügen, die sich bereits online auf einem webspace befinden.

                              die syntax ist wie folgt: {img}http://www.example.com/foobar.jpg{/img}

                              wenn jemand ein bild hochladen und nicht nur verlinken möchte, kann er den platzhalter {pic} verwenden. die anzahl der {pic}s wird gezählt und es werden entsprechend viele (n) upload-elemente eingeblendet.

                              der benutzer kann dann maximal n bilder hochladen und soll diese vor dem absenden auch betrachten können. dazu wird aus dem {pic} ein {img}upload/tmp/<zufallszahl>.jpg{/img} welches nach dem speichern auf {img}upload/<postingid>_<bildnummer>.jpg{/img} ausgebessert wird.

                              das hat den vorteil, dass es für die user transparent bleibt.

                              wenn ich die bilder in eine tabelle stecken würde, müsste man sich eine neue syntax für inline-images überlegen.



                              EDIT:
                              ps:

                              was mir statt uniqid noch einfallen würde, wäre einfach eine zufallszahl zu generieren (3 stellen sollten reichen) und dann zu überprüfen, ob es bereits eine datei mit diesem namen gibt. wenn das der fall ist, generiert man einfach eine neue zufallszahl. da der ordner ohnehin regelmäßig gelöscht wird und die bilder im normalfall vom tmp/-ordner in den upload/-ordner verschoben werden, sollte das ausreichend sein. die anzahl der bilder die im tmp/-ordner bleiben sollte minimal sein. seh ich das richtig?

                              Zuletzt geändert von php_rookie; 04.01.2005, 16:40.

                              Kommentar

                              Lädt...
                              X