Bilder hochladen

FP4Lisa

Mitglied
So das mit dem Bilder hochladen habe ich soweit hinbekommen, nun mal weiter im Takt.

Ich habe ja nun ein Formular, wo ich den Benutzer die Datei aussuchen lasse. Wenn er die Datei ausgewählt hat, aber noch nicht hochladen geklixt hat, wie kann ich es hinbekommen, das dem Benutzer trotzdem schon eine kleine Vorschau gezeigt wird.
In der Vorschau sollte das Bild jpeg/gif (beschränke mich vielleicht auch auf jpeg, mal schauen) auf das Format 100pxB x 200pxH zugeschnitten werden, aber die originalen Seitenverhältnisse beibehalten werden. Ist das Bild des Users 35x100 dann soll es automatisch auf 70x200 zugeschnitten werden. Oder halt wenn es größer ist ein wenig geschrumpft werden.

Hier mein Codeschnipsel dazu
PHP:
   $zielbreite = 100;
   $zielhoehe = 200;
   
   $dimensionen = GetImageSize($tempnama);
  $breite = $dimensionen[0];
  $hoehe = $dimensionen[1];
   
   if ($breite>$hoehe) // bei Querformat
   {
   $faktor = $zielbreite/$breite; // Faktor für Höhe berechnen
   $breite = $zielbreite;
   $hoehe = $hoehe * $faktor;
   }
   else //bei Höhe größer Breite also Hochformat
   {
   $faktor = $zielhoehe/$hoehe; // Faktor für Höhe berechnen
   $hoehe = $zielhoehe;
   $breite = $breite * $faktor;
   }
   // nun müssen die Werte dem Bild zugewiesen werden
Tja nun noch dem Bild die Werte zuweisen, aber wie mache ich das am dümmsten?

Das Bild soll dann auch mit diesen Werten gespeichert werden!


Ach was ich noch vergessen habe, wenn die Datei schon existiert, dann soll er sie überschreiben. Also müsste ich so eine Abfrage machen:

PHP:
  if (file_exists('pfad/'.$y.'.jpeg'))
  // dann Datei löschen hier weiß ich nicht wie
  if (file_exists('pfad/'.$y.'.gif'))
  // dann Datei löschen hier weiß ich nicht wie
Also erst alle Dateien Löschen die mit dem Namen existieren, da jeder nur eine Datei hochladen darf und es könnte ja sein, das es erst eine gif hochgeladen hatte und nun eine jpg hochläd, dann wären sonst zwei Dateien im Ordner, eine gif und eine jpeg und das darf net!

Danke für Euer Mühen!
 
Zuletzt bearbeitet:
Hi,

die Vorschau geht mit Javascript. Ist mit PHP nicht ralisierbar - zumindest nicht das ich es wüsste.
 
Also bei der Vorschau würd ich auch nur Java Script sagen.
Mit PHP geht es nur (soweit ich weiß) nach einem Neuladen der Seite.

Ach was ich noch vergessen habe, wenn die Datei schon existiert, dann soll er sie überschreiben. Also müsste ich so eine Abfrage machen:

Du kannst ganz einfach folgendes versuchen->

PHP:
$jpg='pfad/'.$y.'.jpeg';
$gif='pfad/'.$y.'.gif';

if (file_exists($jpg)&&file_exists($gif))
{
unlink($jpg); //eine der beiden löschen
}
else
{
fopen($datei,"w");
fwrite($datei,$text);
}

Meintest du das vielleicht so?

Greetz
 
Nee meine das net ganz so *lach* aber jetzt merke ich erstmal selber, wie blöd ich mich ausgedrückt habe!
Nun ich habe ja folgendes: Ein Besucher kann eine gif oder eine jpg datei hochladen. Es können also folgende von einander unabhängige Fälle eintreten:

A: User läd eine jpg Datei hoch, es ist noch keine andere Datei von ihm vorhanden.

B: User läd eine jpg Datei hoch, es ist schon eine jpg Datei von ihm vorhanden, welche überschrieben werden soll.

C: User läd eine jpg Datei hoch, es ist schon eine gif Datei von ihm vorhanden, welche gelöscht werden soll, bevor die neue jpg hoch darf.


D: User läd eine gif Datei hoch, es ist noch keine andere Datei von ihm vorhanden.

E: User läd eine gif Datei hoch, es ist schon eine gif Datei von ihm vorhanden, welche überschrieben werden soll.

F: User läd eine gif Datei hoch, es ist schon eine jpg Datei von ihm vorhanden, welche gelöscht werden soll, bevor die neue jpg hoch darf.

Nun brauche ich ein Script, das es mit all den Fällen aufnimmt :) ... also nimmt man
PHP:
unlink($datei);
um des zu löschen, na mal schauen ob ich was selber basteln kann, das war der Schnipsel der mir gefehlt hat.

----------------------------------------------------------------------------------------------------------------------

Das mit der Vorschau lasse ich dann ersteinmal, was ich aber noch wissen mag ... hatte ja ein kleines php Skript ^^ gepostet, mit welchem ich die Höhe ändern mag. Das Rechnerische ist net das Proplem, aber wie weise ich die neuen Maße einer Bilddatei zu?

----------------------------------------------------------------------------------------------------------------------

Schon mal ganz lieb Danke sag für eure Tips.
 
Zuletzt bearbeitet:
Ich kenne dein Benutzer-Verwaltungs-System nicht. Nehmen wir aber an, dass du in einer Variable, nennen wir sie BenutzerNummer, die Nummer oder eindeutige ID (also wenn der Name eindeutig ist, z.B. diesen) des Benutzers gespeichert hast. Nehmen wir weiter an, dass du in dem Verzeichnis "Bilder_Hochgeladen/" die hochgelanden Bilder speicherst.

So sollte es eigentlich recht einfach möglich sein, du speicherst also die Bilder ala :
Bilder_Hochgeladen/bildBenutzerNummer.endung. Konkret also z.B. bild102.jpg für ein JPEG-Bild, welches der User 102 hochgeladen hat.

Schlussendlich überprüfust du ob bild102.jpg ODER bild102.gif besteht und löscht dieses, danach bewegst du das neu hochgeladene dahin.
 
Also gilt folgendes zu erstellen:

Userbereich, in welchem er seine Bilder alle ansehen kann um zu wissen, ob und welche Bilder er bereits hochgeladen hat.

Zu jedem Bild ein Löschbutton und eine Eingabemaske, über welche er Bilder hochladen kann.

Zuvor sollte ein User der sich neu anmeldet ein eigenes Verzeichnis erhalten, in welchem ausschl. seine Bilder hochgeladen werden.

Das wäre die eine Möglichkeit. Die andere ist, alles über eine Datenbank und ein einziges Verzeichnis zu steuern.

Das erfordert eine DB-Tabelle mit den Usern und eine Tabelle mit den Bildern, welche den Usern zugeordnet sind.

Das Verzeichnis und die Funktion der Darstellung der Bilder wird somit über die DB bei Login verwaltet und entsprechend ausgegeben.
 
Habe folgendes probiert ...

PHP:
 if (isset($_REQUEST['hochladen'])){
 
 		    		    		$tempname = $_FILES['pic']['tmp_name'];
 		    		    		$name = $_FILES['pic']['name'];
 		    		    		$namex = '.'.$name;
 		    		    		$dateiname = explode(".",$namex);
 		    		    		$datei = $dateiname[1];
 		    		    		$endung = $dateiname[2];
 		    		    		$neuername = $y.'.'.$endung;
 		    		    		
 		    		    		$type = $_FILES['pic']['type'];
 		    		    		$size = $_FILES['pic']['size'];
 		    		    		
 		    		    		$ordner = '../profilpics/';
 		    		    		$gif = $ordner.$y.'.gif';
 		    		    		$jpg = $ordner.$y.'.jpg';
 		    		    		$pfad = $ordner.$neuername;
 		    		    		
 		    		    		if($type != "image/gif" && $type != "image/jpeg") {
 		    		    			$err[] = "Nur gif und jpeg Dateien dürfen hochgeladen werden.";
 		    		    		}
 		    		    		if($size > "15000") {
 		    		    			$err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!";
 		    		    		}
 		    		    		echo $gif;
 		    		    		if (file_exists("$gif"))
 		    		    		{
 		    		    		unlink("$gif");
 		    		    		}
 		    		    		
 		    		    		if (file_exists("$jpg"))
 		    		    		{
 		    		    		unlink("$jpg");
 		    		    		}
 		    		    		
 		    		    		if(empty($err)) {
 		    		    		    copy("$tempname", "$pfad");
 		    		    			#header ("Location: profil.php?x=".$x);
 		    		    		}
 		    		    		
 		    		    		else {
 		    		    			foreach($err as $error)
 		    		    			echo "$error<br>";
 		    		    		}
 						}

...bekomme aber diesen ...

Code:
Warning:  unlink(../profilpics/FP4Lisa.jpg): Permission denied in ...\profilpicupload.php on line 101
... hässlichen Fehler. Zugriff verweigert ... warum?

Die Datei wurde aber trotzdem geändert, was denn das jetzt?
 
Zuletzt bearbeitet:
Weil du das Verzeichnis nicht geöffnet hast um unlink() auszuführen. Du musst auch für unlink() opendir() voran setzen.
 
Zurück