Ankündigung

Einklappen
Keine Ankündigung bisher.

Pic-Upload funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • Pic-Upload funktioniert nicht

    Hallo, ich hab ein Pic-Upload versucht mit Php zu schreiben, doch irgendwie wird das Bild nicht hochgeladen und auch keine Fehlermeldung wird ausgegeben.

    Hier der Code:
    PHP-Code:
    <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="datei" value="Durchsuchen"><br>
    <input type="submit" value="Hochladen">
    </form>

    <?php
    if(isset($_POST['submit'])) {
    $datatyp GetImageSize($_FILES['datei']['tmp_name']);
    if(
    $datatyp[3] != 0)
       {

       if(
    $_FILES['datei']['size'] <  2000000)
          {
          
    move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$_FILES['datei']['name']);
          echo 
    "Das Bild wurde erfolgreich nach /upload/".$_FILES['datei']['name']." hochgeladen";
          }

       else
          {
             echo 
    "Das Bild darf nicht größer als 2 MB sein ";
          }
        }

    else
        {
        echo 
    "Falscher Dateityp, bitte nutze .png, .jpg oder .gif!";
        }
    }    
    ?>

  • #2
    Dein Submit Button hat keinen Namen "submit" unter dem Daten geliefert werden könnten.

    Betreibe Debugging, in der ersten Stufe das Ausgeben von Daten an relevanten Stellen!
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Debuggen werde ich morgen.
      Den Namen des Submit Button hab ich eingefügt, nun werden die Fehlermeldungen fälschlicherweise ausgegeben!

      Kommentar


      • #4
        Debuggen werde ich morgen.
        Den Namen des Submit Button hab ich eingefügt, nun werden die Fehlermeldungen fälschlicherweise ausgegeben!

        Kommentar


        • #5
          Die korrekte Abfrage ist nicht
          PHP-Code:
          if($datatyp[3] != 0
          sondern
          PHP-Code:
          if($datatyp[2]) 
          Deine Hausaufgabe: Finde heraus, wieso

          Kommentar


          • #6
            Zitat von monolith Beitrag anzeigen
            [...]
            PHP-Code:
            if(isset($datatyp[2])) 
            [...]
            Wir wollen doch keine Notices .
            [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

            Kommentar


            • #7
              Es ist nicht mehr zeitgemäß, Anwendungslogik und Ausgabelogik zu kombinieren. Dadurch leidet die Wartbarkeit beider Komponenten. In der Regel folgen in PHP geschriebene Applikationen daher dem EVA-Muster, welches einen leicht nachvollziehbaren Datenfluss ermöglicht, besser wartbare Applikationen erzeugt und leichter von anderen Entwicklern verstanden wird. In der PHP-Welt hat sich hierauf aufbauend das (häufig falsch interpretierte) MVC-Muster [1] etabliert (siehe auch DCI oder ADR). Ganz einfach gesagt handelt es sich bei dem EVA-Muster um eine Aufteilung der Aktionen "Auswertung der Eingabeparameter", "Verarbeitung der damit verknüpften Anwendungslogik" und "Erzeugung und Übermittlung der Ausgabe". Oder vereinfacht: Erst Daten sammeln, dann daraus die Darstellung erzeugen und ausgeben. Die Verwendung einer Templateengine (mit Layout-Support) ist dafür Empfehlenswert - jedoch aber keine Voraussetzung.

              Kommentar


              • #8
                @monolith
                Es funktioniert.
                Ich glaube mein Versuch heißt soviel wie, wenn der Dateityp eins von den 3 entspricht und nicht unbekannt ist...
                Und deins heißt duviel wie wenn eins von den dreien den Dateityp entspricht?

                Sry...ich verstehe es einigermaßen, kann es aber nicht wirklich erklären.

                Kommentar


                • #9
                  Die Doku klärt das auf: [url]php.net/manual/de/function.getimagesize.php#refsect1-function.getimagesize-returnvalues[Url]

                  Meins:
                  Index 2 ist eine der IMAGETYPE_XXX-Konstanten entsprechend des Typs der Grafik.
                  0 = Keine Grafik

                  Steht in $datatyp[2] eine Zahl > 0 dann wird das in das boolsche true umgewandelt und somit die Bedingung erfüllt.

                  Deins:
                  Index 3 ist eine Zeichenkette mit dem Attributen Breite und Höhe in der Form height="yyy" width="xxx" zur Verwendung in einem IMG-Tag.
                  Index 3 und Index 2 haben nicht direkt miteinander zu tun, da geht's um Unterschiedliches.
                  Dein Vergleich != 0 ist daher aus semantischer Sicht sinnfrei.
                  Zitat von ChristianK Beitrag anzeigen
                  Wir wollen doch keine Notices .
                  Übrigens: Sicher, dass das eine gibt? Ich habe das nochmal in einem anderen Zusammenhang überprüft und mir wäre kein Fall bekannt, bei dem der Schlüssel nicht existiert. Ich weiß nur, getimagesize mag leere Dateien nicht - aber das lässt sich bereits im Vorfeld durch einen try-catch-Block abfangen.

                  Kommentar


                  • #10
                    Im Falle, dass es sich um kein Bild handelt, kommt folgendes zurück:
                    Code:
                    php > var_dump(getimagesize('soapui-settings.xml'));
                    bool(false)
                    Kein Warning, deshalb danach eine Notice, da kein Array (und somit kein Index).
                    Mein Kommentar war im Kontext, der den TE erstellt hat. Mit seinen Kenntnissen erwarte ich kein try-catch-Block rundherum. Bei dir (monolith) würde ich eine Abfrage, ob die Datei existiert und ob es sich tatsächlich um ein Bild handelt, erwarten.
                    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                    Kommentar


                    • #11
                      Ok, wie sich herausgestellt hat, bin ich in eine Falle getappt. Ich habe es nur in Laravel getestet und das gibt keine Notice aus.

                      Reicht
                      Code:
                      isset($datatyp[2])
                      dann sogar schon aus und man kann auf die Überprüfung des eigentlichen Bildtyps verzichten?

                      Kommentar


                      • #12
                        Danke euch für die Hilfe.

                        sry für die späte Antwort, hab viel in der Schule zu tun

                        Kommentar


                        • #13
                          Ein spätes Danke ist auch ein Danke.

                          Kommentar

                          Lädt...
                          X