Zum Inhalt springen

Bild in DB speichern klappt nicht in PHP, Hilfe!


Empfohlene Beiträge

Hallo,

folgendes Problem:

Ich versuche eine Datei, die ich ausgewählt habe ich die DB zu speichern.

Leider bekomme ich immer wieder die PHP-Fehlermeldung:

Warning: copy() [function.copy]: Filename cannot be empty in /mnt/web5/30/01/519 ..

Folgender code bzw. code-teile:

html:

<form action="xyz.php" method="post">

<input type="hidden" name="user_file">

<input name="userfile" type="file" size="5">

</form>

php:

$filename = $_FILES['userfile']['tmp_name'];

$filesize = $_FILES['userfile']['size'];

$path = "/images";

$myFilename = $_REQUEST["userfile"];

if (!file_exists($path.$myFilename))

{

if (!copy($filename,$path.$myFilename))

{

echo "Konnte nicht speichern.";

}

... usw.

in der Variable $filename steht anscheinend nicht drin, woran kann dies liegen, oder stehe ich grad auf dem Schlauch und das Problem ist ziemlich offensichtlich?? Bitte helft mir!

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

als erstes rate ich dir ab $_REQUEST zu nutzen, nutze lieber $_POST das ist die sicherere Variante. Nunja auch deine Pfadangabe ist so nicht richtig.

Deine Variable $myFilename ist natürlich auch Quatsch, da musst du mit $_FILES['file']['name']; arbeiten und nicht mit $_REQUEST.

Nutze auch nicht copy sondern move_uploaded_file dazu.

Hier mal ein verbesserter Code.


$file_tmp = $_FILES['file']['tmp_name'];
$file = $_FILES['file']['name'];
$file_size = $_FILES['file']['size'];
$path = "http://forum.fachinformatiker.de/images/";

//hier kommt der Upload
move_uploaded_file($file_tmp,$path.$file);

//so sieht es aus wenn nicht alle in extra Variablen steht
move_uploaded_file($_FILES['file']['tmp_name'],"http://forum.fachinformatiker.de/images/".$_FILES['file']['name']);
[/PHP]

Wenn du das nächste mal PHP Code postest nutze bitte die PHP Tags aus dem Editor hier, das macht das lesen des Codes deutlich einfacher und das Syntaxhighlighting verrät oft schon Fehler im Code.

Hoffe das hilft dir etwas weiter Gruß lit-web

[EDIT]

Vor allem was hat das mit Bild in DB speichern zu tun? Was man sowieso nicht machen sollte. Du hast ein Problem ein Bild richtig hochzuladen und in ein Verzeichnis zu kopieren bzw. upzuloaden. In die DB speicherst du nur den Namen des Bildes und im höchstfall noch den Pfad zum Verzeichnis.

Bearbeitet von lit-web
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also jetzt bekomme ich die Fehlermeldung:

.. failed to open stream: HTTP wrapper does not support writeable connections in ..

wenn ich es richtig deute, dann sagt er mir, dass ich keine Verbindung zum schreiben aufbauen kann, aber ich versuche ja nichts zu schreiben, ich versuche doch lediglich einen upload in das verzeichnis zu machen.

hier mein code


<body bgcolor="yellow" text="#000000" link="#ffffff" vlink="#ffffff" alink="#ffffff">
<form enctype="multipart/form-data" action="<? $_SERVER['PHP_SELF'] ?>" method="post">
<input type="file" name="file">
<input type="submit" name="senden" value="Upload">
</form>

<?
$file_tmp = $_FILES['file']['tmp_name'];
$file = $_FILES['file']['name'];
$file_size = $_FILES['file']['size'];
$path = "http://forum.fachinformatiker.de/images/";

//hier kommt der Upload
move_uploaded_file($file_tmp,$path.$file);

//so sieht es aus wenn nicht alle in extra Variablen steht
//move_uploaded_file($_FILES['file']['tmp_name'],"http: //forum.fachinformatiker.de/images/".$_FILES['file']['name']);
?>

[/PHP]

was mache ich falsch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

also hast du mal die chmod des Verzeichnisses gecheckt? Stelle sie notfalls auf 777.

Ein Tipp verwende niemals ungesichertes $_SERVER['PHP_SELF'] das ist XSS anfällig. Wenn du das Formular sowieso an sich selber schicken willst dann lass das action Atribut doch einfach leer oder aber verwende $_SERVER['SCRIPT_NAME'].

Hast du mal deine Fehlermeldung in Google eingegeben und gesucht? Weil failed to open stream gibt eigentlich ein Pfadproblem wieder, das heist dein Pfad zum Zielverzeichnis stimmt nicht.

Überprüfe das mal bitte.

Gruß lit-web

Link zu diesem Kommentar
Auf anderen Seiten teilen

du solltest den pfad beim upload anpassen und nicht stur "http://..." reinschreiben.

das kann nicht funktionieren, siehe fehlermeldung "http wrapper does not support writable.."

heißt, move_uploaded_file kann dateien nicht per http hochladen, und genau das willst du da machen.

$path sollte ein verzeichnis sein in das der webserver schreiben darf, relative oder absolute pfadangabe

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

danke für den Tipp, also mit der relativen Pfadangabe klappt das Aufspielen auf den Webserver.

Danke

Nächste Frage:

Wenn ich z.B. in einem Formular die benötigten Daten ausgefüllt habe und schicke das Formular weg, möchte ich dass im Anschluß daran eine z.B. Danke-Seite(HTML-Seite) angezeigt wird, wie soll ich das anstellen?

Danke schon mal im Voraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da gibt es zwei Alternativen. Da kommt es drauf an wie du dein Formular verarbeitest.

Die eine du legst dir eine seperate danke.php an und leitest via header('Location: dein_absoluter_pfad/danke.php'); bei Fehlerfreien Ablauf weiter, oder aber du machst es mit einem meta refresh. Dann kannst du das auf der selben Seite machen.

Beispiel header('Location:'); dafür benötigst du eine seperate danke.php


if(isset($_POST['sende_button']))
{
$error = array();

//dein prüfungsroutinen

if(!$error)
{
header('Location: http://www.domain.de/danke.php');
}
}
[/PHP]

Beispiel mit einem meta refresh: hier bleibst auf der selben Seite und brauchst keine seperate Datei.

[PHP]
if(isset($_POST['sende_button']))
{
$error = array();

//dein prüfungsroutinen

if(!$error)
{
echo 'Danke für Ihre Email!';

echo '<meta http-equiv="refresh" content="5; url=page_cat_post.php">';
}
}

Mehr ist es vom ganzen her nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...