if nur wenn Array nicht leer ist

  • Hallo


    Ich möchte ein INSERT INTO machen und das in einer if-Schleife.


    Die Werte die ich in die Datenbank schreiben möchte stehen in einem Array. Das funktioniert ganz gut. Nur macht er mir, wenn nichts im Arrray steht, einen leeren Datensatz


    Wie frag ich ab ob im Array etwas steht.


    PHP
    if ( $_POST ['abfesendet'] == "1" AND $MeinArray != "")
    {
       INSERT INTO....
    }


    Was mach ich falsch?


    Gruss


    Phips_CH

  • Probier mal

    PHP
    if ($_POST["abgesendet"] AND $MeinArray[0]) {
        // SQL Query
    }

    Heißt soviel wie WENN der Key "abgesendet" des Arrays $_POST UND der erste Key des Arrays $Mein Array Existieren, DANN .... Wenn du mit der ersten Bedingung nur prüfen willst, ob abgesendet wurde, reicht sogar nur ein "$_POST", ohne Schlüsselangabe.

  • Ja etwa so hab ich mir das auch vorgestellt.


    Aber leider funktioniert es noch nicht


    Mein Array ist ein Mehrdimensionales Array. In einem Array stehen die Werte aus vier Feldern.


    Das Hab ich schon versucht. Geht nicht. ;)


    PHP
    if ($_POST["abgesendet"] AND $MeinArray[0][0]) 
    {
         // SQL Query 
    }
  • PHP
    isset($_POST['abgesendet'])

    prüft, ob die Ebene 'abgesendet' in $_POST gesetzt ist (existiert)

    PHP
    empty($MeinArray)

    prüft, ob $MeinArray leer ist


    Achtung - folgenes wird immer als leer gewertet:


    "",
    0, 0.00,
    "0", "0.00",
    der wert FALSE,
    der wert NULL,
    undefinierte variablen



    Prüfen, ob etwas NICHT leer ist:

    PHP
    if(!empty($var))
    // oder
    if(empty($var) === false)


    Das zeichen ! heisst soviel wie NICHT


    PHP
    if (isset($_POST['abgesendet']) AND isset($MeinArray) AND !empty($MeinArray))
    {
         // SQL Query
    }
  • Guten Morgen


    Ich hab hier mal die ganze Schleife. Vielleicht sieht jemand von euch, wieso ich immer 6 Einträge in meiner Datenbank habe, obwohl meine Arrays leer sind.



    Wenn ich mit print_r (MeinArray) ausgebe, sehe ich, dass nur die Felder etwas drin stehen haben wo ich auch etwas in die Felder geschrieben habe.


    Was mach ich falsch?


    Gruss
    Philipp

  • Du hast eine Schleife, in der Du immer wieder prüfst, ob $_POST gesetzt ist und dein array nicht leer ist.


    So macht es mehr Sinn:

    PHP
    if (isset($_POST['abgesendet']) AND isset($MeinArray) AND !empty($MeinArray))
    {
        foreach($MeinArray as $key => $value)
        {
            // ...
        } 
    }


    foreach() ist auch angenehmner. Eine for Schleife ist aber nicht falsch. Wollte nur dass Du die foreach mal siehst, falls Dus noch nicht kennst.


    BTW: such mal bei Gelegenheit nach mysqli, denn mysql (ohne i für improved) gilt als veraltet und unsicher



    EDIT:
    Die IF Abfrage ist ok, auch wenn unnötige Klammern.


    Teste mal genau was in dem Array drin steck.
    Denn ein Array wie zB:

    Code
    array (
        0 => ''
    )


    ist nicht leer

  • SO wie es bis jetzt ist, funktionier eben die if-Schleife nicht richtig.


    die for-Schleife läuft sechs mal durch,


    MeinArray sieht so aus:


    MeinArray[1][datum]
    MeinArray[1][von]
    MeinArray[1][bis]
    MeinArray[1][bemerkung]


    MeinArray[2][datum]
    MeinArray[2][von]
    MeinArray[2][bis]
    MeinArray[2][Bemerkung]


    .
    .
    .
    das ganze bis 6


    Die for-Schleife läuft diese 6 mal durch bei


    PHP
    if (isset($_POST['abgesendet']) AND isset($MeinArray) AND !empty($MeinArray))


    frägt die Schleife ab ob in dem Array was steht und sollte die Anweisung nicht ausführen, er macht es aber trotzdem.


    wenn ich mit print_r ($MeinArray) teste, ergibt es mir:


    Array
    (
    [1] => Array
    (
    [datum] => 1
    [von] => 2
    [bis] => 3
    [bemerkung] ==> 4
    )


    [2] => Array
    (
    [Datum] =>
    [von] =>
    [bis] =>
    [Bemerkung] ==>
    )


    .
    .
    .
    etc
    )

  • Wie gesagt - die Schleife gehört IN die IF Anweisung.


    Ich kann mir vorstellen, was da passiert. Du hast eine for-Schleife und sprichst $MeinArray[$i] an.
    Aber die Ebene $i existiert wohl nicht ABER das SQL-Statement wird mit ~unfefined abgeschickt.


    Es sollte:
    Wenn 'abgesendet' und array nicht leer,
    dann für jedes (foreach) in array => SQL-Statement


    Wenn Du unbedingt die for Schleife nutzen möchtest, dann prüfe extra noch ob

    PHP
    isset( $MeinArray[$i] )
  • Sorry, es funktioniert weder noch.


    Ich hab jetzt die if-Schleife mit

    PHP
    isset($MeinArray[$i]


    erweitert. Leider ohne Erfolg. Leuchtet mir aber ein. bei jedem Durchlauf ist steht da die erste Dimension des Array drin. ich möchte aber die zweite Dimension abfragen.


    Auch die foreach ab ich versucht, da das delbe. er speichert mir die auch die "leeren" Array in die Datenbank.

  • Viel hat sich eigendlich nicht geädndert.


    Vielleicht hier mal das Formular:


    Und hier meine Schleife mit dem Eintrag (Versuch mit for-Schleife):


    Und hier mein Versuch mit der foreach-Schleife:


    Bis jetzt waren beide Erfolglos.


    Gruss
    Philipp

  • beachte die Kommentare

  • Aber wieso erzeug mir das Programm denn immer noch für jedes $MeinArray einen Datensatz in der Datenbank? Auch dann wenn nichts resp. "0" drin steht?


    Mir ist aufgefallen, dass wenn ich mit:

    PHP
    print_ ($MeinArray);


    ausgebe, ist dann:


    Array
    (
    [1] => Array
    (


    Wieso steht da nicht $MeinArray? denn wenn ich mit

    PHP
    print_r ($POST);


    ausgebe, steht darunter:


    Array
    (
    [MeinArray] => Array
    (
    [1] => Array
    (



    Hat das irgend einen Zusammenhang?

  • Da steht nicht '$meinArray' sondern nur Array ... ganz normal, der Variabenname wird nicht ausgegeben.


    Verstehen kannst du es Evtl wenn du mal das hier ausgeben lässt..

    PHP
    print_r($_POST['MeinArray'];
  • OK.


    Aber wieso ich nach jedem Durchgang einen Datensatz habe, weiss ich noch immer nicht.


    Ich dacht nur vielleicht könnte dies einen Zusammenhang haben.


    Gruss


    Philipp

  • foreach -- für jedes
    for(...;$i < * ; ...) -- solange $i kleiner als ....


    Du nutzt Schleifen. Und in der Schleife stehen Anweisungen zum speichern in der Datenbank.
    Hat Dein Array zB 5 Ebenen

    Code
    array(
      0 => // ebene 1 
      1 => // ebene 2
      2 => // ebene 3
      3 => // ebene 4
      'xyz' => // ebene 5
    )


    dann hast Du 5 Durchläufe.

  • In der ersten Ebene steht die Zahl 1 - 6 und in der zweiten Ebene jeweils [datum], [von], [bis], [bemerkung].


    in der ersten Ebene steht, meiner Meinung nach, immer 1, 2, 3, 4, 5 oder 6 drin. Das könnte auch der Grund sein, wieso es auf für "leere" Array einen Datenbankeintrag gibt.
    Wenn bei [Datum], [von], [bis] nichts drin steht, möchte ich kein Eintrag. Bemerkung kann leer bleiben.

  • Ich hab in den ersten beiden Array jeweils "test1 - test8" eingetragen. Array 3, 4, 5, 6, 7 und 8 möchte ich in diesem Fall nicht in der Datenbank




    array(6) {
    [1]=>
    array(4) {
    ["datum"]=>
    string(5) "test1"
    ["von"]=>
    string(5) "test2"
    ["bis"]=>
    string(5) "test3"
    ["bemerkung"]=>
    string(5) "test4"
    }
    [2]=>
    array(4) {
    ["datum"]=>
    string(5) "test5"
    ["von"]=>
    string(5) "test6"
    ["bis"]=>
    string(5) "test7"
    ["bemerkung"]=>
    string(5) "test8"
    }
    [3]=>
    array(4) {
    ["datum"]=>
    string(0) ""
    ["von"]=>
    string(0) ""
    ["bis"]=>
    string(0) ""
    ["bemerkung"]=>
    string(0) ""
    }
    [4]=>
    array(4) {
    ["datum"]=>
    string(0) ""
    ["von"]=>
    string(0) ""
    ["bis"]=>
    string(0) ""
    ["bemerkung"]=>
    string(0) ""
    }
    [5]=>
    array(4) {
    ["datum"]=>
    string(0) ""
    ["von"]=>
    string(0) ""
    ["bis"]=>
    string(0) ""
    ["bemerkung"]=>
    string(0) ""
    }
    [6]=>
    array(4) {
    ["datum"]=>
    string(0) ""
    ["von"]=>
    string(0) ""
    ["bis"]=>
    string(0) ""
    ["bemerkung"]=>
    string(0) ""
    }
    }

  • Erstellst du das Array manuell oder sind das Daten die von einem Formular kommen?


    Wenn das Array nie leer ist, dann müsstest Du prüfen, ob eine Ebene leer ist.
    Aber das Problem sollte man schon bei der Erstellung der Daten abfangen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!