Bild auf dem Server. Jetzt noch den Pfad speichern?

Erstmal danke für deine Mühe das weiß ich wirklich zu schätzen!

PHP:
if($type == "image/gif") {  
    $sFileType = '.gif';
} elseif ($type == "image/pjpeg"){
    $sFileType = '.jpg';
}else{
    $error .= "nur gif und jpeg Dateien dürfen hochgeladen werden.<br>";  
}

Wenn ich diesen Teil als Kommentar mache. Dann wird die Datei in mein Ordner kopiert, aber ich bekomme diese Fehlermeldung:

Die Datei 56679b8daff21932718ccab0b42a073a wurde erfolgreich in den Ordner C:\xampp\htdocs\MySQL und PHP Tests\galerie\upload_bilder/ gespeichert!
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\MySQL und PHP Tests\galerie\upload.php on line 45

Und bei PhpMyAdmin ist auch nicht zu sehen. Sprich dort wird nicht eingefügt. Woran könnte das liegen?
 
Zuletzt bearbeitet:
Hallo ...

Kurz erstmal nochmal zum SQL ...

Wenn du mit PHPmyadmin arbeitest, dann kannst du ja auch dort Datensätze in deine Tabelle einfügen. Mach dass einfach mal so, als würdest du einen echten Datensatz einfügen.

Wenn das erfolgreich war, dann zeigt er dir den richtigen SQL-Befeht an. Diesen kannst du so wie er ist für deinen SQL-Befehl für dein PHP-Script übernehmen, du brauchst dann einfach nur noch die Werte mit den Variablen austauschen.

So mache ich das immer, wenn MySQL nicht so will wie ich es gerne will.

******

Jetzt zu deine letzten Frage/Fehlermeldung:

Diese kleine If-Abfrage deines Dateityps, soll feststellen, ob du jetzt ein gif oder ein jpeg hochgeladen hast. Am Ende wird dann festgelegt, welche Dateiendung dein neuer Dateiname haben soll.

Wenn ich die Fehlermeldung richtig intrepretiere: "Die Datei 56679b8daff21932718ccab0b42a073a " ... setzt der ja an das Ende auch keine Dateiendung. Daher brachst du die if-Abfrage.

Du solltest Ordnernamen wie diese vermeiden :"MySQL und PHP Tests" ... durch Freizeichen und andere Sonderzeichen können auch Fehler entstehen! Besser so : "MySQL_und_PHP_Tests"

Ich weis leider nicht was genau in der upload.php Zeile 45 drinsteht .. kannst du das kurz aufzeigen?

In meinem Beispiel was ich dir gestern hochgeschickt habe, habe ich deine MySQL-Tabelle abgeändert. Du must noch den Pfad speichern.

Wer der Fotograf ist, ist erstmal egal .. wenn das Foto mit richtigem Namen abgespeichert ist und alle Daten vom Bild in der Tabelle stehen, dann kann man sich an die Feinheiten machen.

Gruß Grille
 
Zuletzt bearbeitet:
Ok, habe das versucht aber es geht nicht.

Wenn ich alles ganz normal mache wie du mir geschrieben hattest, bekomme ich diese Fehlermeldung:

Notice: Undefined variable: sFileType in C:\xampp\htdocs\MySQL und PHP Tests\galerie\upload.php on line 35
nur gif und jpeg Dateien dürfen hochgeladen werden.

Das mit dem unterstrich bei meinen Orndernamen werde ich in Zukunft so machen.

Zeile 35:
PHP:
if(!$sNewImagename = random_image_name($sSavePath, $sFileType)) {  
  $error .= "Fehler! Es hat nicht funktioniert einen neunen Bildnamen zu erstellen.<br>";

So wird auch nichts hochgeladen. Wenn ich aber diesen Code in ein Kommentar setze:

PHP:
if($type == "image/gif") {  
    $sFileType = '.gif';
} elseif ($type == "image/pjpeg"){
    $sFileType = '.jpg';
}else{
    $error .= "nur gif und jpeg Dateien dürfen hochgeladen werden.<br>";  
}

Wird das Bild hochgeladen, aber mit keiner endung am ende.

Und wenn ich in PHPmyadmin, den SQL befehl so wie du geschrieben hast durch den jetzt vorhandenen ersetze geht es trotzdem nicht.
 
Ich habe jetzt versucht alles nachzubauen.
Du solltes bei Fehlern systematisch vorgehen, und dir immer alle Variablen ausgeben lassen.

hier ist der Code mit allen relevanten Variablen: ($Arbeitsablauf ist die Variable zur Variablenausgabe/Prüfung):

PHP:
<form action='' method='post' enctype='multipart/form-data' >
<p class='form_text'>Bitte Bilddatei/Logo auswählen:</p>
<input type=file name=upload_file>
<input type='submit' name='OrgReg' value='absenden'>
</form>
<?php
function random_image_name($sSavePfad, $sFileType){ 
    srand((double)microtime()*1000000);   // for older than version 4.2.0 of PHP 
    do{ 
        $sNewFilename = md5(uniqid(rand())) .$sFileType; 
    } while( file_exists($sSavePfad.$sNewFilename)); 
    return $sNewFilename; 
}
$Arbeitsablauf = '';
$tempname = $_FILES['file']['tmp_name'];   
$name = $_FILES['file']['name'];   
$type = $_FILES['file']['type'];   
$size = $_FILES['file']['size'];  
$error = ''; 
$sSavePath = realpath(dirname(__FILE__).'/../flugzeugbildchen').'/'; 
$Arbeitsablauf .= '$_FILES: '.$_FILES.'<br>';
print_r($_FILES);
$Arbeitsablauf .= '$tempname: '.$tempname.'<br>';
$Arbeitsablauf .= '$name: '.$name.'<br>';
$Arbeitsablauf .= '$type: '.$type.'<br>';
$Arbeitsablauf .= '$size: '.$size.'<br>';
$Arbeitsablauf .= '$sSavePath: '.$sSavePath.'<br>';
if($_FILES){
 if($type == "image/gif") {   
     $sFileType = '.gif'; 
 } elseif ($type == "image/pjpeg"){ 
     $sFileType = '.jpg'; 
 }else{ 
     $error .= "nur gif und jpeg Dateien dürfen hochgeladen werden.<br>";   
 }
 $Arbeitsablauf .= '$sFileType: '.$sFileType.'<br>';
 
 if(!$sNewImagename = random_image_name($sSavePath, $sFileType)) {   
   $error .= "Fehler! Es hat nicht funktioniert einen neunen Bildnamen zu erstellen.<br>";   
 }
 $Arbeitsablauf .= '$sNewImagename: '.$sNewImagename.'<br>';
 
 if($size > "1048576") {   
     $error .= "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!<br>";   
 }  
 
 if(!$error) {   
     copy($tempname, $sSavePath.$sNewImagename);   
     echo 'Die Datei '.$sNewImagename.' wurde erfolgreich in den Ordner '.$sSavePath.' gespeichert!';   
      
     $sSQL ='INSERT INTO `flugzeugbilder` ( `Name`, `Pfad` ) VALUES ( \''.$sNewImagename.'\' , \''.$sSavePath.'\' )'; 
     mysql_query($sSQL,$con);
     
     $Arbeitsablauf .= '$sSQL: '.$sSQL.'<br>';
 }   
 else {   
     echo $error;   
 }
}
echo $Arbeitsablauf; 
?>

Bei mir wird dann das hier ausgegeben:

Code:
Array ( [upload_file] => Array ( [name] => 01.gif [type] => image/gif [tmp_name] => /tmp/phpX0t19i [error] => 0 [size] => 6645 ) ) nur gif und jpeg Dateien dürfen hochgeladen werden.
$_FILES: Array
$tempname: 
$name: 
$type: 
$size: 
$sSavePath: /
$sFileType: 
$sNewImagename: 1d1d2ef849a096da89a81539b0cd9f88

Und daran kann ich sehen, dass du die ArraySchlüssel falsch benannt hast/ die müssen so:

PHP:
$tempname = $_FILES['upload_file']['tmp_name'];   
$name = $_FILES['upload_file']['name'];   
$type = $_FILES['upload_file']['type'];   
$size = $_FILES['upload_file']['size'];

Jetzt habe ich diese Ausgabe .. also werden Daten übergeben:

Code:
Array ( [upload_file] => Array ( [name] => 01.gif [type] => image/gif [tmp_name] => /tmp/phpi2zL62 [error] => 0 [size] => 6645 ) ) 
Warning: copy(/fd2801e7b9e8b8954efe71f24098b203.gif) [function.copy]: failed to open stream: Permission denied in [...]/upload.php on line 53
Die Datei fd2801e7b9e8b8954efe71f24098b203.gif wurde erfolgreich in den Ordner / gespeichert!
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in [...]/upload.php on line 57
$_FILES: Array
$tempname: /tmp/phpi2zL62
$name: 01.gif
$type: image/gif
$size: 6645
$sSavePath: /
$sFileType: .gif
$sNewImagename: fd2801e7b9e8b8954efe71f24098b203.gif
$sSQL: INSERT INTO `flugzeugbilder` ( `Name`, `Pfad` ) VALUES ( 'fd2801e7b9e8b8954efe71f24098b203.gif' , '/' )

Was jetzt noch nicht so richtig stimmt ist die Pfadangabe ... und da ich deine Datenbank nicht angelegt habe, die Eintragung in die Datenbank. Aber probier mal selbst und schreib wenns klappt oder nicht klappt.

Gruß Grille
 
Zuletzt bearbeitet:
Ok ich habe jetzt eine ganze weile herum probiert aber ich kapier es nicht. Das Foto wird nur in den Ordner hochgeladen wenn ich diesen Teil hier deaktiviere:

PHP:
/*if($_FILES){
 if($type == "image/gif") {   
     $sFileType = '.gif'; 
 } elseif ($type == "image/pjpeg"){ 
     $sFileType = '.jpg'; 
 }else{ 
     $error .= "nur gif und jpeg Dateien dürfen hochgeladen werden.<br>";   
 }*/

Wenn dies deaktiviert ist, erscheint das Foto im Ornder, aber ohne Dateiendung!

Und ich bekomme ich diese Fehlermeldung:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\MySQL und PHP Tests\galerie\upload.php on line 54

upload.php ->line 54

PHP:
mysql_query($sSQL,$con);

Ich weiß echt nicht mehr weiter.
 
So .. dieser CODE funktioniert jetzt bei mir auf dem Server:

Es wird ein Bild in den Gewünschten Ordner mit gewünschtem Dateinamen kopiert.

PHP:
<form action='' method='post' enctype='multipart/form-data' > 
<p class='form_text'>Bitte Bilddatei/Logo auswählen:</p> 
<input type=file name=upload_file> 
<input type='submit' name='OrgReg' value='absenden'> 
</form> 
<?php 
function random_image_name($sSavePfad, $sFileType){  
    srand((double)microtime()*1000000);   // for older than version 4.2.0 of PHP  
    do{  
        $sNewFilename = md5(uniqid(rand())) .$sFileType;  
    } while( file_exists($sSavePfad.$sNewFilename));  
    return $sNewFilename;  
} 
$Arbeitsablauf = ''; 
$tempname = $_FILES['upload_file']['tmp_name'];    
$name = $_FILES['upload_file']['name'];    
$type = $_FILES['upload_file']['type'];    
$size = $_FILES['upload_file']['size']; 
$error = '';  
$sSavePath = realpath('./').'/flugzeugbildchen'.'/';  
$Arbeitsablauf .= '$_FILES: '.$_FILES.'<br>'; 
print_r($_FILES); 
$Arbeitsablauf .= '$tempname: '.$tempname.'<br>'; 
$Arbeitsablauf .= '$name: '.$name.'<br>'; 
$Arbeitsablauf .= '$type: '.$type.'<br>'; 
$Arbeitsablauf .= '$size: '.$size.'<br>'; 
$Arbeitsablauf .= '$sSavePath: '.$sSavePath.'<br>'; 
if($_FILES){ 
 if($type == "image/gif") {    
     $sFileType = '.gif';  
 } elseif ($type == "image/pjpeg"){  
     $sFileType = '.jpg';  
 }else{  
     $error .= "nur gif und jpeg Dateien dürfen hochgeladen werden.<br>";    
 } 
 $Arbeitsablauf .= '$sFileType: '.$sFileType.'<br>'; 
  
 if(!$sNewImagename = random_image_name($sSavePath, $sFileType)) {    
   $error .= "Fehler! Es hat nicht funktioniert einen neunen Bildnamen zu erstellen.<br>";    
 } 
 $Arbeitsablauf .= '$sNewImagename: '.$sNewImagename.'<br>'; 
  
 if($size > "1048576") {    
     $error .= "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!<br>";    
 }   
  
 if(!$error) {    
     copy($tempname, $sSavePath.$sNewImagename);    
     echo 'Die Datei '.$sNewImagename.' wurde erfolgreich in den Ordner '.$sSavePath.' gespeichert!';    
       
     $sSQL ='INSERT INTO `flugzeugbilder` ( `Name`, `Pfad` ) VALUES ( \''.$sNewImagename.'\' , \''.$sSavePath.'\' )';  
     mysql_query($sSQL,$con); 
      
     $Arbeitsablauf .= '$sSQL: '.$sSQL.'<br>'; 
 }    
 else {    
     echo $error;    
 } 
} 
echo $Arbeitsablauf;  
?>

Wenn du am SQL-Eintrag weiterarbeitest: achte auf die richtigen Namen der Tabelle und der Spalten ... Meine Tabelle heißt `flugzeugbilder`
 

Neue Beiträge

Zurück