# Gerade hochgeladenes Bild mit Php anzeigen



## ede592 (20. November 2007)

Hallo

Ich bin noch Neuling mit PHP. Ich habe einen script geschrieben, womit ich ein bild hochladen kann. Dieses Bild undzwar nur das bild soll er mir in einer anderen Datei anzeigen.  
Der Quellcode um das Bild hochzuladen: 

```
<form action="upload.php" method="post" enctype="multipart/form-data" name="Upload-Form">
<table><tr><td>
Bild</td><td>
<input type="file" name="file" size="30">
</td></tr><tr><td height="5"></td></tr></table>
<input type="submit" name="submit" value="Hochladen!">
<input type="reset" name="reset" value="Zurücketzen!">
</form>
<?php
$tempname=$_FILES['file']['tmp_name'];
$name=$_FILES['file']['name'];
$size=$_FILES['file']['size'];
$type=$_FILES['file']['type'];
$max_size=2000000;
##

if($size >= $max_size){
		$err[]="Maximale dateigroeße beträgt $max_size";}	
if(empty($err)) {
	copy("$tempname","$name");
	}
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}  	
	

?>
```
Soweit erstmal jetz möchte ich das Bild einfach in einer anderen Datei anzeigen lassen. Wie müsst ich diese Datei umschreiben bzw. was muss ich in die andere Datei schreiben?
Danke


----------



## Chaosengel_Gabriel (20. November 2007)

Zunächst musst du die Datei irgendwo abspeichern...
Dann solltest du auch den Namen der Datei speichern...

Sonst hast du nix zum zeigen und auch weißt nicht mal wie die nicht vorhandene Datei heißt 

Dann kannste die ganz normal mit dem img_Element aufrufen ^^


----------



## cesupa (20. November 2007)

Hallo,

also ein Upload mit PHP funktioniert folgendermaßen: Zuerst wird über HTML die Datei hochgeladen, PHP erkennt diese dann als temporäre Datei an. Diese temporäre Datei muss jetzt aber noch verschoben werden, damit sie auch im Ziel gespeichert wird. Das bewerkstelligst du mit folgender Funktion:

http://www.php.net/manual/de/function.move-uploaded-file.php

Dann hast du auch die URL zu dem Bild, diese fügst du jetzt ganz normal in ein <img>-Tag ein und gibst das ganze mit echo aus, schon müsstest du dein hochgeladenes Bild sehen. Hoffe, das wars, was du meintest.

Schöne Grüße
cesupa


----------



## ede592 (20. November 2007)

ja das hab ich schon also der speichert die datei unter dem gleichen namen aber wie er hochgeladen wurde und im gleichen verzeichniss wo die upload.php liegt nur ich will jetz ne about_me.php (liegt im gleichen verzeichniss) anlegen wo ich dieses hochgeladene bild aufrufe. In der upload datei sind allerdings noch die ganzen input eingabe felder etc. und die soll man alle nicht sehen man soll nur das bild sehen.


----------



## Chaosengel_Gabriel (20. November 2007)

Speicher den Namen der Datei in ner MySQL Datenbank, dann kannst du den Namen flexibel wieder aufrufen...
Dann liest du den Namen aus der Tabelle aus und setzt ihn in das img_Tag ein und schon siehst du das Bild...

Die Formularfelder umgehst du entweder, wenn du das auf ner seperaten Datei ausgibst oder du bastelst dir nen Komplexeres PHP-Skript mit ner Session und so, sodass DU dich einloggst zum hochladen des Bildes und NUR dann das Formular auch erscheint... Oder irgendwei so, aber das würde wohl etwas komplizierter werden, da du dazu FAST nen ganzes CMS schreibsen müsstest ^^

[EDIT]
Und nochmal zur Info:
Output beim Client = HTML
Arbeit aufm Server = PHP

Das Bild kannst du NUR mit HTML darstellen lassen, denn PHP arbeitet nur auf dem Server und hat NICHTS mit dem Client zu tun


----------



## CraisiePrinzZ (21. November 2007)

Also wenn ich das richtig verstanden habe, willst du in deiner upload.php die Datei hochladen und in deiner about_me.php diese Bild dann angezeigt bekommen?!

Das hochladen hast du ja schon bewältigt, wie du meinst. Jetzt kannst du die Bildinformationen entweder wie Chaosengel_Gabriel schon erwähnte es in eine MySQL Datenbank speichern und nach dem auslesen dieser Datenbank diese Bild direkt anzeigen, du kannst aber auch das Verzeichnis nach Bilddateien durchsuchen und diese Namen in das <img>-Element eintragen.

Gruß


----------



## drucko (21. November 2007)

Du solltest auf jeden Fall noch absichern, dass es sich wirklich um ein Bild handelt!
Auf gültige Endung überprüfen (.jpg, .jpe, .jpeg, .gif , ...) und am Besten noch mit der
getimagesize()-Funktion!


----------



## Chaosengel_Gabriel (21. November 2007)

Mal ne komplette Fehlerüberprüfung für Bilder von mir:

```
$errors = array();
// Uploadfehler prüfen
switch ($file['Bild']['error']){
case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 999 KB ist.";
break;
case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 999 KB ist.";
break;
case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
break;
case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
break;
default : break;
}
// Prüfen, ob eine Grafikdatei vorliegt
if(!@getimagesize($file['Bild']['tmp_name']))
$errors[] = "Ihre Datei ist keine gültige Grafikdatei.";
else {
// Mime-Typ prüfen
$erlaubte_typen = array('image/pjpeg',
'image/jpeg',
'image/gif',
'image/png'
);
if(!in_array($file['Bild']['type'], $erlaubte_typen))
$errors[] = "Der Mime-Typ ihrer Datei ist verboten.";

// Endung prüfen
$erlaubte_endungen = array('jpeg',
'jpg',
'gif',
'png'
);
// Endung ermitteln
$endung = strtolower(substr($file['Bild']['name'], strrpos($file['Bild']['name'], '.')+1));
if(!in_array($endung, $erlaubte_endungen))
$errors[] = "Die Dateiendung muss .jpeg .jpg .gif oder .png lauten ";

// Ausmaße prüfen
$size = getimagesize($file['Bild']['tmp_name']);
if ($size[0] > 1024 OR $size[1] > 768)
$errors[] = "Die Datei darf maximal 1024 Pixel breit und 768 Pixel hoch sein.";
}
// Dateigröße prüfen
if($file['Bild']['size'] > 1022976)
$errors[] = "Bitte w&auml;hlen Sie eine Datei aus, die kleiner als 999 KB ist.";

if(count($errors)){
echo "Ihre Bilder konnten nicht gespeichert werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
echo "<br>\n".
'Zurück zum <a href="'.$_SERVER['PHP_SELF'].'?page=pics">Bilder hinzufügen</a>'."\n";
}
else {
// Bild auf dem Server speichern
$uploaddir = 'partypics/';
// neuen Bildname erstellen
$Name = "IMG_".substr(microtime(),-8).".".$endung;
if (move_uploaded_file($file['Bild']['tmp_name'], $uploaddir.$Name)) {
$sql = "INSERT INTO
Partypics
(UserID,
Bild,
Datum,
Party
)
VALUES
(
'".mysql_real_escape_string(trim($_SESSION['UserID']))."',
'".mysql_real_escape_string(trim($Name))."',
CURDATE(),
'".mysql_real_escape_string(trim($_POST['Party']))."'
)
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

echo 'Ihre Bilder wurden erfolgreich gespeichert.<br>'."\n".'Zurück zum <a href="'.$_SERVER['PHP_SELF'].'?page=pics">Bilder hochladen</a>'."\n";
}
else {
echo 'Es trat ein Fehler auf, bitte versuche es später erneut.<br>'."\n".'Zurück zum <a href="'.$_SERVER['PHP_SELF'].'?page=pics">Bilder hochladen</a>'."\n";
}
}
```
Ausgaben und Werte sind natürlich zu ändern, da ich das jetzt grade so aus meinem Skript kopiert habe...
Sind aber alle wichtigen Überprüfungen drin:
- Ausmaße
- Dateigröße
- MIME-Typ

Copyright oder so erhebe ich nich^^ Solche Skriptbrocken sind bei mri allgemein Gut 
Hoffe das hilft dir beim Upload gut weiter...


----------

