+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Bildupload Bilder hinzufügen und Pfade in MySql Datenbank hinzufügen.

  1. #1
    TP-Member mallmis macht alles soweit korrekt Avatar von mallmis
    Registriert seit
    Nov 2005
    Beiträge
    58

    Bildupload Bilder hinzufügen und Pfade in MySql Datenbank hinzufügen.

    Hallo liebes Traum-Team,

    habe mir ein tolles Script mit PHP und HTML gebastelt, welches mir Bilder auf den Server lädt. Man kann Bilder auswählen, diese werden dann in drei verschiedenen Größen auf dem Server, mit Orginal Dateinamen + Endungen und Dateityp gespeichert. Danach werden die Pfade zum Verzeichnis sowie zu den Bildern, welche ich zuvor über eine Schleife in ein array gepackt habe in die Datenbank eingetragen. Hinzu habe ich noch die Alt Tags über eine Form mitgeschickt. Diese werden auch in die Datenbank eingetragen. Dieses Script soll nur für mich sein um Inhalte in eine Datenbank einfacher eingeben zu können -- beziehungsweise meine Freundin...
    Daher sind auch noch keine Sicherungsabfragen drin und es ist auch noch alles etwas chaotisch angeordnet.

    Mein Problem, bei dem ich nun nicht weiterkomme ist, wie ich nun Bilder hinzugebe und in der Datenbank abspeichere.

    Aufgrund meines Upload Scriptes habe ich nun schon etwas gebastelt, habe aber im Array immer nur NULL stehen. Weiß nicht wie ich das lösen soll.

    Hier erst mal das Script:


    In diesem Teil prüfe ich erstmal ob das Formular abgeschickt wurde, lege das Array an, bereinige den Ordnernamen und lege den Pfad fest, wo die Bilder gespeichert werden sollen.

    PHP-Code:
    if (isset($_POST['submitbutton']))
    {
       
        
    $bilder_dump = array();
        
    $neuer_ordner $_POST['name_ordner'];
        
        
    // Umlaute des Ordners ersetzen usw.
        
    $neuer_ordner_bereinigen = array('ä' => 'ae''ö' => 'oe''ü' => 'ue''ß' => 'ss'' ' => '_');
        
    $neuer_ordner_neu strtr(strtolower($neuer_ordner), $neuer_ordner_bereinigen);
        
    $pfad "../deutsch/images_neu/$neuer_ordner_neu/";
        
    $pfad_alt$datensatz["verzeichnis"];
        include (
    "inc_functions.php");
        
    // Ordner umbenennen mit PHP
        
    rename$pfad_alt$pfad);// Hier werde ich noch eine Prüfung einfügen ob der Ordner bereits existiert!!!!! 
    In diesem Teil lege ich die erlaubten Dateiendungen fest, setze Zäler auf 0 und erzeuge eine Schleife, für jedes Bild das angegeben wird. Dann prüfe ich noch, ob die Datei mehr als 0 KB hat, wenn nicht wurde auch nichts hochgeladen.


    PHP-Code:
    {
        
            
    // Erlaubte Dateiendungen festlegen
            
    $Erlaubte_Dateiendungen = array("jpg""JPG""gif""GIF""png""BMP""bmp");
            
            
    $i 0;

            
    // Schleife erzeugen für jedes Bild
            
    foreach ($_FILES['datei']['error'] as $key => $error)
            {
                if (
    $error == UPLOAD_ERR_OK)
                    
    // Pruefen ob die hochgeladenen Datei mehr als 0 Byte hat
                    
    if ($_FILES['datei']['size'][$key] > 0)
                    
                    { 


    In diesem Schritt nun wird die Dateiendung abgetrennt, Prüfung erfolgt, ob erlaubt, Dateiname umgewandelt und für Linux UMASK resettet.


    PHP-Code:
     // Dateiendung der hochgeladenen Datei abhacken....
                        
    $UploadDateiEndung array_pop(explode("."strtolower($_FILES['datei']['name'][$key])));
                        
                        
    // Prüfen ob die Endung der hochgeladenen Datei erlaubt ist
                        
    if (!in_array($UploadDateiEndung$Erlaubte_Dateiendungen))
                        {
                            die(
    "Die angehängte Datei hat eine nicht erlaubte Dateiendung!");
                        }
                        
                        
    // Neuen Dateinamne erzeugen indem Umlaute und Leerzeichen umgewandelt werden
                        
    $DateiNameNeu strtr(strtolower($_FILES['datei']['name'][$key]), $bereinigen);
                        
                        
    // UMASK resetten um Dateirechte zu ändern (Linux, Windows ignoriert das)
                        
    $umask_alt umask(0); 


    Jetzt geht es los, Datei wird verschoben, und meine Funktion picSize kommt zum Einsatz, welche ich gleich noch bereitstelle.



    PHP-Code:
    // Hochgeladenen Datei verschieben
                        
    if (@move_uploaded_file($_FILES['datei']['tmp_name'][$key], $pfad.$DateiNameNeu))
                        {

                            
    $groesse["_150"] = picSize($_FILES['datei']['name'][$key], 150);//hier wird nun die Funktion aufgerufen; Argument 1 ist die Datei und als größe ist 150 definiert
                            
    $groesse["_400"] = picSize($_FILES['datei']['name'][$key], 400);//hier wird nun die Funktion aufgerufen; Argument 1 ist die Datei und als größe ist 400 definiert
                            
    $groesse["thumb"] = picSize($_FILES['datei']['name'][$key], 100);//hier wird nun die Funktion aufgerufen; Argument 1 ist die Datei und als größe ist 100 definiert.

                            //Array befüllen
                            
                            
    $i++;
                            
    $bild[$i] = $groesse;


                            
    // Dateirechte setzen, damit man später die Datei wieder vom FTP bekommt und die UMASK auf den alten Wert setzen
                            
    @chmod($neues_bild0777);
                            
    umask($umask_alt);

                           

                        }
                        else
                        {
                            
    // UMASK resetten
                            
    umask($umask_alt);
                            
    // Hier steht Code der ausgefuehrt wird, wenn der Upload fehl schlug


                        
    }
                    
                    
                
    $bilder_dump $bild;}
             
            } 


    Hier nun die Funktion, welche ich in einer extra Datei gespeichert habe.


    PHP-Code:
    <?php

                        
    function picSize($pic,$size){ 
                        
    $Dateiname_bereinigen = array( 'ä' => 'ae''ö' => 'oe''ü' => 'ue''ß' => 'ss'' ' => '_' );
                        
    $neues_bild strtrstrtolower$pic ), $Dateiname_bereinigen ); //hier steht nun die Variable welche Argument 1 bildet ($pic)
                        
    $neuer_ordner $_POST['name_ordner'];
                        
    $neuer_ordner_bereinigen = array('ä' => 'ae''ö' => 'oe''ü' => 'ue''ß' => 'ss'' ' => '_');
                        
    $neuer_ordner_neu strtr(strtolower($neuer_ordner), $neuer_ordner_bereinigen);
                        
    $pfad "../deutsch/images_neu/$neuer_ordner_neu/";
                        
    $groesse getimagesize$pfad.$neues_bild ); 
                        
    $breite $groesse[0]; 
                        
    $hoehe $groesse[1];
                        
    $typ=$groesse[2];
                        
                        
                        
                        
    // Breite des Anzeigebildes festlegen (Höhe wird automatisch angepasst) 
                        
                        
    $breite_400 $size;
                        
    $hoehe_auto intval($hoehe $breite_400 $breite);
                        
                        
    // Bei GD < 2.0.1: ImageCreateTrueColor -> ImageCreate, ImageCopyResampled -> ImageCopyResized 
                    
                        
    $bild_400 imagecreatetruecolor$breite_400$hoehe_auto );

                        
                        switch (
    $typ)
                            {
                            case 
    1:
                            
    $bild imagecreatefromgif("$pfad$neues_bild");
                            break;
                            case 
    2:
                            
    $bild imagecreatefromjpeg("$pfad$neues_bild");
                            break;
                            case 
    3:
                            
    $bild imagecreatefrompng("$pfad$neues_bild");
                            break;
                            case 
    4:
                            
    $bild imagecreatefromwbmp("$pfad$neues_bild");
                            break;
                            default: 
    $gestorben="ja";
                            }
                        
                        
    imagecopyresampled$bild_400$bild0000,$breite_400 ,$hoehe_auto ,$breite ,$hoehe ); 
                        
    // Endung bei Dateiname hinzufügen, vor ".jgp" 
                        
                        
    $neues_bild explode ("."$neues_bild);
                        
                        
    // Dateianhang definieren
                        
                        
    if ($size == "400")
                            {
                            
    $zusatz "_400.";
                            }
                        elseif (
    $size == "150")
                            {
                            
    $zusatz "_150.";
                            }
                        else 
                            {
                            
    $zusatz "_thumb.";
                            }
                        
                        
    // Anzeigebild in $pfad mit angepasstem Dateinamen speichern, JPG Qualität: 90
                        
                        
                        
    $path_file= ("$pfad$neues_bild[0]$zusatz$neues_bild[1]");
                        
                        switch (
    $typ)
                            {
                            case 
    1:
                            
    imagegif $bild_400$path_file );
                            break;
                            case 
    2:
                            
    imagejpeg $bild_400$path_file90 );
                            break;
                            case 
    3:
                            
    imagepng $bild_400$path_file );
                            break;
                            case 
    4:
                            
    imagewbmp $bild_400$path_file );
                            break;
                            default: 
    $gestorben="ja";
                            
                            }
                    
                        
    // Temporären Speicher auf Server wieder frei geben 
                        
                        
    imagedestroy($bild); 
                        
    imagedestroy($bild_400);
                        if (
    $zusatz == "_thumb.")
                            {
                            
    unlink("$pfad$neues_bild[0].$neues_bild[1]");
                            }
                        
    //Rückgabe des Pfades+Name 
                        
    return $path_file; } 
                        
    ?>

    So, noch das UPDATE der Datenbank(en), und der funktioniert hier nicht, weil ich nur NULL drin stehen habe, sollte er aber, denn NULL kann man ja auch eintragen. Im Original UPDATE Script gehts aber(mit INSERT) :

    PHP-Code:
    $query    =                         "UPDATE bilder SET
            id_bez                            = '" 
    $ausgabe "',
            verzeichnis                        = '" 
    $neuer_ordner_neu ."' WHERE id = $ausgabe";
                
            
    $result    =    mysql_query$query );
            if ( ! 
    $result )
            {
            die(
    "konnte den Datensatz nicht eintragen: " mysql_error());
            }
            
            for(
    $i 0$i <= 25$i++)
            {
            if ( 
    $bild[$i] != "" )
            {
            
    $query    =                         "UPDATE bilder SET
            $bild_150_$i                        = '" 
    $bild[$i]['_150'] . "' WHERE id = $ausgabe"
            }
            
            
    $result    =    mysql_query$query );
            if ( ! 
    $result )
            {
            die(
    "konnte den Datensatz nicht eintragen: " mysql_error());
            }
            
            }
            
            
            for(
    $i 0$i <= 25$i++)
            {
            if ( 
    $bild[$i] != "" )
            {
            
    $query    =                         "UPDATE bilder SET
            thumb_$i                        = '" 
    $bild[$i]['_thumb'] . "' WHERE id = $ausgabe"
            }
            
            
    $result    =    mysql_query$query );
            if ( ! 
    $result )
            {
            die(
    "konnte den Datensatz nicht eintragen: " mysql_error());
            }
            
            }
            
            for(
    $i 0$i <= 25$i++)
            {
            if ( 
    $bild[$i] != "" )
            {
            
    $query    =                         "UPDATE bilder SET
            bild_$i                        = '" 
    $bild[$i]['_400'] . "' WHERE id = $ausgabe"
            }
            
            
    $result    =    mysql_query$query );
            if ( ! 
    $result )
            {
            die(
    "konnte den Datensatz nicht eintragen: " mysql_error());
            }
            
            }
            
            
            for(
    $i 0$i <= 25$i++)
            {
            if ( 
    $_REQUEST["form_alt_$i"] != "" )
            {
            
    $query    =                         "UPDATE alt SET
            alt_$i                        = '" 
    $_REQUEST["form_alt_$i"] ."' WHERE id = $ausgabe"
            }
            
            
    $result    =    mysql_query$query );
            if ( ! 
    $result )
            {
            die(
    "konnte den Datensatz nicht eintragen: " mysql_error());
            }
            echo (
    $_REQUEST["$altcount"]);
            
            }
            
                
    header("Location: check_bilder.php");
        die;

    //echo "Hier der Pfad: ".$pfad;
    //echo "Hier das Array: "; var_dump($bilder_dump);
        

    }



    Vermutlich liegt der Fehler aber im Formular. Ich lasse erst prüfen, ob in der Datenbank schon was steht und gebe dies dann aus. Danach werden dann die restlichen Upload Felder und ALT Felder angezeigt um dort noch Bilder und Alt Texte hinzuzufügen.

    HTML-Code:
    <table class="haupt"><form name="DateiUpload" id="DateiUpload" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data">
    <tr>
    <td>
    	
          <h1>
            Unsere Bilder      </h1><br>
          <input type="text" name="name_ordner" value="<?php echo basename ($datensatz["verzeichnis"]); ?>">
          Bilderordner<br>
          <br>
          <br>
          <br>
    	  
    	  <?php 
    	  
    	  for ( $i=0; $i <= 25; $i++)
    	  {
    		  if ($datensatz["bild_150_$i"] != "")
    		  
    		  {
    		  ?>
    		  <img src="<?php echo $datensatz["bild_150_$i"];?>" alt="<?php echo ($datensatz1["alt_$i"]);?>"><br />
    		  Beschreibung:<?php echo ($datensatz1["alt_$i"]);?><br />
    		  <?php 
    		  }
    		  
    		  else
    		  {
    		  ?>
    		  <input type="file" name="datei[$i]" id="datei"><br>
    		  <input type="text" name="form_alt_$i"> Beschreibungen immer mit Ferienhaus Mallorca usw. angeben<br><br>
    		  <?php 
    		  }
    	  }
    	  ?>
    	 	  
    	  <input type="submit" name="submitbutton" id="submitbutton" value="Dateien laden"><a href="logout.php">Ausloggen</a>	</td>
    	</tr>
    	</form></table>

    Also, der Upload funktioniert wenn ich neue Quellen angebe und die Bilder werden korrekt bearbeitet. Was nur nicht funktioniert, ist das UPDATE der Datenbanken, sogar dei ALT TAGS werden nicht eingetragen. Die entsprechende Datenbankzeile ist auch ausgewählt, habe ich jetzt nur nicht auch noch hinzugefügt. Das Array enthält nur NULL en,selbst die werden nicht geupdated. Warum, weiß ich nicht, deshalb rufe ich um Hilfe.

    Vielen Dank im Voraus,

    mallmis

  2. #2
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo,

    habe jetzt nicht alles durchgelesen (zu faul ATM ), aber wo kommt denn $ausgabe her und steht da überhaupt etwas drin?
    Hast Du dir mal $query ausgeben lassen, bevor Du es an die DB schickst, um zu sehen was da drin steht?

    Auch das hier ist nix...
    PHP-Code:
    $result    =    mysql_query$query );
            if ( ! 
    $result )
            {
            die(
    "konnte den Datensatz nicht eintragen: " mysql_error());
            } 
    Du speicherst einen Rückgabewert einer DB-Anfrage, die so gar kein Ergebnis zurückliefert (das geschieht nur bei SELECT). Bzw vermute ich, daß $result immer TRUE ist, auch wenn gar nichts passiert ist, denn es wird lediglich geprüft ob eine Anfrage an die DB geschickt wurde, nicht ob da tatsächlich etwas passiert ist.
    Viel eher benutzt man bei INSERT, UPDATE, DELETE den Befehl mysql_affected_rows um sich die Anzahl betroffener Datensätze ausgeben zu lassen.
    PHP-Code:
    $sql "UPDATE `tabelle` SET `feld` = 'irgendwas' WHERE `id` = '" .$DatensatzID"'";
    mysql_query$sql );
    if (
    mysql_affected_rows() == 1)
    {
        
    // Code für alles OK


  3. #3
    TP-Member mallmis macht alles soweit korrekt Avatar von mallmis
    Registriert seit
    Nov 2005
    Beiträge
    58
    Hallo,

    danke erst mal, die mysql_affected_rows sind schon geändert, danke für den Hinweis.

    Die $ausgabe ist definiert:



    PHP-Code:
    // letzte id aus Datenbank aufrufen
        
         
    $abfrage "SELECT MAX(id_bez) FROM bilder";
         
    $max mysql_query($abfrage);
         
    $ergebnis mysql_fetch_array($max);
         
    $ausgabe $ergebnis[0]; 

    $bilder_dump gibt mit var_dump aufgerufen folgendes aus:

    NULL

    Ich kapiere es nicht, es wird nichts ausser einer NULL übergeben. Komisch nur, daß ja alles beim eigentlichen Upload Script klappt?

    Vielen Dank im Voraus schon mal für die Hilfe.

    mallmis

  4. #4
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hi,

    wo kommt denn $key her, daß Du im $_FILES Array ansprichst? Auch das hier...
    Code:
    <input type="file" name="datei[$i]" id="datei">
    ...wird wohl nicht so funktionieren. Zumindest nicht auf die Art wie Du es benutzt, weil es hier nicht $i hochzählt wie erwartet, sondern tatsächlich immer wieder das Dateifeld überschreibt. Um ein Array zu bekommen musst Du...
    Code:
    <input type="file" name="datei[]" id="datei">
    ...benutzen.

    Zum debuggen empfiehlt es sich das Error_Reporting einzuschalten und auch auf unterdrückende Techniken (wie etwa @ vor dem move_uploaded_file) zu verzichten, damit man an den Fehlermeldungen sieht woran es hängt. Ausserdem sollte man erst mal mit...
    PHP-Code:
    echo "<pre>" .print_r$_POSTtrue ). "</pre>";
    echo 
    "<pre>" .print_r$_FILEStrue ). "</pre>"
    ...überprüfen was tatsächlich vom Formular übermittelt wurde.
    Dann geht's weiter mit dem zusammenstellen des Queries, die man erst mal mit echo ausgibt und dann direkt via phpMyAdmin testet, um zu sehen ob es zu Fehler kommt.

+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

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