"multipart/form-data" und Datei-Endung bei copy
Marco B.
- php
Hi... ich probiere jetzt schon ewig rum und bekommt das Problem nicht gelöst.
Ich übergebe mit einem:
"
<form enctype="multipart/form-data" method="post" action="?go=upload&id=1">
<input type="file" name="bild">
"
eine Grafik per Post an eine Php-Datei und möchte diese mit einem festgelegten Namen Uploaden, aber die Dateiendung beibehalten und den File-namen in einer DB abspeichern:
"
if ($bild!='') {
$explode_bild=explode(".",$bild);
$file=$id.".".$explode_bild[1];
@copy($bild,"images/produkte/$file");
$update=@mysql_query("UPDATE produkte SET
bild='".$file."'
WHERE id='".$id."'");
}
"
aber meine Dateiendung bleibt immer Leer.
Hat jemand eine Lösung für mich?
Mfg
Marco
Moin Marco,
@copy($bild,"images/produkte/$file");
copy liefert das gewünschte Ergebnis?
regds
Mike©
Moin Marco,
@copy($bild,"images/produkte/$file");
copy liefert das gewünschte Ergebnis?
regds
Mike©
Ja, aber die Datei wird ohne Dateiendung hochgeladen...
dann wird aus einer irgendetwas.gif plötzlich nurnoch eine "1."
Moin Marco,
Ja, aber die Datei wird ohne Dateiendung hochgeladen...
dann wird aus einer irgendetwas.gif plötzlich nurnoch eine "1."
hmm, also nein. Copy liefert nicht das gewünschte Ergebnis. Es wird zwar kopiert, aber nicht mit dem Ergbnis (Dateinamen) wie Du es möchtest. Daher lautet die Antwort auf meine Frage: Nein.
Bitte lasse Dir in Deinem Script alle Variablen ausgeben:
echo $bild .'<br>';
$explode_bild=explode(".",$bild);
echo $explode_bild[0] .'<br>';
echo $explode_bild[1 .'<br>';
$file=$id.".".$explode_bild[1];
echo $id . '<br>';
echo $file . '<br>';
ich bin gespannt ;-)
regds
Mike©
Moin nochmal,
echo $explode_bild[1 .'<br>';
Tippfehler, die Ziel oben muss natürlich so aussehen:
echo $explode_bild[1] .'<br>';
regds
Mike©
Moin!
möchte diese mit einem festgelegten Namen Uploaden, aber die Dateiendung beibehalten und den File-namen in einer DB abspeichern:
PHP hat tolle Stringfunktionen, um Dateinamen auseinanderzunehmen:
http://www.php.net/basename
http://www.php.net/dirname
http://www.php.net/pathinfo
http://www.php.net/realpath
und falls mal URLs das Problem sind:
http://www.php.net/parse_url
Nutze die Funktionen, sie sind besser abgestimmt auf die Behandlung von Dateinamen, als dein Code.
- Sven Rautenberg
Hallo Marco
dies ist eine Antwort auf Dein Doppelposting:
[code lang=php]
if ( $_POST["title_neu"] != ''
&& $_POST["title2_neu"] != ''
&& $_POST["text_neu"] != '' ) {
$insert=@mysql_query("INSERT INTO loesungen VALUES (
'',
'".$title_neu."',
'".$title2_neu."',
'".$text_neu."',
''
)");
Es ist erstens eine gute Idee, die Abfrage in einer eigenen Variablen zusammenzubauen, die man zu Debug-Zwecken ausgeben lassen kann. Das erspart manch' unliebsame Überraschung.
Zweitens solltest Du die Eingaben validieren und vor dem Schreiben in die Datenbank mit mysql_real_escape_string() behandeln. Ggf. musst Du vorher die Einstellung magic_quotes_gpc überprüfen.
Drittens solltest überprüfen, ob mysql_query eventuell einen Fehler zurückliefert und diesen entsprechend behandeln, anstatt die Fehlermeldung einfach zu unterdrücken.
if ($bild_neu!='') {
$id=mysql_insert_id();
$dateiname=$_FILES['bild_neu']['name'];
$dateiendung=substr($dateiname,-3);
Du hast Svens Tipp nicht befolgt :-(
$file=$id.".".$dateiendung;
@copy($bild_neu,"images/loesungen/$file");
Du hast noch mehr Tipps nicht befolgt.
Der Handbuchabschnitt über Dateiupload kann auch nichts schaden, Du solltest hier nicht mit copy() arbeiten, sondern mit move_uploaded_file()
$update_bild=@mysql_query("UPDATE loesungen SET
bild='".$file."'
WHERE id='".$id."'");
s.o.
Freundliche Grüße
Vinzenz
dies ist eine Antwort auf Dein Doppelposting:
Danke für deine Hilfe. Da ich leider mit den bisherigen Antworten mein Problem nicht lösen konnte habe ich nach langen googeln noch eine Lösung gefunden. Aber leider war die Frage von heute bereits wieder ein ganz anderes Problem und ich dachte das dieses Thema niemand mehr beachten würde, da es kaum noch zu sehen ist ;-)
[code lang=php]
if ( $_POST["title_neu"] != ''
&& $_POST["title2_neu"] != ''
&& $_POST["text_neu"] != '' ) {Willst Du hier nicht eher isset() und empty() verwenden?
Danke für den Hinweis. Ich programmiere noch nicht sehr lange und kenne nicht unbedingt die besten Wege um ans Ziel zu kommen ;-)
$insert=@mysql_query("INSERT INTO loesungen VALUES (
'',
'".$title_neu."',
'".$title2_neu."',
'".$text_neu."',
''
)");Es ist erstens eine gute Idee, die Abfrage in einer eigenen Variablen zusammenzubauen, die man zu Debug-Zwecken ausgeben lassen kann. Das erspart manch' unliebsame Überraschung.
Zweitens solltest Du die Eingaben validieren und vor dem Schreiben in die Datenbank mit mysql_real_escape_string() behandeln. Ggf. musst Du vorher die Einstellung magic_quotes_gpc überprüfen.
Drittens solltest überprüfen, ob mysql_query eventuell einen Fehler zurückliefert und diesen entsprechend behandeln, anstatt die Fehlermeldung einfach zu unterdrücken.
Ich werde deine Ratschläge gerne befolgen und mich weiter über diese mir bisher nicht bekannten Funktionen informieren.
if ($bild_neu!='') {
$id=mysql_insert_id();
$dateiname=$_FILES['bild_neu']['name'];
$dateiendung=substr($dateiname,-3);Du hast Svens Tipp nicht befolgt :-(
$file=$id.".".$dateiendung;
@copy($bild_neu,"images/loesungen/$file");Du hast noch mehr Tipps nicht befolgt.
Der Handbuchabschnitt über Dateiupload kann auch nichts schaden, Du solltest hier nicht mit copy() arbeiten, sondern mit move_uploaded_file()
Leider habe ich Svens Tipp auch zu spät gesehen. Dieser hätte mir schon mehr geholfen. Mir war leider nicht bewußt, das ich mit $_FILES['bild_neu']['name'] den Dateinamen bekomme. Dies war eigentlich schon das ganze Problem.
Ich entschuldige mich hier gerne nochmal für die 2. Frage, aber geholfen haben mir die bisherigen Antworten trotzdem nicht. Als Anfänger bin ich schon froh wenn ich Tipps bekomme wie ich die Abfragen und den Quellcode optimieren kann.
Aber hier geht es mir noch um die Frage, warum der mysql_insert die vorhandenen $POST_['titel_neu'], $POST_['titel_neu2'] und $POST_['titel_text'] nicht in die Datenbank schreibt, wenn ich eine File per Formular mit übergebe.
Der insert wird ja ausgeführt und danach auch der Dateiname in die letze Spalte geschrieben, aber trotzdem werden die vorhandenen Werte als Leere Spalten eingetragen. Und Mysql gibt leider auch keinen Fehler zurück.
Mfg
Marco
Hallo Marco,
zunächstmal möchte ich Dich hier willkommen heißen. Du wirst merken, dass Du hier Hilfe bekommen kannst, und je mehr Du Dich selbst einbringst, um so mehr Hilfe erwarten kannst. Vielleicht bist Du auch selbst in der Lage anderen Hilfe zu geben.
Aber leider war die Frage von heute bereits wieder ein ganz anderes Problem und ich dachte das dieses Thema niemand mehr beachten würde, da es kaum noch zu sehen ist ;-)
Das ist ein tiefliegender Aberglaube bei denjenigen, die neu hier im Forum sind. Erstens war Dein Thread noch nicht besonders weit nach unten gerutscht und zweitens lesen manche das Forum von "unten" nach "oben", andere lassen sich das Forum genau andersherum anzeigen ... Wenn Du Eigeninitiative zeigst und auf Tipps eingehst, hast Du sehr gute Chancen zielführende und hilfreiche Hinweise von kompetenten Teilnehmern zu bekommen, selbst wenn oder gerade wenn Dein Thread bereits zu einem der ältesten Threads im Forum geworden ist.
Dein jetztiges Problem hängt mit Deinem vorigen zusammen; Dein alter Quellcode ist Bestandteil des von Dir jetzt geposteten Codes. Deswegen solltest Du im alten Thread bleiben, über die Voransicht hast Du die Möglichkeit, das Thema zu ändern, weil Du nun einen neuen Aspekt in den Thread einbringst. Das ist hier gern gesehen, weil Du somit nicht zweimal ähnliche Tipps zum gleichen Problem bekommen wirst.
Danke für den Hinweis. Ich programmiere noch nicht sehr lange und kenne nicht unbedingt die besten Wege um ans Ziel zu kommen ;-)
Das wird sich mit der Zeit ändern. Jeder hat einmal angefangen.
$insert=@mysql_query("INSERT INTO loesungen VALUES (
'',
'".$title_neu."',
'".$title2_neu."',
'".$text_neu."',
''
)");Es ist erstens eine gute Idee, die Abfrage in einer eigenen Variablen zusammenzubauen, die man zu Debug-Zwecken ausgeben lassen kann. Das erspart manch' unliebsame Überraschung.
Hier solltest Du ansetzen. D.h. diesen Ratschlag umsetzen, z.B:
$query =
"INSERT INTO loesungen
VALUES (
'',
'" . mysql_real_escape_string($_POST['title_neu']) . "',
'" . mysql_real_escape_string($_POST['title2_neu']) . "',
'" . mysql_real_escape_string($_POST['text_neu']) . "',
'')";
// Debug-Ausgabe einfügen
echo $query;
// Abfrage absetzen
$insert = mysql_query($query);
Ich entschuldige mich hier gerne nochmal für die 2. Frage, aber geholfen haben mir die bisherigen Antworten trotzdem nicht.
Das ist schon ok, einfach beim nächsten Mal besser machen :-)
Freundliche Grüße
Vinzenz
Hier solltest Du ansetzen. D.h. diesen Ratschlag umsetzen, z.B:
$query =
"INSERT INTO loesungen
VALUES (
'',
'" . mysql_real_escape_string($_POST['title_neu']) . "',
'" . mysql_real_escape_string($_POST['title2_neu']) . "',
'" . mysql_real_escape_string($_POST['text_neu']) . "',
'')";
// Debug-Ausgabe einfügen
echo $query;// Abfrage absetzen
$insert = mysql_query($query);
>
Danke für deine ausführliche Hilfe Vinzenz
ich werde mir die Tage mal die Zeit nehmen genauer auf die Vorschläge einzugehen. Bisher programmiere ich mit den bisher bekannten befehlen, da ich bisher auch immer so ans Ziel gekommen bin ;-) Natürlich habe ich das Ziel die Codes zu optimieren und bin dehalb besonders Froh hier gleich solche Hinweise zu bekommen.
Nun habe ich auch schon eine sehr simple Lösung für mein Problem gefunden. Ich habe leider für den mysql\_insert\_id() die Variable $id doppelt vergeben. Nun hat meine Fehlersuche nach 2 Tagen ein Ende gefunden :-)
Nochmals vielen Dank für die Hilfe!
Mfg
Marco