Marco190676: binärupload

will einen binärupload für Grafiken machen.
Da bin ich auch schon weiter. Nun aber folgendes Problem zu lösen:

  • in die Grafik soll ein wasserzeichen eingebetet werden
  • die datei soll als thumbnail erstellt und ubenfalls in dei datenbank.

kann mir einer da helfen?

################ Code binärupload (geht allein) ###########
<?php

$dbcnx = @mysql_connect('v091008.dd2108.kasserver.com', 'v091008', '69ceb5o2');
if (!$dbcnx) {
  exit('<p>Verbindungsaufbau zum Datenbankserver ' .
      ' zurzeit nicht möglich.</p>');
}

if (!@mysql_select_db('jokes')) {
  exit('<p>Auswahl der Datenbank' .
'zurzeit nicht möglich.</p>');
}

if (isset($_GET['action'])) {
  $action = $_GET['action'];
} else {
  $action = '';
}

if (($action == 'view' or $action == 'dnld') and
    isset($_GET['id'])) {
  $id = $_GET['id'];

// Benutzer ruft eine Datei ab
  $sql = "SELECT filename, mimetype, filedata
      FROM filestore WHERE id = '$id'";
  $result = @mysql_query($sql);
  if (!$result) {
    exit('Datenbankfehler: ' . mysql_error());
  }

$file = mysql_fetch_array($result);
  if (!$file) {
    exit('Datei mit dieser ID nicht in der Datenbank gefunden!');
  }

$filename = $file['filename'];
  $mimetype = $file['mimetype'];
  $filedata = $file['filedata'];
  $disposition = 'inline';

if ($action == 'dnld') {
    $disposition = 'attachment';
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5') or
        strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 7')) {
      $mimetype = 'application/x-download';
    }
  }

header("content-disposition: $disposition; filename=$filename");
  header("content-type: $mimetype");
  header('content-length: ' . strlen($filedata));

echo $filedata;
  exit();

} elseif ($action == 'del' and isset($_GET['id'])) {
  $id = $_GET['id'];

// Benutzer löscht eine Datei
  $sql = "DELETE FROM filestore WHERE id = '$id'";
  $ok = @mysql_query($sql);
  if (!$ok) {
    exit('Datenbankfehler: ' . mysql_error());
  }

header('location: ' . $_SERVER['PHP_SELF']);
  exit();

} elseif (isset($_FILES['upload'])) {

// Ausschließen, dass eine Datei kein Upload ist.
  if (!is_uploaded_file($_FILES['upload']['tmp_name'])) {
    exit('Es wurde keine Datei hochgeladen!');
  }
  $uploadfile = $_FILES['upload']['tmp_name'];
  $uploadname = $_FILES['upload']['name'];
  $uploadtype = $_FILES['upload']['type'];
  $uploaddesc = $_POST['desc'];

// Datei zum binären Einlesen öffnen ("rb")
  $tempfile = fopen($uploadfile, 'rb');

// Gesamte Datei in den Arbeitsspeicher einlesen,
  // wobei die PHP-Funktion filesize benutzt wird,
  // um die Dateigröße zu ermitteln.
  $filedata = fread($tempfile, filesize($uploadfile));

// Einfügen in die Datenbank vorbereiten, indem
  // vor Sonderzeichen Backslashes gesetzt werden.
  $filedata = addslashes($filedata);

// SQL-Anfrage formulieren.
  $sql = "INSERT INTO filestore SET
      filename = '$uploadname',
      mimetype = '$uploadtype',
      description = '$uploaddesc',
      filedata = '$filedata'";

// Einfügen durchführen.
  $ok = @mysql_query($sql);
  if (!$ok) {
    exit('Datenbankfehler beim Einfügen der Datei: ' . mysql_error());
  }

header('location: ' . $_SERVER['PHP_SELF']);
  exit();

}

// Vorgabemäßige Seite: Gespeicherte Dateien anzeigen

$sql = 'SELECT id, filename, mimetype, description
    FROM filestore';
$filelist = @mysql_query($sql);
if (!$filelist) {
  exit('Datenbankfehler: ' . mysql_error());
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>PHP/MySQL Dateimagazin</title>
<meta http-equiv="content-type"
    content="text/html; charset=iso-8859-1" />
</head>
<body>

<h1>PHP/MySQL Dateimagazin</h1>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>"
    method="post" enctype="multipart/form-data">
  <p><label>Datei hochladen:<br />
    <input type="file" name="upload" /></label></p>
  <p><label>Dateibeschreibung:<br />
    <input type="text" name="desc" maxlength="255" /></label></p>
  <p><input type="submit" value="Hochladen" /></p>
</form>

<p>Folgende Dateien sind in der Datenbank gespeichert::</p>
<table>
<tr>
  <th>Dateiname</th>
  <th>Typ</th>
  <th>Beschreibung</th>
</tr>
<?php

if (mysql_num_rows($filelist) > 0) {
  while ($f = mysql_fetch_array($filelist)) {
    ?>

<tr valign="top">
  <td>
    <a href="<?php echo $_SERVER['PHP_SELF'];
        ?>?action=view&id=<?php echo $f['id']; ?>">
      <?php echo $f['filename']; ?></a>
  </td>
  <td><?php echo $f['mimetype']; ?></td>
  <td><?php echo $f['description']; ?></td>
  <td>
    [<a href="<?php echo $_SERVER['PHP_SELF'];
        ?>?action=dnld&id=<?php echo $f['id']; ?>"
      >Download</a> |
    <a href="<?php echo $_SERVER['PHP_SELF'];
        ?>?action=del&id=<?php echo $f['id']; ?>"
      onclick="return confirm('Diese Datei löschen??');"
      >Löschen</a>]
  </td>
</tr>

<?php
  }
} else {
  ?>
  <tr><td colspan="3">Keine Dateien!</td></tr>
  <?php
}
?>
</table>
</body>
</html>

################ Code wasserzeichen einbetten ###########
$Bild = "/www/htdocs/w00/bilder/galerie/".$zeileholen["pfad"]."/normal/".$zeileholen1["datei"];
$Grafik = ImageCreateFromJPEG($Bild);
$Wasserzeichen = ImageCreateFromPNG("wasserzeichen.png");

ImageCopy($Grafik, $Wasserzeichen, imagesx($Grafik)-imagesx($Wasserzeichen), imagesy($Grafik)-imagesy($Wasserzeichen), 0, 0, imagesx($Wasserzeichen), imagesy($Wasserzeichen));

imagejpeg($Grafik,$Bild);

  1. Ändere bitte sofort dien MySQL Passwort! Das gibts doch gar nicht.

    --
    LG,
    Snafu
  2. Hi,

    • in die Grafik soll ein wasserzeichen eingebetet werden
    • die datei soll als thumbnail erstellt und ubenfalls in dei datenbank.

    kann mir einer da helfen?

    Nein, da du dem wie-poste-ich-moeglichst-unsinnig-Schema gefolgt bist - einfach den Code hier abgeladen, und nicht der Hauch einer Beschreibung, wo dein *Problem* liegt.

    Also lese bitte die Tipps für Fragende, und hole das Fehlende in einem weiteren Posting in diesem Thread nach.

    MfG ChrisB

    1. Hallo!

      Nein, da du dem wie-poste-ich-moeglichst-unsinnig-Schema gefolgt bist - einfach den Code hier abgeladen, und nicht der Hauch einer Beschreibung, wo dein *Problem* liegt.

      Naja, Beschreibung ist ja da. Ich denke Marco weiß gar nicht womit er überhaupt anfangen soll.

      @Marco:
      1.) ändere wie gesagt dein MySQL Passwort
      2.) Bevor du die Datei in die DB schreibst solltest du das Wasserzeichen einfügen und das Thumbnail erstellen. Schau, dass die gdlib installiert ist und schau dir folgende Sachen im der PHP Doku an:
      http://at.php.net/manual/de/function.imagecreatetruecolor.php
      http://at.php.net/manual/de/function.imagecreatefromjpeg.php (und die sonstigen)
      Ausserdem noch die anderen Funktionen. Da is alles dabei was du brauchst.

      --
      LG,
      Snafu
      1. Nein, da du dem wie-poste-ich-moeglichst-unsinnig-Schema gefolgt bist - einfach den Code hier abgeladen, und nicht der Hauch einer Beschreibung, wo dein *Problem* liegt.
        Naja, Beschreibung ist ja da. Ich denke Marco weiß gar nicht womit er überhaupt anfangen soll.

        O.K. vl hast du doch Recht. Ganz unten steht ja noch was mit imagecreatefromXXX.
        Dann fehlt wohl doch die Problembeschreibung.

        --
        LG,
        Snafu
        1. sorry wegen passwort. dachte ich habe die blankoversion genommen.
          Naja, ist abgeändert.
          Danke für den Hinweis.

          mein problem ist, dass ich nicht weiss wie ich die Aktionen vor der Speicherung in die DB ausführe.

          imagejpeg($Grafik,$Bild);
          löst logischerweise ne Fehlermeldung aus.

          Komme irgendwie aber nicht weiter.

          1. Hi,

            mein problem ist, dass ich nicht weiss wie ich die Aktionen vor der Speicherung in die DB ausführe.

            Die speicherst die Bilddaten in die DB?
            Das ist im Regelfalle ziemlicher Unfug - das Dateisystem ist der bessere Ablageort fuer Daten solcher Art und solchen Umfangs.

            imagejpeg($Grafik,$Bild);
            löst logischerweise ne Fehlermeldung aus.

            Wieso "logischerweise", und *welche*? (Hast du die Tipps fuer Fragende gelesen? Wenn ja, warum postest du dann immer noch solch einen nichtssagenden Unfug?)

            Komme irgendwie aber nicht weiter.

            Speichere die Bilder selbst nicht in die DB, sondern auf Platte.
            Wenn du sie partout und wider jeder Vernunft in der DB haben willst - dann speichere sie per imagejpeg erst auf Platte, und lese sie von dort wieder ein - oder fange den Output von imagejpeg mittels output buffering (Stichwort!) ab.

            MfG ChrisB

      2. Hi,

        Nein, da du dem wie-poste-ich-moeglichst-unsinnig-Schema gefolgt bist - einfach den Code hier abgeladen, und nicht der Hauch einer Beschreibung, wo dein *Problem* liegt.
        Naja, Beschreibung ist ja da.

        Nein, ich habe extra noch mal nachgelesen - da ist nur das uebliche "ich hab dies, ich will jenes" vorhanden - aber keinerlei vernuenftige Problembeschreibung in der Form, "ich habe dies versucht, dabei trat aber jener Fehler auf" oder "..., aber ich wusste nicht, wie ich ... machen kann/soll" o.ae.

        Ich denke Marco weiß gar nicht womit er überhaupt anfangen soll.

        Dann haette er ja wenigstens mal vernuenftig nach Vorschlagen fragen koennen.

        In der aktuellen Form war sein Posting m.E. jedenfalls wieder mal eines der (zu) vielen schlicht "hingerotzten" - ich schreib, was ich haben will, und ihr macht dann bitte mal.

        MfG ChrisB

  3. Hallo,

    Nun aber folgendes Problem zu lösen:

    • in die Grafik soll ein wasserzeichen eingebetet werden
    • die datei soll als thumbnail erstellt und ubenfalls in dei datenbank.

    Vielleicht ist meine kleine selbstgeschriebene modpic-Klasse etwas für dich, damit kannst ganz einfach Thumbnails erstellen, die korrekt verkleinert werden, und Wasserzeichen einbetten. Eigentlich zwar nur in Textform, aber vielleicht schaffst du es auch selber sie umzuschreiben, dass sie auch mit Grafiken klarkommt.

    Schöne Grüße,
    Willi