Anzeigefehler...

Alles, was PHP betrifft, kann hier besprochen werden.

Anzeigefehler...

Postby cracker1981 » 19. August 2005 12:09

Code: Select all
<html>
<head>
<meta http-equiv="Content-Type"
      content="text/html; charset=iso-8859-1" />
<link href="table.css" rel="stylesheet" type="text/css">
<title>Handling images</title>
</head>
<body>

<?php
//Fehler anzeigen lassen(nach Fertigstellung wieder entfernen)
error_reporting(E_ALL);

//Verbindung zu Datenbank herstellen
$host = 'localhost';      //Dringend nachtragen
$user = 'user';         //Dringend nachtragen
$password = '123456';   //Dringend nachtragen
$database = 'testimages';       //Dringend nachtragen
$link = mysql_connect($host,$user,$password);
mysql_select_db($database);

//Bilder speichern
$submitbtn=$_POST['submitbtn'];
$descr=$_POST['descr'];
$imgfile=$_FILES['imgfile'];

if($submitbtn == 'OK' and is_array($imgfile)) {
  $name    = $imgfile['name'];
  $type    = $imgfile['type'];
  $size    = $imgfile['size'];
  $uperr   = array_item($imgfile, 'error');
  $tmpfile = $imgfile['tmp_name'];
  if(!$descr) $descr = $name;
  switch ($type) {
  case "image/gif":
    $mime = "GIF Image";  break;
  case "image/jpeg":
  case "image/pjpeg":
    $mime = "JPEG Image"; break;
  case "image/png":
  case "image/x-png":
    $mime = "PNG Image";  break;
  default:
    $mime = "unknown";
  }
  if(!$tmpfile or $uperr or $mime == "unknown" or !is_uploaded_file($tmpfile))
    /* echo "<p>An error occured when processing the form data:
             Perhaps you forgot to specify an
             image file or the file is too large
             or the image type is unknown.</p>\n"; */
    echo "<p>Es ist ein Fehler aufgetreten. Mögliche Ursachen:
             Sie haben vergessen, den Dateinamen des Bilds anzugeben,
             oder das Bild ist zu groß oder sein Dateityp ist unbekannt.</p>\n";
  else {
    // read the uploaded file and save it into database
    $file = fopen($tmpfile, "rb");
    $imgdata = fread($file, $size);
    fclose($file);
    if(!$mysqli_query(
        "INSERT INTO images (name, type, image) " .
        "VALUES ('" . $mysqli_escape_string($descr) . "', " .
        "        '$mime', " .
        "        '" . $mysqli_escape_string($imgdata) . "')"))
      printf("<p>Das Bild konnte nicht gespeichert werden: %s</p>\n", $mysqli_error);
  }
}



echo "<h2>Zuletzt eingefügte Bilder ...</h2>\n";
$sql =
  "SELECT id, name, " .
  "DATE_FORMAT(ts, '%Y/%c/%e %k:%i') AS dt " .
  "FROM images ORDER BY ts DESC LIMIT 10";
$result = mysql_query($sql) OR die(mysql_error()) ;
$num_rows = mysql_num_rows($result);
if($num_rows==0)
  echo "<p>In der Datenbank befinden sich noch keine Bilder ...</p>\n";
else {
  while($row = mysql_fetch_object($result))
    $rows[] = $row;
  echo '<table>', "\n<tr>";
  for($i=0; $i<sizeof($rows); $i++)  // images
    echo '<th>',
      "<img src=\"showpic.php?id=" .
      $rows[$i]->id . "\" /></th>";
  echo "</tr>\n<tr>";
  for($i=0; $i<sizeof($rows); $i++)  // names/descriptions
    echo "<td>" . htmlentities($rows[$i]->name) . "</td>";
  echo "</tr>\n<tr>";
  for($i=0; $i<sizeof($rows); $i++)  // date+time
    echo "<td>" . $rows[$i]->dt . "</td>";
  echo "</tr>\n</table>\n";
}


?>

<h2>Bild-Upload</h2>

<p>Maximimale Dateigröße 200 kB. Zulässige Formate: PNG, JPEG and GIF.</p>

<table>
<form method="post" action="images.php" enctype="multipart/form-data">
  <input type="hidden" value="204800" name="MAX_FILE_SIZE" />
  <tr><td>Beschreibung (optional):</td>
       <td><input name="descr" type="text" /></td></tr>
  <tr><td>Dateiname:</td>
       <td><input name="imgfile" type="file" /></td></tr>
  <tr><td></td>
       <td><input type="submit" value="OK" name="submitbtn" /></td></tr>
</form>
</table>

</body></html>


Der oben stehende Code soll mir Bilder aus eine DB anzeigen und eine Upload erlauben.
Ich erhalte zwar keine Fehlermeldung, jedoch wird das Bild nicht angezeigt. Ausserdem funktionert der Upload überhaupt nicht. Kann mir jemand da weiter helfen?
cracker1981
 
Posts: 34
Joined: 11. January 2005 12:07

Postby jakimo72 » 20. August 2005 04:54

Im Abschnitt mit dem abspeichern
1. Was soll das array_item(,)?
2. entweder mysql oder mysqli gemischt find ich unschön.
3. funktionen bitte immer ohne $
Code: Select all
if($submitbtn == 'OK' and is_array($imgfile)) {
  $name    = $imgfile['name'];
  $type    = $imgfile['type'];
  $size    = $imgfile['size'];
  $uperr   = $imgfile['error'];
  $tmpfile = $imgfile['tmp_name'];
  if(!$descr) $descr = $name;
  switch ($type) {
  case "image/gif":
    $mime = "GIF Image";  break;
  case "image/jpeg":
  case "image/pjpeg":
    $mime = "JPEG Image"; break;
  case "image/png":
  case "image/x-png":
    $mime = "PNG Image";  break;
  default:
    $mime = "unknown";
  }
  if(!$tmpfile or $uperr or $mime == "unknown" or !is_uploaded_file($tmpfile))
    /* echo "<p>An error occured when processing the form data:
             Perhaps you forgot to specify an
             image file or the file is too large
             or the image type is unknown.</p>\n"; */
    echo "<p>Es ist ein Fehler aufgetreten. Mögliche Ursachen:
             Sie haben vergessen, den Dateinamen des Bilds anzugeben,
             oder das Bild ist zu groß oder sein Dateityp ist unbekannt.</p>\n";
  else {
    // read the uploaded file and save it into database
    $file = fopen($tmpfile, "rb");
    $imgdata = fread($file, $size);
    fclose($file);
    if(!mysql_query(
        "INSERT INTO images (name, type, image) " .
        "VALUES ('" . mysql_escape_string($descr) . "', " .
        "        '$mime', " .
        "        '" . mysql_escape_string($imgdata) . "')"))
      printf("<p>Das Bild konnte nicht gespeichert werden: %s</p>\n", mysql_error());
  }
}


Und in Sachen Anzeigen:
Wie sieht denn die Datei showpic.php aus?


Ansonsten ist noch zu beachten, dass man MEDIUMBLOB
oder LONGBLOB als Datentyp verwenden muss,
BLOB ist auf 65KB beschränkt.

Ich bin immer noch der Meinung, dass Bilder
in einer MySQL-Datenbank nicht viel Sinn machen.
Ich bevorzuge immer noch die gute alte Methode,
Bilder ins Dateisystem, und den Dateinamen und Pfad
in der Datenbank abspeichern.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby cracker1981 » 22. August 2005 07:42

showpic.php
Code: Select all
  // get id; exit if no id
  $id = $_GET['id'];
  if(!$id) exit;

  // connect to MySQL, query for picture
 
  $result = $mysql_query(
    "SELECT image, type FROM images WHERE id = $id");
  if(!$result) exit;

  // show picture
  $row = mysql_fetch_object($result);
  if(!$row) exit;
  header($row->type);
  echo $row->image;


Habe deine Verbesserungsvorschläge berücksichtigt. Problem bleibt dennoch bestehen.

1. Longblob habe ich verwendet.
2. array_item war ne funktion aus nen anderen skript.hatte gedacht alle gelöscht zu haben.
3. welche funktion hat $ davo stehen? Sehes nicht.
cracker1981
 
Posts: 34
Joined: 11. January 2005 12:07

Postby cracker1981 » 22. August 2005 08:16

Ok. Anzeige hab ich jetzt hinbekommen.
Nur beim Uploaden tauchen Fehler auf(Es passiert garnichts).
Bitte um Hilfe.
cracker1981
 
Posts: 34
Joined: 11. January 2005 12:07

Postby jakimo72 » 22. August 2005 15:57

Die Funktionen
myqli* hatten sämtlich ein $ vorneweg.
Im meinem Codeschnipsel durch mysql* funktionen ohne $ ersetzt.

Bei mir klappt der Upload damit.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby cracker1981 » 23. August 2005 07:56

Ok.Der Upload funzt bei mir jetzt auch.Hab bei der switch-abfrage einen kleinen SChreibfehler drin.
Danke für deine Hilfe Jakimo
cracker1981
 
Posts: 34
Joined: 11. January 2005 12:07


Return to PHP

Who is online

Users browsing this forum: No registered users and 58 guests