Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Bild in DB speichern klappt nicht in PHP, Hilfe!

Empfohlene Antworten

Veröffentlicht

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

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

Hallo,

erstmal herzlichen Dank für deine Mühe, werde dies jetzt testen und danach berichten. Man findet nicht überall so hilfreiche und freundliche Programmierer wie hier bei Fachinformatiker. Danke nochmals!:D:D

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?

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

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

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.