Ankündigung

Einklappen
Keine Ankündigung bisher.

Bilder in der Datenbank speichern, wenn sie ausgewählt wurden.

Einklappen

Neue Werbung 2019

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

  • #16
    Du hast zudem ein Sprachgewirr drinnen, das du mal aufräumen solltest.
    Code:
    CREATE TABLE `auktion_images`
    Auktion auf englisch, ergibt dann auction_images

    Da du den Rest in der Tabelle objekte aber auch auf deutsch und klein geschrieben hast, solltest du dich auch konsequent daran halten Dann eben
    Code:
    FILE_NAME zu `datei_name` varchar(255) COLLATE utf8_bin NOT NULL,
    FILE_SIZE zu `datei_groesse` varchar(255) COLLATE utf8_bin NOT NULL,
    FILE_TYPE zu `datei_typ` varchar(255) COLLATE utf8_bin NOT NULL
    und password wird zu passwort, allein da hätte ich schon mehrmals ein Tippfehler drin.
    Das Passwot-Feld brauchst du auch nur ein mal. Halte die Benutzer nicht für blöd.
    PHP-Code:
    <?php unlink('image_uploads/'.$reihe["FILE_NAME"]); ... $query "INSERT into auktion_images(`ANGEBOT_ID`, `FILE_NAME`, `FILE_SIZE`,`FILE_TYPE`) VALUES(:ANGEBOT_ID, :FILE_NAME, :FILE_SIZE, :FILE_TYPE)"$stmt $pdo->prepare($query); ... ?>
    hier löscht du erst das Bild, aber wenn dein insert fehl schlägt ist auch das Bild weg.
    Lösche das Bild im Ordern erst, wenn du auch sichergestellt hast, dass die Angaben in der DB aktualisiert worden sind. Prüfe dazu auch den Errorcode oder den Rückgabewert vom insert.

    Ich sehe auch keine Verbindung zwischen dem gespeicherten Objekt und dem Bild.
    Wenn etwas geändert werden soll, wie beispielsweise der Titel, aber der Rest nicht, also auch nicht die Bilder, dann ist der Parameter nicht gesetzt, dies prüfst du mit isset und nicht mit empty
    Siehe den Fehler hier
    PHP-Code:
        !empty($_FILES['files']['tmp_name']) 
    Für update gilt folgendes:
    Erst id holden, damit du den richtigen Datensatz in der Tabelle objekte änderst.
    Zugehörige Bildid holen und merken, für Tabelle auktion_images.
    Dann schauen ob submit gesetzt wurde, also wurde was abgeschickt.
    Jetzt schaust du was zu ändern ist.
    Also titel, plz, oder neues Bild Dann update der Tabelle objekte mit SQL ist das i.O. gibt execute True zurück, erst jetzt schaust du ob auch ein Bild dabei ist.
    Wenn nicht dann ist dein update fertig,
    Sonst anhand der Bildid den alten Bildnamen auslesen und merken z.B. in $old_image.
    Bildwerte in DB speichern(update) mit neuem Namen natürlich, anhand der Bildid.
    Bild selbst im Bilderverzeichnis ablegen(neuen Namen hast du ja)
    Dann erst altes Bild löschen, der Name steht in $old_image. Mann könnte auch das Bild mit gleichen Namen überschreiben im Bildverzeichnis, das nur damit keiner meckert.
    Jetzt ist der upload abgeschlossen und du kannst das neue Bild mit den zugehörigen Objektdaten dem Benutzer zur Kontrolle anzeigen.

    Programmieren überlasse ich dir.

    Kommentar


    • #17
      Danke.

      Das Problem war, dass $_FILES nicht empty() ist:

      var_dump() erzeugt folgendes Ergebnis:

      array(5) { ["name"]=> array(1) { [0]=> string(0) "" } ["type"]=> array(1) { [0]=> string(0) "" } ["tmp_name"]=> array(1) { [0]=> string(0) "" } ["error"]=> array(1) { [0]=> int(4) } ["size"]=> array(1) { [0]=> int(0) } }
      PHP-Code:
      if(isset($_POST['submit']) && empty($_FILES['files']['tmp_name'][0])){ //hier sollen nur die "nicht Bilddateien" upgedated werden 
      PHP-Code:
      if(isset($_POST['submit']) && !empty($_FILES['files']['tmp_name'][0])){ //hier sollen alle Dateien upgedated werden 
      Aus PHP Manual:
      UPLOAD_ERR_NO_FILE Wert: 4; Es wurde keine Datei hochgeladen.





      Kommentar


      • #18
        Prima, das du selbst dahinter gekommen bist.

        Dennoch vermisse ich in der Tabelle objekte eine Bild-ID die auf das Bild in der Tabelle auction_images verweist.
        Woher weist du welches Bild zu welchem Objekt gehört?

        Kommentar


        • #19
          Ich speicher die ANGEBOT_ID bei jedem Bild in der Tabelle auktion_images:

          Code:
          if(isset($_FILES['files'])){
              $query = "INSERT into auktion_images(`ANGEBOT_ID`, `FILE_NAME`, `FILE_SIZE`,`FILE_TYPE`)
                       VALUES(:ANGEBOT_ID,:FILE_NAME,:FILE_SIZE,:FILE_TYPE)";
              $stmt  = $pdo->prepare($query);

          Kommentar

          Lädt...
          X