Mini-Bilder in MySql-Datenbank speichen

sheeba1507

Erfahrenes Mitglied
Hallo zusammen,

für einen Fanartikel-Shop wollte ich kleine Bilder (120x120) in die Datenbank mit
einbinden. Dieses Verfahren erspart einen Speicherplatz auf dem Server und ein
Update ist dadurch einfacher.

Hier im Forum habe ich nichts brauchbares finden können zu diesem Thema.

Ein Script dafür habe ich hier gefunden.

Das Eingabe-Formular besteht bereits und ist auch funktionsfähig.
Lediglich die Eintragung in die Datenbank will irgendwie nicht en.
PHP:
<?php
$bild=addslashes(fread(fopen($datei, "r"), filesize($datei)));
$name=$HTTP_POST_FILES['datei']['name'];
$preis = $_POST["preis"];
$k_komm = $_POST["k_komm"];
$l_komm = $_POST["l_komm"];
include ("include/db_connect.inc.php");
$sqleintrag = "INSERT INTO olm_shop (name, logo, preis, k_komm, l_komm) 
              VALUES ('$name', '$bild', '$preis', '$k_komm', '$l_komm')";
mysql_query($sqleintrag);
$act_mess = "Neuen Shop-Artikel eingetragen !!";
header("Location: shop.php?act_mess=$act_mess");
?>
Stattdessen erhalte ich folgende Fehlermeldung
Warning: fread(): supplied argument is not a valid stream resource in
C:\Programme\xampp\htdocs\Gisbert\shop_inp_write.php on line 2

Warning: Cannot modify header information - headers already sent by
(output started at C:\Programme\xampp\htdocs\Gisbert\shop_inp_write.php:2) in
C:\Programme\xampp\htdocs\Gisbert\shop_inp_write.php on line 12
Kann jemand diesen Fehler hier finden ?
Das Script wird dringend benötigt, da die Webseite in den nächsten Tagen
online gehen soll.

Schon jetzt vielen Dank für die Hilfe.

Gruß, Mike
 
Die Variable $datei wird im Eingabe-Formular gesetzt.

PHP:
<td width="188">
  <input name="datei" type="file" id="datei" 
    style="background-color:#CCCCCC; font-size:12px; 
    border : 1px solid #000000; width:186px" />
</td>

Gruß, Mike
 
Dann musst du dein Script noch anpassen auf mit:

PHP:
$datei = $_FILES['datei']['tmp_name'];

über dem auslesen der Datei. Das enctype wirst du ja auch gesetzt haben per

HTML:
<form enctype="multipart/form-data">
 
Zuletzt bearbeitet:
Wo muß dieser Code
PHP:
$datei = $_FILES['datei']['tmp_name'];
eingefügt werden und wo kommt die Variable 'tmp_name' her ?

Ja,
PHP:
<form enctype="multipart/form-data">
habe ich im Eingabe-Formular gesetzt.

Gruß, Mike
 
Hurra und vielen Dank, die Eingabe t.

Jedoch habe ich jetzt ein riesen Problem bei der Ausgabe.
Muß mir das mal genauer zu Gemüte führen und den Schock verdauen. :confused:

Wenn ich durchblicke, melde ich mich noch mal.
Erst mal vielen Dank für die Hilfe.

Gruß, Mike
 
Zur Ausgabe der Bilder brauchst du natürlich noch eine 2. PHP Datei "thumb.php" oder so, der du die ID des Datensatzes mit übergibst und die das Bild darstellt.

Eine Frage noch: Sind alle Bilder der gleichen Sorte? also alles JPG Files oder so? Ansonsten musst du unbedingt den Mime-Type mitspeichern.
 
Alle Bilder sind vom gleichen Typ (*.jpg) und sind zwischen 3-6 KB klein.
Habe eben die Tabelle geprüft, die Einträge sind in Ordnung (Blob ca. 2,4 KB).

Die Ausgabe erfolgt hierdurch :

PHP:
$sqlabfrage = "SELECT * from olm_shop";
$ergebnis = mysql_query($sqlabfrage) or die("Fehler in SQL-Abfrage!");

  if ($ergebnis > 0)
    {
    ?>
    <table>
      <?php
      while ($datensatz = mysql_fetch_array($ergebnis))
        {
        ?>
        <tr>
          <td align="left" width="100px">
            <img src="<?php echo $datensatz["logo"];?>" height="60" alt="logo"/>
            </a>
          </td>
          <td align="left" width="100px"><?php echo $datensatz["preis"];?></td>
          <td align="left" width="540px"><?php echo $datensatz["k_komm"];?></td>
        </tr>
        <tr><td><br /></td></tr>
        <?php
        }
        ?>
    </table>
    <?php
    }
  else

Das Ergebnis sieht aus wie nach einem Tornado. Lauter Binär-Daten. :mad:

Habe ich igendwas vergessen einzutragen oder mit zu übergeben ?
Nach ID abfragen bringt ja nichts, da ich alle Artikel angezeigt bekommen möchte.

Irgendwann schmeiß ich den Shop raus und mache es manuell. :rolleyes:

Gruß, Mike
 
Hauptdatei:
PHP:
<?
$sqlabfrage = "SELECT * from olm_shop";
$ergebnis = mysql_query($sqlabfrage) or die("Fehler in SQL-Abfrage!");

  if ($ergebnis > 0)
    {
    ?>
    <table>
      <?php
      while ($datensatz = mysql_fetch_array($ergebnis))
        {
        ?>
        <tr>
          <td align="left" width="100px">
            <img src="logo.php?i=<?php echo $datensatz["id"];?>" height="60" alt="logo"/>
            </a>
          </td>
          <td align="left" width="100px"><?php echo $datensatz["preis"];?></td>
          <td align="left" width="540px"><?php echo $datensatz["k_komm"];?></td>
        </tr>
        <tr><td><br /></td></tr>
        <?php
        }
        ?>
    </table>
    <?php
    }
  else

Datei logo.php:

PHP:
<?
$id = $_GET['id'] * 1; // Typecast auf INT (SQL Injection wird unmöglich)
$sqlabfrage = "SELECT `logo` from olm_shop WHERE `id` = $id LIMIT 1";
$ergebnis = mysql_query($sqlabfrage) or die("Fehler in SQL-Abfrage!");

header('Content-Type: image/jpg');
echo $ergebnis['logo'];
?>
 

Neue Beiträge

Zurück