Ankündigung

Einklappen
Keine Ankündigung bisher.

Per Switch Case ermitteln ob Array Werte empty sind?

Einklappen

Neue Werbung 2019

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

  • Per Switch Case ermitteln ob Array Werte empty sind?

    Heyho

    Ich habe ein Problem. Nämlich wollte ich per Switch Case ermitteln ob Werte meines Arrays leer sind. Nur das klappt irgendwie nicht ganz.

    Hier ein Teil meines Codes:

    Code:
    $datensaetze = explode("\r\n", $_POST["datensaetze"]);
    
                for($x = 0; $x < count($datensaetze); $x++){
    
                    $datensatz = explode("|", $datensaetze[$x]);
    
                    switch (true){
                        case (isset($datensatz[0])):
    
                        case (isset($datensatz[1])):
                            break;
    
                        case (isset($datensatz[2])):
                            break;
    
                        case (isset($datensatz[3])):
                            break;
    
                        default:
                            break 1; //Wenn nichts gesetzt ist, soll For die nächsten Daten abarbeiten...
                    }
    
    //... Ganz viel anderer Code....
    Im Endeffekt soll überprüft werden ob Datensatz[0] und Datensatz[1] gesetzt wurde (Datensatz 3 und 4 sind Optional). Wenn nichts gesetzt wurde, soll die Schleife die nächste Zeile abarbeiten.
    Leider funktioniert das Irgendwie nicht...case (isset($datensatz[0])) wird bei mir immer ausgeführt, selbst wenn er eigentlich leer ist.

    Schonmal Danke im Vorraus

    Edit: Mit empty() habe ich es auch schon versucht. Aber irgendwie klappts nicht.

  • #2
    PHP-Code:
      $datensaetze explode("\r\n"$_POST["datensaetze"]); 
    Gebe mal mit var_dump() an, was in $datensätze drin steht und teile uns das Ergebnis mit.

    Kommentar


    • #3
      Zitat von protestix Beitrag anzeigen
      PHP-Code:
       $datensaetze explode("\r\n"$_POST["datensaetze"]); 
      Gebe mal mit var_dump() an, was in $datensätze drin steht und teile uns das Ergebnis mit.
      Wenn ich jetzt nur die nötigen Daten angebe kommt das bei raus:

      Code:
      array(2) { [0]=> string(15) "test1|Passwort1" [1]=> string(15) "test2|Passwort2
      Mit
      Code:
      $datensatz = explode("|", $datensaetze[$x]);
      wird jeder String (also jede Zeile) in "datensaetze" zu einem Array formatiert und die Wörter per "|" in einzelne Strings geteilt. Das ganze lief auch schon problemlos.

      Später werden dann per:
      Code:
      mysqli_query($db, "INSERT INTO account (`Wert1`, `Wert2`, `Wert3`, `Wert4`) VALUES ('$datensatz[0]', '$datensatz[1]', '$datensatz[2]', '$datensatz[3]')");
      Die Daten in eine bereits existierende Account-Tabelle eingefügt und per:
      Code:
      CREATE TABLE `".$datensatz[0] ."`
                          (
                              `ID` INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                              `UID` INT (6) NOT NULL,
                              `Datum und Uhrzeit` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                              `wert1` VARCHAR(64) NOT NULL,
                              `wert2` VARCHAR(64) NOT NULL,
                              `wert3` TEXT NOT NULL,
                              `wert4` TEXT NOT NULL
                          )"
                      ) or die ("Erstellen der Tabelle fehlgeschlagen: " . mysqli_error($db));
      Wird eine Tabelle mit dem Accountname erstellt.

      Nur möchte ich jetzt eine Überprüfung einfügen ob das Format korrekt ist damit die Daten später nicht falsch übernommen werden und weitere Script die mit den Daten arbeiten mich nicht mit Fehler überfluten.

      Kommentar


      • #4
        Ich habs endlich hinbekommen
        Mein Fehler war das ich break mit continue verwechselt habe. Ich habe alles mit Break versucht und habe somit die Schleife nach einem Fehlschlag abgebrochen.
        Mein neues Switch Case sieht so aus:

        Code:
        switch (true){
                            case (empty($datensatz[0])):
                                continue 2;
        
                            case (empty($datensatz[1])):
                                continue 2;
        
                            case (empty($datensatz[2])):
                                $datensatz[2] = "N/A";
        
                            case (empty($datensatz[3])):
                                $datensatz[3] = 0;
                                break;
                            default:
                                break;
                        }
        -closed-

        Kommentar


        • #5
          Naja - nicht ganz.
          Du hast nämlich auch das issset durch empty ersetzt --> http://php.net/manual/en/types.comparisons.php

          Grundsätzlich musst die Daten vor dem Eintragen in die DB auf Gültigkeit prüfen und bei Mysql auch die Maskierung beachten.
          Wenn du beides missachtest, hast du ein Sicherheitsproblem.

          Zudem ist es unsinnig für jeden Datensatz/Benutzer, eine eigene Tabelle zu erstellen. Die DB-Struktur sollte von anfange fest stehen und nicht zur Laufzeit geändert werden. Daten werden in Taellen abgelegt und zwar Zeilenweise, siehe Grundlagen.

          Kommentar


          • #6
            Zitat von protestix Beitrag anzeigen
            Naja - nicht ganz.
            Du hast nämlich auch das issset durch empty ersetzt --> http://php.net/manual/en/types.comparisons.php

            Grundsätzlich musst die Daten vor dem Eintragen in die DB auf Gültigkeit prüfen und bei Mysql auch die Maskierung beachten.
            Wenn du beides missachtest, hast du ein Sicherheitsproblem.

            Zudem ist es unsinnig für jeden Datensatz/Benutzer, eine eigene Tabelle zu erstellen. Die DB-Struktur sollte von anfange fest stehen und nicht zur Laufzeit geändert werden. Daten werden in Taellen abgelegt und zwar Zeilenweise, siehe Grundlagen.
            Jetzt wo du es sagst... Frage ich mich auch warum ich eigentlich für jeden Nutzer eine extra Tabelle anlege. Lag wohl an der Müdigkeit das ich unüberlegt gehandelt habe. Denn ich habe die letzten 2 Tage wegen diesem Projekt nur insgesamt 6h geschlafen.

            Mit diesem Switch Case sollte das Sicherheitsproblem doch eigentlich gelöst sein?
            Selbst wenn nicht, ist es eigentlich relativ unwichtig. Da das Projekt niemals in der Öffentlichkeit landen wird. Es ist eher für den Privatgebrauch und wird später per .htaccess so oder so gesichert.

            Kommentar


            • #7
              Zitat von SunsetRL Beitrag anzeigen
              Mit diesem Switch Case sollte das Sicherheitsproblem doch eigentlich gelöst sein?
              Nein, denn du verwendest dein switch ja lediglich um zu schauen ob die Variable nicht leer ist. Den Wert daraus übernimmst du jedoch ungeprüft.

              Zitat von SunsetRL Beitrag anzeigen
              Selbst wenn nicht, ist es eigentlich relativ unwichtig. Da das Projekt niemals in der Öffentlichkeit landen wird.
              Man sollte es sich von vornherein angewöhnen, es richtig zu machen, sonst lernt du doppelt.
              Zitat von SunsetRL Beitrag anzeigen
              Es ist eher für den Privatgebrauch
              Liest man immer wieder, aber auch da gilt safety first.
              Zitat von SunsetRL Beitrag anzeigen
              und wird später per .htaccess so oder so gesichert.
              Was hat eine htaccess Datei mit der Absicherung des Scriptes zu tun. $_Post Parameter bleiben davon unberührt.
              Kontextwechsel ist zudem immer zu beachten.

              Kommentar

              Lädt...
              X