Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Reihenfogeproblem beim Anlegen von Bildern im Newsbereich

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Reihenfogeproblem beim Anlegen von Bildern im Newsbereich

    Moin, Moin,

    ich versuche gerade im Adminbereich einer Seite einen News-Bereich anzulegen. Dabei soll eine News folgende Elemente enthalten (Title, Text und Bild). Jede neu erstellt News bekommt dabei eine ID. Dies funktioniert alles prima.

    Nun habe ich jedoch das Problem, dass sich die Bildnamen überschneiden können, wenn man zwei News anlegt und dabei Bilder hochläd, die den gleichen Namen haben. Jetzt hatte ich mir vorgestellt, dass ich die NewsId mit in den Bildnamen übergebe. Dies ist auch kein Problem. Jedoch muss ich nun zum Anlegen einer News zwei SQL-Statements absetzen. Gibt es hier eventuell eine elegantere Lösung?

    Anbei ein paar grobe Code-Schnipsel

    PHP-Code:
        // Anlegen der News nur Title und Text werden per SQL gespeichert
        
    $newsID NewsFactory::createNews($title,$text,$image);
        
        
    //Erstellen des Bildnames incl. Pfad und Anlegen auf dem Server
        
    $ImageName $path.$newsID.$title.".".$imageName['extension'];
        
    move_uploaded_file($_FILES["image"]["tmp_name"],$ImageName);
        
        
    // Bildpfad in die Datenbank zur NewsID ablegen
        
    NewsFactory::imageToNewsId($newsID,$imageName); 
    Vielen Dank im voraus


  • #2
    Da wir Deinen Klassen nicht kennen, kann man hier wohl kaum eine sinnvolle Antwort geben.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Um den Code geht es mir dabei eigentlich nicht, eher um den Aufbau und die Reihenfolge des Ablaufs beim Anlegen. Ich versuchte trotzdem mal die Klassen zu kürzen, so dass ich die hier reinstellen kann. Aktuell wären diese wohl zu Umfangreich.

      Kommentar


      • #4
        So, ich denke ich habe eine Lösung. Zumindest ist Sie aus meiner Sicht okay.

        Als ersten Schritt lege ich die Daten in der Datenbank über die Funktion createNews ab, im Zweiten Schritt kümmer ich mich um den Upload der Datei mit der Funktion uploadBaseNewsImage und als letzten Schritt aktualisiere ich die Bild-Url in der Datenbank über die Funktion uploadBaseNewsImage.

        Anbei der dazugehörige Code. Für jegliche Verbesserungsvorschläge bin ich offen.

        PHP-Code:
            $title $_POST['title'];
            
        $text $_POST['text'];
            
        $url $_POST['url'];
            
        $active $_POST['active'];
            
        $image "";
            
        $categoryId$_POST['categoryId'];
            
        $send $_POST['send'];
            if (
        $formReload->easycheck()) {
                
        $newsId NewsFactory::createNews($title,$text,$url,$active);
                if (isset(
        $newsId)){
                    
        $imageNamepathinfo($_FILES["image"]["name"]);
                    
        $extension $imageName['extension'];
                    
        $tmpName $_FILES["image"]["tmp_name"];
                    
        $imageUrl ImageHelper::uploadBaseNewsImage($tmpName,$extension,$title,$newsId);
                    if (isset(
        $imageUrl)){
                        
        $isUpdateImageToNews NewsFactory::updateImageToNews($newsId,$imageUrl);
                        if(
        $isUpdateImageToNews){
                           echo 
        "Folgende News wurden erstellt: <br /><strong>".$title."</strong>";
                        }else{
                            
        $error 3;
                        }
                    }else{
                        
        $error 3;
                    }
                }
                if (isset(
        $error)) {
                    echo 
        "Es ist ein Fehler aufgetreten. Fehlercode".$error;
                }
            } else {
                echo 
        "Sie haben einen Reload gemacht.";
            } 

        NewsFactory
        PHP-Code:
        class NewsFactory {
            public static function 
        createNews($title,$text,$url,$active){
                include 
        ROOT."config.php";
                if (
        $title != NULL) {
                    
        $db = new MySql;
                    
        $db->connect($dbHost$dbDatabase$dbUser$dbPassword);
                    
        // insert News

                    
        $sql "INSERT INTO ".$tabNews." (title, text, url, active) VALUES ('"
                    
        .Functions::stringToDb($title)."','"
                    
        .Functions::stringToDb($text)."','"
                    
        .Functions::stringToDb($url)."','"
                    
        .Functions::stringToDb($active)."')";
                    
        $result $db->query($sql);
                    if (!
        $result) {
                        
        //error
                        
        throw new Exception("Error creating News '".$title."'");
                    }
                    
        $resultId $db->getLastInsertId();
                    
        $db->disconnect();
                    return 
        $resultId;
                }
            }
            public static function 
        updateImageToNews($newsId,$imageUrl){
                include 
        ROOT."config.php";
                if (
        $newsId != NULL || $imageUrl =! NULL) {
                    
        $db = new MySql;
                    
        $db->connect($dbHost$dbDatabase$dbUser$dbPassword);

                    
        $sql "UPDATE ".$tabNews." SET
                    image='"
        .Functions::stringToDb($imageUrl)."'
                    WHERE newsId='"
        .$newsId."'";
                    
        DebugHelper::out($sql,"Upload Bild zur News","NewsFactory");
                    
        $result $db->query($sql);
                    if (!
        $result) {
                        
        //error
                        
        throw new Exception("Error updating News '".$title."'");
                    }
                    
        $resultId $db->getLastInsertId();
                    
        $db->disconnect();
                    return 
        true;
                }
            } 
        ImageHelper
        PHP-Code:
        class ImageHelper {

            public static function 
        uploadBaseNewsImage($image,$extension,$name,$newsId){
                include 
        ROOT."config.php";

                
        FolderHelper::createFolder($sourceImageNews.$newsId);
                
        $imageUrl $sourceImageNews.$newsId."/".strtolower($name).".".$extension;
                echo 
        "Aufruf:".$imageUrl;
                
        move_uploaded_file($image,$imageUrl);
                return 
        $imageUrl;
            }

        Kommentar


        • #5
          Was mir auf jeden Fall mal extrem ins Auge gestochen ist, ist das jede statische Methode ROOT."config.php"; einbindet??? Ist doch pfui! Wie wärs wenn du es global einbindest bzw wenigstens per include_once machst.

          Kommentar


          • #6
            include_once, warum eigentlich nicht.

            PS: Cooler Blog, ich wollte auch schon die ganze Zeit meinen Facebook Account löschen.

            Kommentar

            Lädt...
            X