Werte eines arrays vergleiche und dann löschen oder hinzufügen

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

  • Werte eines arrays vergleiche und dann löschen oder hinzufügen

    Hallo zusammen,

    ich hab emal wieder ein Problem, bei dem ich nicht auf den Lösungweg komme. Hier mal die Funktionsbeschreibung:

    Über ein Formular können checkboxen gesetzt werden. Die id's der boxen werden in einem array gespeichert. Nun kann es vorkommen, das der User nach verlassen der Seite nochmals auf diese zurückkommt und die gesetzten checkboxen verändert. Sprich, welche die gesetzt waren sind dann nicht mehr gesetzt, es sind neu hinzugekommen oder es ist alles beim alten gebleiben.
    Problem ist nun, ich muss ja das array aktualisieren. Dies habe ich folgendermaßen versucht:

    PHP-Code:
    #Alle ankommenden Werte stehen in $_POST['messung']
    $inhalt count($_POST['messung']);
    for(
    $i 0$i $inhalt$i ++)
    {
        
    #ID ist schon im array => kein Änderungen vornehmen
        
    if(in_array($_POST['messung'][$i], $_SESSION['messung'])
        {
            echo 
    "Es wurde nichts geaendert";
        }
        
    #ID ist noch nicht im Array => ID dem array hinzufügen
        
    elseif(!in_array($_POST['messung'][$i], $_SESSION['messung'])
        {
            
    $query "SELECT * FROM " $_SESSION['stationsart']  . " WHERE id = '".$_POST['messung'][$i]."'";    
            
    $result mysql_query($query);
            if (!
    $result)
            {
                die (
    'Ungültige Abfrage: ' mysql_error());
            }    
            while(
    $row mysql_fetch_assoc($result))
            {
                
    $messungen[$i] = $row['position'];                
            }
        
            
    #gewählte Checkboxen im Array für späteres speichern ablegen
            
    $_SESSION['messung'][] = $messungen[$i];
        }
        
    #ID ist schon im array, wird aber jetz nicht mehr benötigt => aus arrray löschen
        
    elseif(in_array($_POST['messung'][$i]
        {
        
        }

    Mein Problem ist nun, dass ich nichtweiß, wie ich den dritten Fall, das ein Eintrag nicht mehr gebraucht wird und entfernt werden muss, abfangen kann.
    Ich denke mal die ersten beiden Fälle sind ok, aber vielleicht bin ich ja auch da völlig auf dem Holzweg und es gibt einen ganz anderen Ansatz dafür.

    Bitte um eure Hilfe ! ! !


    Danke und Gruß

    Michael
    Gruß

    Michael

  • #2
    Problem ist nun, ich muss ja das array aktualisieren.
    Wo ist denn das Problem? Du musst doch nur noch mal die entsprechenden POST-Werte auswerten. Dazu brauchst du doch die folgenden Bedingungen nicht:
    PHP-Code:
    if(in_array($_POST['messung'][$i], $_SESSION['messung'])
    {
      echo 
    "Es wurde nichts geaendert";
    }
    #ID ist noch nicht im Array => ID dem array hinzufügen
    elseif(!in_array($_POST['messung'][$i], $_SESSION['messung'])
    {
      ...

    Statt dessen baust du das Array $_SESSION['messung'] einfach neu auf aus den Werten aus $_POST['messung'].

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Danke Peter, das was das was ich hören musste. Da hatte ich mich in etwas verrannt und wollte mit ner Kanone auf Spatzen schiessen.
      Habs jetzt so geregelt und das funktioniert.

      PHP-Code:
      #array für neuschreiben löschen
      unset($_SESSION['messung']);

      #aktuellen Werte übernehmen und im array ablegen        
      $inhalt count($_POST['messung']);
      for(
      $i 0$i $inhalt$i ++)
      {
          
      $query "SELECT * FROM " $_SESSION['stationsart']  . " WHERE id = '".$_POST['messung'][$i]."'";    
          
      $result mysql_query($query);
          if (!
      $result)
          {
              die (
      'Ungültige Abfrage: ' mysql_error());
          }    
          while(
      $row mysql_fetch_assoc($result))
          {
              
      $messungen[$i] = $row['position'];                
          }
              
          
      #gewählte Checkboxen im Array für späteres speichern ablegen
          
      $_SESSION['messung'][] = $messungen[$i];

      Nochmals vielen Dank Peter. Ohne den Hinweis würde ich wahrscheinlich morgen noch da dran sitzen.
      Gruß

      Michael

      Kommentar


      • #4
        Hallo Michael,

        der Code ist anfällig für SQL Injections. Ich empfehle einen Blick auf mysql_real_escape_string.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Hi,

          das weiß ich, kommt auch in der Endversion auch noch rein.
          Hatte das der Einfachheit halber in der Testversion nicht drin.
          Gruß

          Michael

          Kommentar


          • #6
            Hi,

            sicher das du Queries in einer for-Schleife machen willst?

            Ich würde das nochmal überdenken ob du das nicht mit IN() oder einer geschickten WHERE Formulierung in einer Query lösen kannst.

            PHP-Code:
            $query "SELECT foo FROM tab WHERE id IN(".implode(','$_POST['messung']).")"
            Es sollte natürlich weiterhin auf Injections geachtet werden.

            Kommentar


            • #7
              Wäre auch ne Möglichkeit.
              Was spricht denn gegen die for-Schleife ?
              Gruß

              Michael

              Kommentar


              • #8
                Was spricht denn dafür?

                Zum Vergleich: Wenn du Sonntags 5 Brötchen vom Bäcker holst, gehst du einmal hin und läßt dir eine Tüte geben. Warum gehst du nicht fünfmal hin und trägst je ein Brötchen nach Hause? Na klar, weil es dir zu viel Mühe macht und zu lange dauert.

                Kommentar


                • #9
                  Das klingt plausibel
                  Werde ich dann so übernehmen.

                  Danke !
                  Gruß

                  Michael

                  Kommentar

                  Lädt...
                  X