Nico: Bilder in MYSQL - Datenbank

Hallo,

die Kombination PHP/MYSQL klappt wunderbar. Schwierigkeiten habe ich damit, per PHP nicht nur Text in die Datenbank zu schleusen, sondern auch Bilder.

Es geht um eine Adressendatei, in die sich Besucher meiner Homepage eintragen koennen ... bisher ohne Bild.

Deshalb meine Frage an Euch: Wie muss ich mein Formular aufruesten, damit der Homepagebesucher zusammen mit seinen Adressdaten auch ein Bild von sich uebertragen kann?

Im voraus besten fuer Eure Hilfe oder Hinweise auf konkrete Loesungsmoeglichkeiten

Gruss
Nico

  1. Es geht um eine Adressendatei, in die sich Besucher meiner Homepage eintragen koennen ... bisher ohne Bild.

    wie wärs wenn du deinen benutzern einfach die möglichkeit gibst eine URL anzugeben, wo sie ein foto von sich abgelegt haben?
    ich fang zwar gerade erst an mich mit mysql/php zu beschäftigen (wie man weiter unten in diesem forum ja sehen kann), aber das müsste meines wissens funktionieren.

    ich hoffe, das hat dir geholfen,

    markus

    1. Hallo Markus,

      wie wärs wenn du deinen benutzern einfach die möglichkeit gibst eine URL anzugeben, wo sie ein foto von sich abgelegt haben?

      ich hoffe, das hat dir geholfen,

      Danke fuer den Tipp. Stimmt schon, dass man den Umweg anbieten koennte. Aber es ist doch nicht das, nachdem ich suche. Vielleicht haben andere ja noch Ideen, wie man mein Vorhaben realisieren kann ... sofern es denn ueberhaupt realisierbar ist ...?

      Gruss
      Nico

  2. Hallo,

    Deshalb meine Frage an Euch: Wie muss ich mein Formular aufruesten, damit der Homepagebesucher zusammen mit seinen Adressdaten auch ein Bild von sich uebertragen kann?

    mal das grundsätzliche:

    Eine datei vom rechner des users auf den server bekommen:

    <form enctype="multipart/form-data" action="foo.php3" method="post">
    <input type="file" name="ufile">
    <input type="submit" name="submit" value="Senden">
    </form>

    foo.php3:
    /*
       Überprüfung ob es ein jpg oder gif bild ist
       Hier könnte auch überprüft werden wie groß das file ist
    */
    $ext=GetImageSize($ufile) or die('<h1>Das ist kein jpg oder gif Bild!!</h1><a href="javascript:history.back()">zurück...</a>');
    if ($ext[2]=="1"){
    $extension=".gif";
    }else{
    $extension=".jpg";
    }
    ------------------------------
    Jetzt hast du zwei möglichkeiten.

    Die 1. Möglichkeit wäre das bild in der Datenbank zu speichern, dafür mußt du in der DB ein BLOB feld anlegen und es auf BINARY stellen.

    Dann genügt ein einfaches mysql_query("INSERT INTO tablename ('bild') values ('$ufile')");

    wenn du das feld wieder in eine html seite ausgeben willst, brauchst du dafür ein eigenes skript das als erste ausgabe folgendes schreiben muß (für gif datein):

    Header("content-type: image/gif");
      Header("pragma: no-cache");

    Diesem skript übergibst du einfach die ID des bildes in der DB, es hohlt das bild und gibt es als ECHO aus.
    Das Problem das du noch hast du mußt schon vorher herausfinden wie groß das bild ist um es in den img src tag zu schreiben, das heißt es wäre am besten wenn du die größe auch in die db schreibst.

    Die zweite und auch bessere lösung wäre das Bild im Filesystem zu speichern, und in die DB einen link dorthin zu setzten.
    $www="/images/";
    $hard="/home/foo/images/";
    $dest="$hard$name$extension";
    if (copy($ufile,$dest)){
    echo "Bild gesendet";
    }else{
    echo "FEHLER! Das Bild konnte nicht kopiert werden!";
    }
    mysql_query("Insert INTO tablename (bild) values ('$www$name$extension')");

    ausgeben kannst du das ganze dann ganz einfach mit:
    (wobei $file der inhalt des DB links ist);
    <?$size=GetImageSize("$file");?>
    <!--HTML CODE //-->
    <img src=<? echo $name; ?>" <? echo $size[3]; ?> alt="blabla">

    -------

    Das $size[3] gibt dir dann folgendes aus width="123" height="123"

    PHP macht es einem ja so leicht :-)

    lg
    Ludwig

    1. Die zweite und auch bessere lösung wäre das Bild im Filesystem zu speichern, und in die DB einen link dorthin zu setzten.
      $www="/images/";
      $hard="/home/foo/images/";
      $dest="$hard$name$extension";
      if (copy($ufile,$dest)){

      »»  echo "Bild gesendet";

      }else{

      »»  echo "FEHLER! Das Bild konnte nicht kopiert werden!";

      }

      Was ich jetzt vergessen habe:

      die übertragene datei wird im TMP verzeichniss des servers gespeichert. und nach beendigung des skriptes gelöscht, darum der copy befehl. wobei $ufile die referenzierung auf das file enthält.

      FYI: Das TMP verzeichniss wird in der PHP(3).ini festgelegt (/usr/local/lib/) und du kannst es dir mit phpinfo(); anzeigen lassen.

      In der ini datei wird auch festgelegt wie groß das file maximal sein darf, default ist hier afaik 2MB.

      lg
      Ludwig

      1. Hallo Ludwig,

        meinen herzlichen Dank fuer Deine ausfuehrliche Beantwortung meiner Frage.

        Beste Gruesse

        Nico

      2. Ich hab einen Bilderupload der genau so funktioniert aus einem anderen frei verfügbaren Script übernommen.
        Leider bekomme ich (Fast immer) Fehlermeldungen:
        Warning: Unable to create '....../htdocs/images/bild.gif'
        UNd manchmal wird das bild dann angezeigt und manchmal nicht...
        Ist kein Scherz. Wenn ich per FTP ins Verzeichnis sehe sind die Bilder die ich hochgeladen habe alle drinn.
        Gebe ich aber den Pfad direkt ein (im browser) bekomme ich einige Bilder angezeigt und andere nicht...
        Die Verzeichnisrechte für den Images Ordner müssen doch mit chmod 755 gesetzt werden oder?
        Was für Fehlerquellen gibt es denn noch????
        Ich weiss dummerweise nichtmal wo ich suchen soll!