online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Sypro vom 17.01.2020, 00:54 Options

Problem mit einem Upload script.

Hallo,

Also ich habe 2 Dateien:

upload.htm


<form action="index.php?link=upload2" method="post"   enctype="multipart/form-data">
  <p><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
     Bitte Datei auswählen:</font><br>
<input type=file name=file>
  <br>
    <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kategorie: 
    <select name="cat">
      <option>Silvester</option>
      <option>Maibaum</option>
      <option>Sommerfest</option>
      <option>Saufen</option>
      <option>Delirium</option>
    </select>
    </font><br>
    <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Passwort: 
    <input type="text" name="pw">
    </font><br>
    <input type="submit" name="Submit" value="Hochladen">
</form>


Und die dazugehörige upload2.htm


<?
$cat = $HTTP_POST_VARS["cat"];
$pw = $HTTP_POST_VARS["pw"];
$file_name = $HTTP_POST_VARS["file_name"];
if($pw == "upfing")
{
if($cat == "Sommerfest")
{
$pfad = "pics/sommerfest";  
}
elseif($cat == "Maibaum")
{
$pfad = "pics/maibaum";  
}
elseif($cat == "Silvester")
{
$pfad = "pics/silvester";  
}
elseif($cat == "Saufen")
{
$pfad = "pics/saufen";  
}
elseif($cat == "Delirium")
{
$pfad = "pics/delirium";  
}
if ($file_name == "") {
die("Keine Datei gewählt.");
}
if (file_exists("$pfad/$file_name")) {
die("Datei bereits vorhanden.");
}
$upload = "$file_name";
@copy($file, "$pfad/$upload") or die("Datei wurde nicht hochgeladen.");
echo "Datei hochgeladen";
}
else {
die("Das Passwort ist flasch");
}
?> 


Die ich jeweils in die index.php include.
Ich weiß man könnte das in eine Datei schreiben, aber so ists mir eigentlich lieber , oder macht das einen Unterschied?
Nun gut mein Problem:
Er gibt mir jedesmal die Fehlermeldung "Keine Datei gewählt" obwohl ich eine Datei ausgewählt habe. Natürlich uploaded er dann auch nichts.
Was ist an dem Code falsch?
In Firefox bekomm ich in der Errorkonsole auch nichts angezeigt.
Wär toll wenn sich das mal wer angucken könnte.
Vielen Dank!


Antwort schreiben

Antwort 1 von katy vom 17.01.2020, 07:42 Options

Hallo Sypro,

ich stehe mit PHP zwar noch nicht ganz so auf Du und Du.

Aber ich glaube, dein Problem besteht darin, dass der Inhalt aus Datei-Upload-Felder nicht im üblichen $_POST (du verwendest hier das ältere $HTTP_POST_VARS) sondern in einem Spezial-Array $_FILES abgelegt wird.

Nähere Infos findest du hier bei SelfHTML

Einen schönen Tag wünscht

katy

Antwort 2 von son_quatsch vom 17.01.2020, 08:40 Options

Lies dir mal die PHP-Dokumentation (http://www.php.net/manual/de/features.file-upload.php#features.file...) dazu durch (mit Beispiel).

Des weiteren definierst du in der HTML-Datei den Feldnamen als "file", versuchst aber in PHP auf "file_name" zuzugreifen.

Ändere im HTML die Zeile
<input type=file name=file>

in
<input type="file" name="datei">


und mach als Test in PHP einfach mal folgenden Code:
<?php

print_r($_FILES);

?>

Antwort 3 von Sypro vom 17.01.2020, 09:12 Options

Danke fuer die Antworten erstmal.
Habs jetzt etwas umgeschrieben, aber trotzdem passiert einfach wieder gar nichts.

<?php 
if(isset($_POST['submit']) && $_POST['submit']=="Upload"){
if($_POST['cat'] == "Sommerfest")
{
$uploaddir = "pics/sommerfest";  
}
elseif($_POST['cat'] == "Maibaum")
{
$uploaddir = "pics/maibaum";  
}
elseif($_POST['cat'] == "Silvester")
{
$uploaddir = "pics/silvester";  
}
elseif($_POST['cat'] == "Saufen")
{
$uploaddir = "pics/saufen";  
}
elseif($_POST['cat'] == "Delirium")
{
$uploaddir = "pics/delirium";  
}
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
    print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($_FILES);
}
}else{
?>
<form enctype="multipart/form-data" action="index.php?link=upload" method="post">
  <p>
    Upload: 
  <input name="userfile" type="file">
  <br>
     Kategorie: 
     <select name="cat">
      <option>Silvester</option>
      <option>Maibaum</option>
      <option>Sommerfest</option>
      <option>Saufen</option>
      <option>Delirium</option>
    </select>
  <br>
    <input type="submit" value="Upload">
  </p>
</form>
<? } ?>

Antwort 4 von katy vom 17.01.2020, 11:05 Options

Hallo Sypro,

"passiert gar nichts" ist eine etwas ungenaue Fehlerbeschreibung.
Was enthält denn das Array $_FILES, bzw. $_FILES['userfile'] (hast du das input-Feld auch in userfile umbenannt?) wenn du sie einfach nur ausgibst?

katy

Antwort 5 von Sypro vom 17.01.2020, 16:59 Options

Folgende Fehlermeldung gibt er aus:

Array ( [userfile] => Array ( [name] => playstation2.jpg [type] => image/jpeg [tmp_name] => /srv/www/htdocs/web214/phptmp/phpCxBEpV [error] => 0 [size] => 128437 ) )

Antwort 6 von katy vom 18.01.2020, 11:00 Options

Hallo Sypro,

Fehlermeldung? Das sind eigentlich genau die Daten, die du erwarten kannst, wenn du das Bild "playstation2.jpg" erfolgreich hochlädst ins Temp-Verzeichnis.

Und was macht dein Script danach? Was gibt denn move_uploaded_file zurück? true oder false? Gibt es denn die Pfade pics/delirium usw. so wie angegeben?

katy

Antwort 7 von Sypro vom 18.01.2020, 17:26 Options

Dachte nur deswegen:

phpCxBEpV [[b]error[/b]] => 0 [size] => 128437 ) ) 


Die Pfade gibt es auf meinem Webspace. Muss auch ein Temp Verzeichnis da sein?

Wie sehe ich denn was move_uploaded_file zurück gibt?

Antwort 8 von katy vom 18.01.2020, 18:00 Options

Hallo Sypro:

als Errorcode steht da 0, also kein Fehler.
Das angegebene Temp-Verzeichnis existiert ja, sonst gäbe es sicherlich eine Fehlermeldung an der Stelle.

Bei deinem Script liefert true die Ausgabe
"File is valid, and was successfully uploaded. Here's some more debugging info"
+ Dateiinfos
false ergibt:
"Possible file upload attack! Here's some debugging info:"
+ ebenfalls Dateiinfos

Stimmen denn die Pfade auch im Verhältnis zum PHP-Script?

katy

Antwort 9 von Sypro vom 18.01.2020, 18:08 Options

So ist meine Verzeichnisstruktur:

upload.htm
index.php
(Ordner-pics) -> (Ordner-silvester)
-> (Ordner-delirium)
-> (Ordner-maibaum)

usw.

Sollte doch dann eigentlich stimmen, oder nicht?

So sieht meine upload.htm aus (wird in die index.php included):

<?
if(isset($_POST['submit']) && $_POST['submit']=="Upload"){
if($_POST['cat'] == "Sommerfest")
{
$uploaddir = "pics/sommerfest/";  
}
elseif($_POST['cat'] == "Maibaum")
{
$uploaddir = "pics/maibaum/";  
}
elseif($_POST['cat'] == "Silvester")
{
$uploaddir = "pics/silvester/";  
}
elseif($_POST['cat'] == "Saufen")
{
$uploaddir = "pics/saufen/";  
}
elseif($_POST['cat'] == "Delirium")
{
$uploaddir = "pics/delirium/";  
}
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
    print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($_FILES);
}
}else{
?>  
<form enctype="multipart/form-data" action="index.php?link=upload" method="post">
  <p>
    Upload: 
  <input name="userfile" type="file">
  <br>
     Kategorie: 
     <select name="cat">
      <option>Silvester</option>
      <option>Maibaum</option>
      <option>Sommerfest</option>
      <option>Saufen</option>
      <option>Delirium</option>
    </select>
  <br>
    <input type="submit" value="Upload">
  </p>
</form>
<? print_r($_FILES);
} ?>

Antwort 10 von katy vom 18.01.2020, 18:41 Options

das Script hattest du doch schon gepostet. Wichtig ist jetzt die Antwort auf: was tut es denn? Welche der beiden Antwortmöglichkeiten gibt es denn aus?

Die upload.htm wird aber nicht direkt aufgerufen, oder? Weil die Endung htm für ein PHP-File ungebräuchlich ist und allenfalls bei include einen Sinn ergibt. Bei direktem Aufruf der Datei würde das Script nämlich gar nicht abgearbeitet sondern einfach an den Browser geschickt werden. Manche nutzen deswegen eine klare Endung für include-Dateien, zB. inc.

Gibt es überhaupt "richtige Fehlermeldungen"? Hast du error_reporting(E_ALL); aktiviert?

katy

Antwort 11 von Sypro vom 18.01.2020, 18:55 Options

Die upload.htm wird included.

index.php?link=upload

Funktioniert auch wunderbar bei allen anderen Sachen die ich in die Page eingebaut habe.

error_reporting(E_ALL);

habe ich am Anfang des Scripts gesetzt, aber er gibt immer noch nur den Array aus.

error_reporting(E_ALL);
if(isset($_POST['submit']) && $_POST['submit']=="Upload"){
if($_POST['cat'] == "Sommerfest")
{
usw.

Antwort 12 von Sypro vom 18.01.2020, 19:00 Options

Er gibt auch immer nur alles hinter der letzten "else" Schleife aus,
also das print_r ($_FILES); Und das Formular, egal ob ich gesendet habe oder nicht.

Antwort 13 von katy vom 19.01.2020, 06:39 Options

Da können wir ja endlich das Problem einengen! Es liegt also an der ersten Abfrage if isset...
Die ist also immer negativ.
Ohne es jetzt belegen zu können, glaube ich mich zu erinnern, dass derartige Abfragen möglichst vor der ersten HTML-Ausgabe stattfinden sollen, besser noch: vor allem anderen.
Ich schätze mal, dass das bei dir nicht so ist.
Setz das Upload-Script doch mal in eine eigene Datei, verzichte also auf include hierbei und probier es dann aus.

katy

Ähnliche Themen

ordner löschen per script
gregosby  10.01.2007 - 80 Hits -

Upload zu langsam
JackoMacko  16.02.2008 - 221 Hits - 6 Antworten

Image-Upload
kjhofmann  06.06.2008 - 75 Hits - 5 Antworten

Download Script
HubbaBubba  30.06.2008 - 99 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026