Zur Boardunity Forenstartseite

Zurück   Boardunity & Video Forum » Technik » Programmierung und Datenbanken

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1  
Alt 30.11.2003, 14:26
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110

Bild Upload


Hallo Leute.

Im Zuge eines Newssystems für mein Forum brauche ich ein Bild Upload Skript. Ich habe mich auch jetzt soweit hingesetzt, komme aber zu Problemen. Wenn ich ein Bild hochlade kommt ständig "Datei bereits vorhanden. Bitte anderen Namen angeben." Hier ist mal der php Code:

PHP-Code:
/* Picture upload */
$filepath "files/upload/";

if (
$upfile_name != " ")
{
  if (!
file_exists($filepath.$upfile_name))
  {
    if (
copy($upfile$filepath.$upfile_name))
    {
      echo 
"Das Bild wurde gespeichert";
    }
    else
    {
      echo 
"Upload fehlgeschlagen";
    }
  }
  else
  {
    echo 
"Datei bereits vorhanden. Bitte anderen Namen angeben.";
  }
}

echo 
"<hr>";

unset(
$files);
if (
$dh opendir($filepath))
{
  while(
$file readdir($dh))
  {
    if (!
ereg("^\.+$",$file))
    {
      
$files[] = $file;
    }
  }
  
closedir($dh);
}

if (
is_array($files)) {
  
sort($files);
  
reset($files);
  foreach(
$file as $file) {
   echo 
$file"<br>";
  }

Und hier der Formularteil:

Code:
<TR>
<TD WIDTH=150 CLASS=left>
<B>Bild: </B>
</TD>
<TD WIDTH=440 CLASS=left>
<INPUT TYPE=hidden NAME=MAX_FILE_SIZE value=250000>
<INPUT TYPE=file NAME=picture>
</TD>
</TR>
Kann mir einer sagen, was da schief gegangen ist? Sollte doch so eigentlich klappen ...
__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #2  
Alt 30.11.2003, 14:59
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Negativ, es hat sich in Sachen Upload seit Version 4.1 und 4.2 einiges getan.

Seit Version 4.1 werden die Daten ausser im Array $HTTP_POST_FILES auch im Array $_FILES gespeichert.

Seit Version 4.2 steht register_globals von Haus aus auf off, somit werden die Variablen die du verwendest nicht mehr gesetzt.

Probiers mal mit folgendem
PHP-Code:
<?php

/* Picture upload */
$filepath "files/upload/";

if (
is_uploaded_file($_FILES['picture']['tmp_name']))
{
  if (!
file_exists($filepath.$_FILES['name']))
  {
    if (
move_uploaded_file($_FILES['picture']['tmp_name'], $filepath.$_FILES['picture']['name']))
    {
      echo 
"Das Bild wurde gespeichert";
    }
    else
    {
      echo 
"Upload fehlgeschlagen";
    }
  }
  else
  {
    echo 
"Datei bereits vorhanden. Bitte anderen Namen angeben.";
  }
}

echo 
"<hr>";

unset(
$files);
if (
$dh opendir($filepath))
{
  while(
$file readdir($dh))
  {
    if (!
ereg("^.+$",$file))
    {
      
$files[] = $file;
    }
  }
  
closedir($dh);
}

if (
is_array($files)) {
  
sort($files);
  
reset($files);
  foreach(
$file as $file) {
   echo 
$file"<br>";
  }
}
?>
Schau dir auch mal http://www.php.net/manual/de/features.file-upload.php an

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #3  
Alt 30.11.2003, 18:31
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Zitat:
Original geschrieben von ciruZ
@DaddyCool:
Lieber $HTTP_POST_FILES wegen der Abwärtskompatibilität
Aber wenns nur für einen Server ist tuts natürlich auch $_FILES.
Das versteh ich jetzt nicht ganz.

Du setzt Funktionen ein die es erst ab PHP5 geben wird, und emulierst sie ggf., aber hier gehst du einen Schritt zurück und nutzt Variablen die es in späteren Versionen womöglich gar nicht mehr gibt. (jedenfalls machen sie nach einführung der Superglobalen immer weniger Sinn)

Was steckt da für eine Logik hinter??

Eher würde ich den Schritt gehen und die Versionen überprüfen und die Superglobalen Variablen falls nötig selbst setzen.

Wobei sich bei mir die Frage stellt, wer den überhaupt noch PHP < 4.1 einsetzt.

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #4  
Alt 30.11.2003, 19:29
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
@DaddyCool
Schon mal danke für deine Hilfe, aber es klappt nicht so recht. Es kommt keine Meldung. Es wird nix ausgegeben. Und das Bild wird in dem Ordner auch nicht gespeichert. Fehlermeldung kommt auch nicht ...

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #5  
Alt 30.11.2003, 19:36
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Also 'nen kleinen Fehler habe ich gerade gefunden.
Ich habs enctype="multipart/form-data" im Formular vergessen. Doch es klappt immernoch nicht recht.

Es ist wie beim ersten Mal und zwar wird bei jedem Bild ausgegeben, dass das Bild schon existiert, obwohl keine Datei in dem Ordner ist.

Zitat:
Datei bereits vorhanden. Bitte anderen Namen angeben.

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #6  
Alt 30.11.2003, 20:05
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
bau doch mal ein print_r($_FILES); ein und sag uns was er ausgibt.

Poste nochmal deinen neuen HTML Code

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #7  
Alt 30.11.2003, 20:09
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Also dieses print_r gibt jetzt das aus. Damit kann ich absolut nix anfangen.

Zitat:
Array ( [picture] => Array ( [name] => php4.jpg [type] => image/pjpeg [tmp_name] => /tmp/phpQPEwOG [error] => 0 [size] => 25054 ) )
Das Formular ist etwas größer. Das ist der FORM Teil:

Code:
<FORM NAME=gb enctype=multipart/form-data METHOD=\"POST\" ACTION=\"$PHP_SELF?poster=".$db1['EID']."\">
Und die INPUT Felder sind geblieben

Code:
<INPUT TYPE=hidden NAME=MAX_FILE_SIZE value=250000>
<INPUT TYPE=file NAME=picture>

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #8  
Alt 30.11.2003, 20:13
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
PHP-Code:
<h1>Upload</h1>

<form
  action="<?php echo $_SERVER['PHP_SELF']; ?>"
  method="post"
  enctype="multipart/form-data">
<input type="file" name="probe" />
<input type="submit" value="Los!" />
</form>
<hr />
<?php
  
if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {
    
// Alternativ:            and   $_FILES['probe']['size']
    
move_uploaded_file($_FILES['probe']['tmp_name'], "./newfile.txt");
    
printf("Die Datei %s steht jetzt als " .
          
"newfile.txt zur Verfügung.<br />\n",
      
$_FILES['probe']['name']);
    
printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
      
$_FILES['probe']['size'], $_FILES['probe']['type']);
  }
 
?>
Wichtig ist, dass der Dateiname entsprechend angepasst werden muss. Aus diesem Grund sollte man $_FILES['probe']['name'] nutzen anstatt newfile.txt

http://www.dclp-faq.de/q/q-formular-upload-php4.html

  #9  
Alt 30.11.2003, 20:18
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
PHP-Code:
/* Picture upload */
if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {
    
// Alternativ:            and   $_FILES['probe']['size']
    
move_uploaded_file($_FILES['probe']['tmp_name'], $_FILES['probe']['name']);
    
printf("Die Datei %s steht jetzt als " $_FILES['probe']['name'] . "zur Verfügung.<br />\n",
      
$_FILES['probe']['name']);
    
printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
      
$_FILES['probe']['size'], $_FILES['probe']['type']);
  } 
Klappt nicht. Steht ja auch nirgends ein Pfad zum Hochladen

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #10  
Alt 30.11.2003, 20:23
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
mmh, ich seh in meinem Code grad nen Fehler.

Such mal
Code:
if (!file_exists($filepath.$_FILES['name']))
und ersetze es durch

Code:
if (!file_exists($filepath.$_FILES['picture']['name']))

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #11  
Alt 30.11.2003, 20:29
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Hey jetzt hat das geklappt. Vielen Dank!

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #12  
Alt 30.11.2003, 20:38
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Arks jetzt hab ich noch eine klitze kleine Sache.
Ich muss jetzt noch den Namen des Bildes in eine SQL Tabelle eintragen. Habs mit $_FILES[picture][name] versucht. Aber da wird nur Array [name] eingetragen. Mehr nicht.
Wie bekomm ich denn jetzt den Bild Namen (mit Endung) eingetragen?

Ich brauch ja im Prinzip nur den Namen der Datei. Den Rest kann ich wohl

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #13  
Alt 30.11.2003, 22:26
Benutzerbild von Akira
Mitglied
 
Registriert seit: 07.2002
Ort: Österreich
Beiträge: 238
der name der datei wird auch in der variable gespeichert:
$HTTP_POST_FILES['file']['name']

das sollte eigendlich funtzen.
(wobei 'file' der name der feldes ist mit dem du das bild auswählst bevor du es hochlädst.)

  #14  
Alt 30.11.2003, 22:26
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Wenn das $_FILES[picture][name] innerhalb von Häckchen ist (z.B. mysql_query("INSERT INTO upload (dateiname) VALUES ('$_FILES[picture][name]')") ) dann mach daraus {$_FILES[picture][name]}

Schöner wäre es aber so: mysql_query("INSERT INTO upload (dateiname) VALUES ('".$_FILES['picture']['name']."')")

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #15  
Alt 30.11.2003, 22:32
Benutzerbild von Akira
Mitglied
 
Registriert seit: 07.2002
Ort: Österreich
Beiträge: 238
ich schreibe meine sql befehle immer so:

mysql_query("INSERT INTO `upload` (`dateiname`) VALUES ('".$HTTP_POST_FILES['picture']['name']."')");

  #16  
Alt 01.12.2003, 17:40
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Jap, dass hat geklappt.
Vielen Dank für eure Hilfe, Jungs!

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #17  
Alt 01.12.2003, 19:23
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Ich hab das zwar auch schon in zahlreichen wBB Boards geschrieben, aber vielleicht kann mir ja hier jemand helfen.

----------------------

Hallo.

Ich knobel seit längerem an einem Problem. Und zwar habe ich einen User 'Nachrichten' bei dem möchte ich immer ein Bild in den Beitrag eingeblendet haben. Es ist je nach Beitrag ein anderes Bild. Der User ist eine Art Newssystem. Der Beitrag wird in einem externen ACP erstellt und im Portal und im Forum wird ein Thema erstellt. Es wird immer ein Bild zur entsprechenden Nachricht hochgeladen und der Name des Bildes wird in einer Tabelle abgespeichert. Soviel zur Hintergrundinformation.

Das für den User Nachrichten eine andere thread_postbit ausgegeben wird habe ich mittels Templateskripting schon hinbekommen allerdings scheitere ich bei der Ausgabe des Bildes. Ich habe bereits versucht in der global.php das Bild auszurufen

PHP-Code:
 $abfrage mysql_query("SELECT picture FROM news_content WHERE threadid = '".$thread['threadid']."'"); 
doch ich schaff es nicht den ausgegebenen Namen in eine Variable zu speichern, sodass ich die Variable im Template therad_postbit verwenden kann. Das ist also der Kernpunkt meiner Frage. Wie und wo muss ich eine Abfrage machen, damit ich den Bildnamen in eine Variable packen kann, die ich dann in den Templates verwenden kann?

Ich hoffe ich habe mich klar genug ausgedrückt. Es ist schwer zu erklären. Jedes Bild gehört ja einer bestimmten Nachricht an und jede Nachricht hat in der Tabelle 'news_content' auch eine threadid die identisch mit der aus dem Forum ist. Daher muss ich ja WHERE threadid = '".$thread['threadid']."' vergleichen. Nur noch kurz zur Erklärung.


Ich hoffe mir kann jemand helfen.

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
Antwort


Stichworte
-


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
BILD beweist ihre eigene Unfähigkeit Daniel Richter Boardunity-Talk 2 24.12.2004 14:25
Die Realität der Bild TRS Boardunity-Talk 13 06.12.2004 15:59
Suche Bild ... Affe mit Erektion Jan Stöver Boardunity-Talk 8 01.07.2004 16:21
upload im profil lucky luke Web Design und Grafik 0 22.06.2003 18:28






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25