# Bilderpfad in MySQL speichern



## cry_baby (19. März 2008)

Hallo,

ich bastel nun schon ziemlich lange an meinem Script rum, habe kaum das Richtige gefunden, schon viel gegoogelt.

Was ich vorhabe:
Ich habe eine Datenbank, in der verschiedenste Einträge gemacht werden. Funktioniert auch alles einwandfrei. Wenn der Eintrag nun editiert wird, soll es die Möglichkeit geben, zu jedem Eintrag 1-4 Bilder zu speichern. Die Bilder werden mit meinem Code direkt auf den Server geladen. Der Pfad zu den Bildern soll in der Datenbank abgelegt werden. Die ID muss übergeben werden, damit auch der richtige Eintrag in der Datenbank aktualisiert wird.

Mein Problem:
Ich habe keine Ahnung, wie ich den Code ändern muss, damit der richtige Pfad an der richtigen Stelle in der Datenbank landet.

Bitte tut mir den Gefallen, und gebt mir nicht den Tip zu googlen. Das habe ich schon mehrere TAGE hinter mir... Danke 


```
<?php 
if (isset( $_POST['submitbutton'] )) 
{ 
    $Erlaubte_Dateiendungen = array( "jpg", "gif", "png" ); 
    $Dateiname_bereinigen = array( 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', ' ' => '_' ); 
    if ($_FILES['datei']['size'] > 0) 
    { 
        $UploadDateiEndung = array_pop( explode( ".", strtolower( $_FILES['datei']['name'] ) ) ); 
        if (!in_array( $UploadDateiEndung, $Erlaubte_Dateiendungen )) 
        { 
            die( "Die angeh&auml;ngte Datei hat eine nicht erlaubte Dateiendung!" ); 
        } 
        $DateiNameNeu = strtr( strtolower( $_FILES['datei']['name'] ), $Dateiname_bereinigen ); 
        $umask_alt = umask( 0 ); 
		if (@move_uploaded_file( $_FILES['datei']['tmp_name'], "bilder/" .$DateiNameNeu ))  

        { 
            @chmod( $DateiNameNeu, 0755 ); 
            umask( $umask_alt ); 
        } 
        else 
        { 
            umask( $umask_alt ); 
        } 
    } 
} 
?> 

<form name="DateiUpload" id="DateiUpload" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data"> 
    <input type="file" name="datei" id="datei"><br> 
    <input type="submit" name="submitbutton" id="submitbutton" value="Datei hochladen"> 
</form>
```


----------



## Radhad (19. März 2008)

du schiebst die Bilder nach "bilder/" und dem entsprechenden Dateinamen - den Pfad einfach bei dem Beitrag speichern ... Wo ist das Problem?


----------



## cry_baby (19. März 2008)

Genau das ist das Problem, was meinst du warum ich hier einen Beitrag schreibe? 

weil ich NICHT WEISS WIE ES FUNKTIONIERT!

Theoretisch ist schon klar, an der Umsetzung scheiterts.

Wenn du weisst wie es funktioniert, dann gib mir bitte ne detailiertere Antwort, oder lass bitte andere antworten. Danke.


----------



## cry_baby (19. März 2008)

Mir würde es schon reichen, wenn ich wüsste, wie ich nach oder während dem Speichern auf dem Server die Url auslesen und anzeigen könnte. Damit kann ich dann weiterarbeiten.

Vielleicht kann man das mit meinem Script machen?


----------



## shutdown (19. März 2008)

Und wo ist da das Problem?

Du hast doch schon alles was du brauchst - wie sollte die Datei denn auch sonst gespeichert werden?


```
"bilder/" .$DateiNameNeu
```


----------



## cry_baby (19. März 2008)

Das passt schon alles, das Bild wird ohne Probleme an dem Ort abgelegt. 

Das Bild, das hochgeladen wurde, muss allerdings mit dem Eintrag verknüpft werden, der vorher zum editieren angeklickt wurde. 

Dh. ich möchte die Url von dem jeweiligen Bild in der MySQL Datenbank unter dem vorher ausgewählten Eintrag abgelegt werden. Und genau das fehlt mir.


----------



## merzi86 (19. März 2008)

Da empfehle ich, belese dich zum Thema Sql-Befehle.
Hier dürften die Befehle INSER INTO bzw. UPDATE helfen, abhängig davon ob der Datensatz wo das Bild hinzugefügt werden soll bereits existiert.


----------



## cry_baby (19. März 2008)

Das Update-Script habe ich schon, funktioniert auch, nur das verknüpfen an das Bild weiss ich nicht, wie es geht...


```
<?php
$host = "xxx";
$user = "xxx";
$password = "xxx";
$dbname = "xxx";
$tabelle ="xxx";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = 	"UPDATE $tabelle SET Nummer='$Nummer', Tag='$Tag', 
				Monat='$Monat', Wochentag='$Wochentag', Stunde='$Stunde', 
				Minute='$Minute', Ereignis='$Ereignis', Ort='$Ort', 
				Einsatzart='$Einsatzart', Select1='$Select1', 
				Select2='$Select2', Bericht='$Bericht', 
				Statistik='$Statistik' WHERE id = '$id' ";
if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) { 
print ("<br>Einsatz 2006 editiert...<br><br>"); 
} else { 
print ("Es traten Probleme auf...<br/>"); 
echo mysql_error(); 
}  
mysql_close ($dbverbindung);
?>
```


----------



## Kipperlenny (19. März 2008)

ich kapier das alles nicht....

Wo willst du die URL zu dem Bild speichern? In der $dbanfrage steht dazu nichts oder?


----------



## Loomis (19. März 2008)

So: ( Allerdings verstehe ich da auch nicht wo das Problem nun genau liegt :/ )

```
$bildpfad = 'bilder/' .$DateiNameNeu;

$host = "xxx";
$user = "xxx";
$password = "xxx";
$dbname = "xxx";
$tabelle ="xxx";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "UPDATE $tabelle SET bild='$bildpfad' WHERE id = '$id' ";
if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) { 
print ("<br>Einsatz 2006 editiert...<br><br>"); 
} else { 
print ("Es traten Probleme auf...<br/>"); 
echo mysql_error(); 
}  
mysql_close ($dbverbindung);
```


----------



## Kipperlenny (19. März 2008)

Bin ich blind? Ich sehe "bild" nirgendwo (welche du jetzt in deinem Update genannt hast).


----------



## Loomis (19. März 2008)

Ganz einfach, da er das nirgends schreibt gehe ich davon aus, dass es eine extra Tabelle für die Bilder gibt.


----------



## cry_baby (19. März 2008)

Ok, ziemlich verwirrend geb ich zu. Also nochmal im Detail:

1. dem User werden alle Einträge angezeigt die in der Datenbank vorhanden sind.
2. User klickt auf Bearbeiten
3. Formular erscheint, in dem das vorhandene Bild ersetzt werden kann
4. Bild wird ausgewählt und mit meinem oben stehenden Script auf den Server gespeichert
5. Bildpfad (z.b. http://www.test.de/bilder/hallo.jpg) soll in der Datenbank aktualisiert werden

Nr. 5 ist das was ich nicht hinbekomme, nicht mal ansatzweise.

Das Update-Script, das ich grad gepostet hab, war nur ein Beispiel, das benutze ich an anderen Stellen auf meiner Seite. Ich habe es noch nicht umgeschrieben für speziell diesen Fall.

edit: Ihr ward schneller


----------



## Kipperlenny (19. März 2008)

Aber Loomes hat dir doch jetzt schon die Lösung gegeben oder nicht?


----------



## Loomis (19. März 2008)

Also einfach ein Update... ich kann da kein "Problem" erkennen 


```
$dbanfrage = "UPDATE $tabelle SET bild='$bildpfad' WHERE id = '$id' ";
```


----------



## shutdown (19. März 2008)

> Dh. ich möchte die Url von dem jeweiligen Bild in der MySQL Datenbank unter dem vorher ausgewählten Eintrag abgelegt werden. Und genau das fehlt mir.



Nein, dir fehlt gar nichts, da du schon alles hast.

Was hindert dich denn daran, den Pfad, den du dir zum Speichern deiner Datei zusammenbaust, auch einfach in die Datenbank zu schreiben? ?


----------



## cry_baby (19. März 2008)

@Kipperlenny:
Ihr ward nur schneller als ich

@Loomes:
Genau das war das Problem, so blöd es vielleicht klingt.

Hab das mal eingebaut, als Ausgabe kommt jetzt: Bild hochgeladen... Einsatz 2006 editiert..

Klingt ja schon mal super, allerdings verändert sich am Datenbankeintrag nichts. 

Hier trotzdem nochmal das komplette Script.


```
<?php 
if (isset( $_POST['submitbutton'] )) 
{ 
    $Erlaubte_Dateiendungen = array( "jpg", "gif", "png" ); 
    $Dateiname_bereinigen = array( 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', ' ' => '_' ); 
    if ($_FILES['datei']['size'] > 0) 
    { 
        $UploadDateiEndung = array_pop( explode( ".", strtolower( $_FILES['datei']['name'] ) ) ); 
        if (!in_array( $UploadDateiEndung, $Erlaubte_Dateiendungen )) 
        { 
            die( "Die angeh&auml;ngte Datei hat eine nicht erlaubte Dateiendung!" ); 
        } 
        $DateiNameNeu = strtr( strtolower( $_FILES['datei']['name'] ), $Dateiname_bereinigen ); 
        $umask_alt = umask( 0 ); 
		if (@move_uploaded_file( $_FILES['datei']['tmp_name'], "bilder/" .$DateiNameNeu ))  

        { 
            @chmod( $DateiNameNeu, 0755 ); 
            umask( $umask_alt ); 
			echo "Bild hochgeladen";
        } 
        else 
        { 
            umask( $umask_alt ); 
        } 
    } 
} 
?> 
<?php
$bildpfad = 'www.xxx.de/page/verein/bilder/' .$DateiNameNeu; 

$host = "xxx"; 
$user = "xxx"; 
$password = "xxx"; 
$dbname = "xxx"; 
$tabelle ="xxx"; 
$dbverbindung = mysql_connect ($host, $user, $password); 
$dbanfrage = "UPDATE $tabelle SET Bild1='$bildpfad' WHERE id = '$id' "; 
if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {  
print ("<br>Einsatz 2006 editiert...<br><br>");  
} else {  
print ("Es traten Probleme auf...<br/>");  
echo mysql_error();  
}   
mysql_close ($dbverbindung);          
?>
```


----------



## cry_baby (19. März 2008)

Ich muss erstmal weg, vielen Dank schon mal für eure Hilfe, ist mir echt viel Wert


----------



## Kipperlenny (19. März 2008)

übergibst du die ID irgendwie mit beim Hochladen der Bilder?

Wenn nicht musst du das über die URL oder ein hidden input machen. Weil sonst weiß er ja beim "UPDATE" nicht welche $id du meinst.


----------



## cry_baby (20. März 2008)

Die ID wird über das vorherige Formular übergeben, allerdings denke ich, das ich hier irgendwas falsch mache:


```
<form name="DateiUpload" id="DateiUpload" method="post" action="vereinupdatebild1.php?id=ausgabe[$id]" target="_self" enctype="multipart/form-data"> 
    <input type="file" name="datei" id="datei"><br> 
    <input type="submit" name="submitbutton" id="submitbutton" value="Datei hochladen"> 
</form>
```


----------



## Loomis (20. März 2008)

So in etwas könnte man das lösen.


```
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
```

Dann kannst du mit $_POST['id'] auf deine ID zugreifen.

Gruß


----------



## cry_baby (20. März 2008)

Jetzt funktioniert alles, vielen Dank für eure Hilfe!!

Ich habe es jetzt so gelöst:


```
<?php
$host = "xxx";
$user = "xxx";
$password = "xxx";
$dbname = "xxx";
$tabelle ="xxx";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "SELECT * from $tabelle WHERE id = '$id' ";
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);
while ($ausgabe = mysql_fetch_array ($result))
{
echo "	<form action=vereinupdatebild1.php?id=".$ausgabe['id']." target=_self method=post enctype=multipart/form-data>
		<input type=file name=datei id=datei><br> 
		<input type=submit name=submitbutton id=submitbutton value=Datei hochladen> </form>";
}
mysql_close ($dbverbindung)
?>
```


----------



## cry_baby (20. März 2008)

Nachdem ich nun alles umgebaut habe, funktioniert alles super. Allerdings habe ich noch ein Problem. Wenn ein Bild auf dem Server unter dem Dateinamen bereits besteht, wird es einfach überschrieben. Das darf aber auf gar keinen Fall passieren. Ich muss hier eine Abfrage einbauen, die überprüft, ob die Datei schon vorhanden ist, und wenn ja, dann muss eine Meldung ausgegeben werden, dass die Datei umbenannt werden muss, weil sie nicht überschrieben werden darf.

Geht das? Wie und wo muss ich das in meinem Script einbauen?


```
<?php 
if (isset( $_POST['submitbutton'] )) 
{ 
    $Erlaubte_Dateiendungen = array( "jpg", "gif", "png" ); 
    $Dateiname_bereinigen = array( 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', ' ' => '_' ); 
    if ($_FILES['datei']['size'] > 0) 
    { 
        $UploadDateiEndung = array_pop( explode( ".", strtolower( $_FILES['datei']['name'] ) ) ); 
        if (!in_array( $UploadDateiEndung, $Erlaubte_Dateiendungen )) 
        { 
            die( "Die angeh&auml;ngte Datei hat eine nicht erlaubte Dateiendung!" ); 
        } 
        $DateiNameNeu = strtr( strtolower( $_FILES['datei']['name'] ), $Dateiname_bereinigen ); 
        $umask_alt = umask( 0 ); 
		if (@move_uploaded_file( $_FILES['datei']['tmp_name'], "bilder/" .$DateiNameNeu ))  

        { 
            @chmod( $DateiNameNeu, 0755 ); 
            umask( $umask_alt ); 
        } 
        else 
        { 
            umask( $umask_alt ); 
        } 
    } 
} 
?> 
<?php
$bildpfad = xxx' .$DateiNameNeu; 

$host = "xxx"; 
$user = "xxx"; 
$password = "xxx"; 
$dbname = "xxx"; 
$tabelle ="xxx"; 
$dbverbindung = mysql_connect ($host, $user, $password); 
$dbanfrage = "UPDATE $tabelle SET datei2='$bildpfad' WHERE id = '$id' "; 
if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {  
print ("<br>neues Bild wurde hochgeladen<br><br>");  
} else {  
print ("Es traten Probleme auf...<br/>");  
echo mysql_error();  
}   
mysql_close ($dbverbindung);          
?>
```


----------



## Loomis (20. März 2008)

Sowas hier vielleicht


```
if(file_exists($DateiNameNeu)) {
    die 'Die Datei ' .$DateiNameNeu. ' existiert bereits. Bitte benennen Sie die Datei um.';
}
```


----------



## cry_baby (20. März 2008)

äh.. ich will nicht nerven, aber wo bau ich das ein?

und wenn ich das einbaue, dann wird trotzdem der Datenbankeintrag geändert oder?


----------



## shutdown (20. März 2008)

oh mann, stell den Beitrag doch einfach zu Stellenangebote gewerblich - vielleicht schreibt dir ja jemand die Seite.

Logischerweise solltest du das da hinschreiben, wo du den Dateinamen weißt. Und zwar unmittelbar danach. Und nein, wenn du den Dateinamen als erstes überprüfst und dann mit die aussteigst, dann wird auch nichts weiter ausgeführt - es sei denn du hast vorher schon dein update abgesetzt.


----------

