Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Bildinformationen heranziehen

Diskussion: Bildinformationen heranziehen im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige N'abend, Die Überschrift ist leider nicht sehr informativ, es ist aber auch ein schwer in wenigen Worten zusammenfassbares Problem. ...

Antwort
Alt 03.05.07, 21:39   #1 (permalink)
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Bildinformationen heranziehen

Anzeige

N'abend,
Die Überschrift ist leider nicht sehr informativ, es ist aber auch ein schwer in wenigen Worten zusammenfassbares Problem.
Und zwar will ich einen kleinen Bilder upload machen.
Dabei hab ich folgendes Eingabefeld:

Code:
<html>
  <head>
    <title>
    Bilderupload
    </title>
  </head>
 <body>
  <form action="../upload.php" method="post" enctype="multipart/form-data">
    <h2>
      Neues Bild hinzuf&uuml;gen
    </h2>
    Person:   <input name="person" type="text" size="20" /><br />
    Ort:      <input name="ort" type="text" size="20" /><br />
    Datum:    <input name="datum" type="text" size="20" /><br />
    Fotograf: <input name="fotograf" type="text" size="20" /><br />
    Bild:     <input name="bild" type="file" size="20" accept="text/*" /><br />
              <input name="submit" type="submit" value="Bild hochladen" /><br />
  </form> 
 </body>
</html>
So jetzt will ich das in folgenden Skript verarbeiten:
PHP-Code:
<html>
  <head>
    <title>
      Bildupload
    </title>
  </head>
 <body>
 <?php
  $server   
"localhost";
  
$user     "root";
  
$password "*****************";
  
$database "wales";
  
  if (isset(
$_POST['submit'])) {
  
// Prüfen, ob Eingabe gemacht wurde
    
if (empty($_POST['person']) AND empty($_POST['ort']) AND empty($_POST['datum']) AND empty($_POST['fotograf']) OR empty($_POST['bild'])) {
        echo 
"Eingabe inkorrekt!<br />";
        echo 
'<a href="../neu.php">Zur&uuml;ck</a>';
        exit();
        }
        
mysql_connect($server$user$password$database);
        if (
file_exists($_POST['bild'])) {
            echo 
"Es gibt bereits ein Bild mit diesem Namen.";
        } else {
        
copy($_POST['bild'], "../bilder/");
        echo 
"Das Bild".$_POST['bild']."wurde erfolgreich hochgeladen.";
        
//jetzt noch thumbnail erstellen
        
$ziel $_POST['bild'];
        
$pfad "../thumb/";
        
$size getimagesize("../bilder/$ziel");
        
$breite $size[0];
        
$hoehe  $size[1];
        
$neuehoehe 70;
        
$neuebreite intval($breite*$neuehoehe/$hoehe);
        if (
$size[2] == 2) {
            
$altesbild ImageCreateFromJPEG("../bilder/$ziel");
            
$neuesbild ImageCreate($neuebreite$neuehoehe); 
            
ImageCopyResized($neuesbild$altesbild0000$neuebreite$neuehoehe$breite$hoehe);
            
ImageJPEG($neuesbild"../thumb/$bild");
        }
        
// jetzt noch alles in der Datenbank speichern 
        
$query "INSERT INTO
                     wales_bilder (person, ort, datum, fotograf, bildpfad, thumbpfad)
                  VALUES ('"
.$_POST['person']."','".$_POST['ort']."','".$_POST['datum']."','".$_POST['fotograf']."', '../bilder/', '../thumb/');";
                      
        
$result mysql_query($query) OR die(mysql_error());
        echo 
"Es wurde nun noch ein Thumbnail erstellt und die n&ouml;tigen Daten in die Datenbank geschrieben.<br />";
        echo 
'<a href="../neu.php">Ein weiteres Bild hochladen</a><br />';
        echo 
'<a href="../index.htm">Zur&uuml;ck zur Startseite.</a><br />';       
      }
  } else {
  echo 
'Bitte benutze die <a href="../index.htm">Suchfunktion</a>';
  }
  
 
?> 
 </body>
</html>
Ich weiß auch schon wo der Fehler liegt, und zwar wenn ich OR empty($_POST['bild']) weg mache, funzt es mehr oder weniger einwandfrei ( es fehlt halt die variable im restlichen Skript. ).
Jedoch weiß ich sonst nicht, wie ich prüfen soll, ob eine Datei vorher ausgewählt wurden ist, und wie ich an die Bildmaße rankommen.
Ich habe schon probiert das ganze mit !isset() zu ersetzen (,da ich dachte es läge vielleicht am empty ), das ging aber auch nicht.
Danach hab ich nochmal bei selfhtml geguckt. Da steht als einzige 2 Bedingungen, dass es mit POST übergeben muss und im form stehen muss, dass es enctype="multipart/form-data" ist.
Wenn ich bei dem input der File die accept-Bedingung rausnehmen verändert sich trotzdem nichts.

Ich hoffe ihr könnt mir helfen.


0wnZ
0wnZ ist offline   Mit Zitat antworten
Alt 03.05.07, 21:53   #2 (permalink)
Administrator
 
Benutzerbild von Mackz
 
Registriert seit: 02.10.01
Mackz Leistung: Pentium IMackz Leistung: Pentium I
Likes: 30
Standard

Probiere mal:
Code:
if ($_FILES['bild']['name']) {

Zitat:
und wie ich an die Bildmaße rankommen.
Ich habe das in einem Uploadscript mal so gemacht:
Code:
$image=getimagesize($_FILES['bild']['tmp_name']);
$width=$image[0];
$height=$image[1];
__________________
RL sux big time... auch 2012!

Deleting pr0n is like killing your best friend

[HaBo] bei Facebook - Werde Fan
Mackz ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 03.05.07, 22:21   #3 (permalink)
Themenstarter
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Danke, es geht
Nur ein kleines Problemchen. Das Bild wird nicht gespeichert.
Soll heißen, es kopiert sich nicht in den Zielordner.
In der Datenbank hingegen wird alles richtig eingetragen.
mit copy(); sollte das doch funzen ?
0wnZ ist offline   Mit Zitat antworten
Alt 03.05.07, 22:24   #4 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Arrow

move_uploaded_file()
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 13.05.07, 16:45   #5 (permalink)
Themenstarter
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Entschuldigung für die späte Antwort.
Leider funktioniert move_uploaded_file() nicht. Liegt es daran, dass ich es momentan noch lokal mit xampp ausprobiere ?
Mit is_ulpoaded_file()
habe ich geprüft, ob $_FILES['bild']['name']; eine hochgeladene Datei ist. die Funktion liefert FALSE.
Habe auch schon bei php.net bei Steurung von Dateiuploads, jedoch ohne Erflog .
Wäre dankbar für eine Idee.
0wnZ ist offline   Mit Zitat antworten
Alt 13.05.07, 19:14   #6 (permalink)
 
Registriert seit: 14.03.07
.smash Leistung: Facit NTK
Likes: 0
Standard

Ich trage zwar nicht zur Lösung deines Problems bei, aber möchte dennoch sagen, dass das gesamte Script unsicher ist.

es wird keine einziege Usereingabe überprüft, angefangen von den sql querrys
Code:
VALUES ('".$_POST['person'].
bis zu dem format der datei (das man wirklich nur bilderformate uppen kann (.jpg, .gif, .png, ....) und keine php scripte oder ausführbare programme...

weiter brauche ich garnicht zu schauen, dass sind schonmal 2 sachen die mir direkt ins Auge gestochen sind, und auschon reichen um den Webspace unter kontrolle zu bekommen.


Ich denke mal da hast du noch einige szu verbessern

mfg
.smash ist offline   Mit Zitat antworten
Alt 13.05.07, 19:18   #7 (permalink)
Themenstarter
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Ich werde es berücksichtigen. Eigentlich sollte das Skript nur solange auf dem Zielrechner bleiben, wie Bilder hochgeladen werden. Und dann bin ich dabei, oder es sind Leute am Werken, die davon keine Ahnung haben .
Trotzdem gucke ich nochmal wegen den ganzen Eingaben. Um es einfach Idiotensicher zu machen.
0wnZ ist offline   Mit Zitat antworten
Alt 15.05.07, 23:29   #8 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Ich denke mal Du rufst die Funktion move_uploaded_file() falsch auf.

Beispiel:
PHP-Code:

if (! move_uploaded_file($_FILES['bild']['tmp_name'], "../thumb/" $_FILES['bild']['name'])) {
    die(
"Das Bild konnte nicht übertragen werden!");

__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 16.05.07, 14:56   #9 (permalink)
Themenstarter
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Super, danke, das hat mir schon sehr geholfen.
Damit sind schonmal die Fehlermeldungen weg.
Das Problem, dass die Datei nicht in den dafür vorhergesehen Ordner kopiert wird bleibt.
Nochmal das Skript, wie es jetzt ist:
PHP-Code:
<html>
  <head>
    <title>
      Bildupload
    </title>
  </head>
 <body>
 <?php
  $server   
"localhost";
  
$user     "root";
  
$password "xxxxxxxx";
  
$database "wales";
  
  if (isset(
$_POST['submit'])) {
  
// Prüfen, ob Eingabe gemacht wurde
    
if (empty($_POST['person']) AND empty($_POST['ort']) AND empty($_POST['datum']) AND empty($_POST['fotograf']) OR empty($_FILES['bild']['name'])) {
        echo 
"Eingabe inkorrekt!<br />";
        echo 
'<a href="../neu.php">Zur&uuml;ck</a>';
        exit();
        }
        
mysql_connect($server$user$password$database);
        
mysql_select_db($database);
        if (
file_exists($_FILES['bild']['name'])) {
            echo 
"Es gibt bereits ein Bild mit diesem Namen.";
        } else {
            
$bild $_FILES['bild']['name'];
            
$hochladen move_uploaded_file($_FILES['bild']['tmp_name'], "../bilder/");
            echo 
"Das Bild ".$_FILES['bild']['name']." wurde erfolgreich hochgeladen.";
             
//jetzt noch thumbnail erstellen
            
$pfad "../thumb/";
            
$size getimagesize("../bilder/".$_FILES['bild']['name']);
            
$breite $size[0];
            
$hoehe  $size[1];
            
$neuehoehe 70;
            
$neuebreite intval($breite*$neuehoehe/$hoehe);
            if (
$size[2] == 2) {
                
$altesbild ImageCreateFromJPEG($_FILES['bild']['tmp_name']);
                
$neuesbild ImageCreate($neuebreite$neuehoehe); 
                
ImageCopyResized($neuesbild$altesbild0000$neuebreite$neuehoehe$breite$hoehe);
                
ImageJPEG($neuesbild"../thumb/");
                
// jetzt noch alles in der Datenbank speichern 
                
$query "INSERT INTO
                            wales_bilder (person, ort, datum, fotograf, bildpfad, thumbpfad)
                          VALUES ('"
.$_POST['person']."','".$_POST['ort']."','".$_POST['datum']."','".$_POST['fotograf']."', '../bilder/', '../thumb/');";
                      
                
$result mysql_query($query) OR die(mysql_error());
                echo 
"Es wurde nun noch ein Thumbnail erstellt und die n&ouml;tigen Daten in die Datenbank geschrieben.<br />";
            }
         echo 
'<a href="../neu.php">Ein weiteres Bild hochladen</a><br />';
         echo 
'<a href="../index.htm">Zur&uuml;ck zur Startseite.</a><br />';       
      }
  } else {
  echo 
'Bitte benutze die <a href="../index.htm">Suchfunktion</a>';
  }
  
 
?> 
 </body>
</html>
PS: Sicherheit kommt, wenn das funktioniert.
0wnZ ist offline   Mit Zitat antworten
Alt 16.05.07, 15:03   #10 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Du hast Dir meine Antwort nicht genau genug angeschaut. :O
move_uploaded_file() weiss bei Dir ja nicht wie die Datei heißen soll.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 16.05.07, 15:07   #11 (permalink)
Themenstarter
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Hat sich
Smash hat sich bereit erklärt und mir per icq geholfen.
BasivAvid auch
Trotzdem danke an alle.

Mit freundlichen Grüßen

0wnZ
0wnZ ist offline   Mit Zitat antworten
Alt 16.05.07, 17:58   #12 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Mir dünstet, Du versuchst mit Deinem Script auf ein Verzeichnis ausserhalb des DocumentRoot zuzugreifen.

Du willst ja mit Deinem ../bilder auf ein Verzeichnis ausserhalb des htdocs Verzeichnisses zugreifen. Böser Fehler!
Ändere mal in Deinen Dateien ../ in ./ um und probier es nochmal.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 16.05.07, 19:10   #13 (permalink)
 
Registriert seit: 14.03.07
.smash Leistung: Facit NTK
Likes: 0
Standard

@Basiv, hab ich schon ;> aber keine Ahnung ob er 's schon wieder geändert hat...

mfg
.smash ist offline   Mit Zitat antworten
Alt 16.05.07, 19:19   #14 (permalink)
Themenstarter
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Jap, alles funktioniert jetzt.
Ich weiß, dass es momentan ziemlich unübersichtlich und unsicher ist.
Aber hier erstmal das vorläufige Skript, falls andere Leute genauso auf dem Schlau stehen wie ich:
PHP-Code:
<?php
  $server   
"localhost";
  
$user     "root";
  
$password "xxxxxxxxxxxxx";
  
$database "wales";
  
  if (isset(
$_POST['submit'])) {
  
// Prüfen, ob Eingabe gemacht wurde
    
if (empty($_POST['person']) AND empty($_POST['ort']) AND empty($_POST['datum']) AND empty($_POST['fotograf']) 

OR empty(
$_FILES['bild']['name'])) {
        echo 
"Eingabe inkorrekt!<br />";
        echo 
'<a href="./neu.php">Zur&uuml;ck</a>';
        exit();
        }
        
mysql_connect($server$user$password$database);
        
mysql_select_db($database);
        if(
file_exists("./bilder/".$_FILES['bild']['name'])) {
            echo 
"Es gibt bereits ein Bild mit diesem Namen.";
        } else {            
$bild $_FILES['bild']['name'];
            
$hochladen move_uploaded_file($_FILES['bild']['tmp_name'], "./bilder/".$_FILES['bild']['name']);
            echo 
"Das Bild ".$_FILES['bild']['name']." wurde erfolgreich hochgeladen.";
             
//jetzt noch thumbnail erstellen
            
$size getimagesize("./bilder/".$_FILES['bild']['name']);
            
$breite $size[0];
            
$hoehe  $size[1];
            
$neuehoehe 70;
            
$neuebreite intval($breite*$neuehoehe/$hoehe);
            if (
$size[2] == 2) {
                
$altesbild ImageCreateFromJPEG("./bilder/".$_FILES['bild']['name']);
                
$neuesbild ImageCreateTrueColor($neuebreite$neuehoehe); 
                
ImageCopyResampled($neuesbild$altesbild0000$neuebreite$neuehoehe$breite$hoehe);
        
$thumbName explode('.'$_FILES['bild']['name']);
        
$thumbName $thumbName[0] . '_thumb.' $thumbName[1];
        
ImageJPEG($neuesbild"./thumb/" $thumbName);
    
$bildName  $_FILES['bild']['name'];
                
// jetzt noch alles in der Datenbank speichern 
                
$query "INSERT INTO
                            wales_bilder (person, ort, datum, fotograf, bildpfad, thumbpfad)
                          VALUES 

('"
.$_POST['person']."','".$_POST['ort']."','".$_POST['datum']."','".$_POST['fotograf']."', './bilder/$bildName', 

'./thumb/$thumbName');"
;
                      
                
$result mysql_query($query) OR die(mysql_error());
                echo 
"Es wurde nun noch ein Thumbnail erstellt und die n&ouml;tigen Daten in die Datenbank 

geschrieben.<br />"
;
            }
         echo 
'<a href="./neu.php">Ein weiteres Bild hochladen</a><br />';
         echo 
'<a href="./bilder/'.$bildName.'">Das Bild angucken</a><br />';
         echo 
'<a href="./index.htm">Zur&uuml;ck zur Startseite.</a><br />';       
      }
  } else {
  echo 
'Bitte benutze die Uploadskript. <br /> <a href="../index.htm">Zur&uuml;ck</a>';
  }
  
 
?> 
 </body>
</html>
Wenn ich Sicherheitslücken gestopft habe und es übersichtlicher ist, werde ich noch edit vornehmen

Danke nochmals
0wnZ ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Bildinformationen heranziehen
Themen-Optionen
Ansicht

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61