Bild auf dem Server. Jetzt noch den Pfad speichern?

reddragon90

Erfahrenes Mitglied
Hallo,

mein Bilderupload und alles läuft jetzt perfekt. Aber wie bekomme ich den Pfad des Bildes der sich auf dem Server befindet, in die MySQL Db?

Sprich: Das Bild ist jetzt auf dem Server, aber irgendwie muss dieser ja auch in die Datenbank, um wieder ausgelesen zu werden. Wie gesagt, das Auslesen ist auch kein Problem, nur der Pfad, dass dieser in die Datenbank kommen soll.
 
Hi,

der Pfad zum Verzeichnis ist Dir ja bekannt.
Oder lädst Du die etwa nur ins /tmp Verzeichnis des Servers?

Du solltest Die Dateien mittels der copy() Funktion aus dem /tmp Verzeichnis in das gewünschte Verzeichnis kopieren.

Serverseitig sind die Eigenschaften der hochgeladenen Datei dann in der Variablen $_FILE verfügbar (name, typ etc). Einfach mal nen print_r($_FILE) ausgeben.

Am besten Bild noch umbenennen (Eindeutigen Namen mithilfe des time-Stamps) und diesen Namen in die DB. Es reicht nur den Bildnamen in der DB zu speichern (denn der Pfad sollte Dir ja "eigentlich" bekannt sein). Außer Du willst die Bilder in unterschiedliche Verzeichnise speichern.

Gruß tyg3r
 
Nein ich speichere die Bilder in den Ordner in der sich auch mein Upload Script etc. befindet, dies mache ich mit der copy() funktion.

Wie mache ich es, dass das Bild das ich upgeloadet habe, die ID als Namen bekommt?

Und wie stelle ich es an, dass ich den Namen nicht manuell in die DB schreiben muss. Sondern das Bild, dass auf dem Server liegt, der Dateiname dort gespeichert wird. Ich habe pinrt_r($files) ausgeben lassen und bekomme nur ein Array aber was nützt mir das?

Nach time-Stamps habe ich gegoogelt, aber nicht was mir nützt gefunden.

Bitte entschuldigt diese newbie fragen :(
 
So kannst du einen namen generieren:

diese Funktion gut in den Ordner nach, wo das Bild gespeichert werden soll. Wenn zufälliger Weise der zufällige Dateiname der gerade erstellt wurde schon vorhanden ist, dann wird so lange ein neuer Dateiname erstellt, bis er einzigartig ist. Was noch wichtig ist bei dieser Funktion, dass du die richtigr Dateiendung anhängst. Wie du siehst erstellt diese Funktion eine *.jpg-Datei

PHP:
function random_image_name($sSavePfad){
srand((double)microtime()*1000000); // for older than version 4.2.0 of PHP
do{
$sNewFilename = md5(uniqid(rand())) .".jpg";
} while( file_exists($sSavePfad.$sNewFilename));
return $sNewFilename;
}

Du solltest eine $sSavePfad Datei anlegen, damit du den Pfad im Script schnell ändern kannst wenn du die Bilder mal woanders brauchst als in deinem uploadverzeichnis von deinem Script.

wo eine Datei auf dem Server liegt, kannst du durch diesen CODE erfahren:

PHP:
return realpath(dirname($oFile));

Guck dir am besten noch einmal die Dokumentationen zu realpath() und dirname() an.

Die Bilddaten in die Datenbank zu schreiben ist ein anderes Thema!
Eine Datenbank hast du schon angelegt? Und funktioniert auch schon die Verbindung usw? .. wenn nicht, dann suche bitte nach Tutorials die dir erklären wie man das macht.

Wenn du die Datenbank hast, und die Tabelle, und auch die verbindung klappt, dann must du einen SQL-Befehl an die Datenbank schicken

der ist relativ einfach, auch wenn es kompliziert aussieht:

$SQL = 'INSERT INTO `name der Tabelle` (
`tabellendatensatz_A` ,
`tabellendatensatz_B` ,
`tabellendatensatz_C` )
VALUES (
\''.$Variable_mit_den_Daten_zu_tabellendatensatz_A.'\' ,
\''.$Variable_mit_den_Daten_zu_tabellendatensatz_B.'\' ,
\''.$Variable_mit_den_Daten_zu_tabellendatensatz_C.'\' )' ;

wichtig sind die richtigen Hochkomma! Manchmal spinnt MySQL rum, wenn man sie wegläßt oder falsche setzt.

mit mysql_query() und der Datenbankverbindung, wird dann der SQL-Befehl an deine Datenbank geschickt.

Ich hoffe das konnte dir helfen.

Es wäre sinnvoll dich zuerst damit zu beschäftigen, wie man Daten allgemein in eine Datenbank einträgt, bevor du dich mit dem Bildupload beschäftigst
 
Zuletzt bearbeitet:
In dem Array steht:

PHP:
Array ( [file] => Array ( [name] => PH-BDE12.jpg [type] => image/jpeg [tmp_name] => C:\xampp\tmp\php142.tmp [error] => 0 [size] => 662264 ) )
 
Hast du Dein Problem schon gelöst?

Wäre schön wenn du mal deinen CODE zeigst, dann kann man vielleicht auch besser helfen.
 
Ich bin immer noch dabei.

Also das ist das Formular:

HTML:
<form enctype="multipart/form-data" action="upload.php" method="post"> 
<p><input type="file" name="file"></p>
<input type="hidden" name="ID" />
Fotograf: <br />
<input type="text" name="Name" /><br /><br />
<input type="submit" value="hochladen"> 
</form>

upload.php

PHP:
<?php
$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name']; 
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 

if($type != "image/gif" && $type != "image/pjpeg") { 
  //  $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden."; 
} 
if($size > "1048576") { 
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!"; 
}

if(empty($err)) { 
    copy("$tempname", "$name"); 
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
echo "<br><br>";
print_r($_FILES)
?>

Mit diesem Code bekomme ich das Foto auf den Server. Aber wie bekomme ich den Pfad jetzt in die DB. Und den Namen des Fotografen?

Ich habe es so versucht, aber das geht nicht:

PHP:
include 'config.php';

$con = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("galerie", $con);


$sql = "INSERT INTO 'flugzeugbilder' (ID, Foto, Name)
VALUES
('$_POST['ID']','$_POST['Foto']','$_POST['Name']')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)

Hoffe das jemand weiß was da falsch ist.
 
ich glaube dein SQL ist nicht richtig:

Benutzt du PHPmyadmin? wenn ja, dann lass dir ma dein SQL ausgeben

PHP:
$sql = "INSERT INTO 'flugzeugbilder' (ID, Foto, Name) 
VALUES 
('$_POST['ID']','$_POST['Foto']','$_POST['Name']')";
 
echo '$sql: '.$sql.'<br>';

und trage diesen in PHPmyadmin unter SQL ein ... enn dort eine Fehlermeldung kommt, dann stimmt schonmal das nicht.

ich guck mir jetzt den Rest von deinem Code an ...

achso ... allgemein finde ich es besser, "klar" zu arbeiten und den String (nichts anderes ist dieser SQL-Befehl) nicht in "Gänsefüßchen" (Anführungszeichen) zu setzen, sondern in Hochkamma (ich meine das Zeichen was entsteht, wenn man SHIFT+# drückt). Das hat den Grund, dass PHP sonst den ganzen String verwurstet und interpretiert. Ich denke es ist sauberer den String statisch zu lassen und die Variabeln Teile klar abzugrenzen, und damit kenntlich zu machen.
 
Kannst du das mal probieren? .. Du musst aber nich die Daten für die DB-Verbindung eintragen.

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;
}

$tempname = $_FILES['file']['tmp_name'];  
$name = $_FILES['file']['name'];  
$type = $_FILES['file']['type'];  
$size = $_FILES['file']['size']; 
$error = '';
$sSavePath = realpath(dirname(__FILE__).'/../flugzeugbildchen').'/';

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

if(!$sNewImagename = random_image_name($sSavePath, $sFileType)) {  
  $error .= "Fehler! Es hat nicht funktioniert einen neunen Bildnamen zu erstellen.<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);
}  
else {  
    echo $error;  
}



***********************
Ich muste noch was ändern, damit er gif und jpg unterscheiden kann.
 
Zuletzt bearbeitet:
Zurück