frage zu foreach

Kalito

Erfahrenes Mitglied
hallo

mittels einer while-schleife lade ich alle meine Mitglieder aus und bilde zu jedem Mitglied eine checkbbox. Hiermit kann ich einen bestimmten Status einstellen, indem ich den Hacken setze oder entferne. das laden aus der Db, ob der Haken gesetzt ist und das eintragen in die DB, wenn ein Haken gesetzt wurde, ****t wunderbar. Nur wie bekomme ich es hin, dass diejenigen ausgetragen werden, wo ich den Haken rausgenommen habe.

Hier lade ich die Liste
PHP:
while($einsatz=mysql_fetch_array($mitglieder)){
     $checkPassiv = mysql_query("SELECT * FROM ".DB_TABLE_PA." WHERE MID='".$einsatz['MID']."' AND bis='00.00.00' ", $verbindung);
     
     $check=mysql_num_rows($checkPassiv);
       echo '<tr>';
          echo '<td>'.$einsatz['vorname'].' '.$einsatz['nachname'].'</td>';
         echo '<td>
             <input type="hidden" name="mid[]" value="'.$einsatz['MID'].'"/>
             <input type="hidden" name="cmail[]" value="'.$einsatz['mail_ci'].'" />
                  <select name="status[]">
                            <option value="activ">Mitglied</option>
                            <option value="alumni">Alumni</option>
                <option value="out">Austritt</option>
             </select>
             </td>
         <td>';
             if ($check==1) echo '<input type="checkbox" name="passiv[]" value="'.$einsatz['MID'].'" checked="checked"/>';
            else echo '<input type="checkbox" name="passiv[]" value="'.$einsatz['MID'].'" />';
            echo'</td>
                                                  ' ;

          echo'</tr>';
}

und hier die forschleife
PHP:
        foreach($_POST['passiv'] as $passiv){
            //Ermitteln der Mitglieder, die noch nicht passiv sind und in DB eintragen
            if(mysql_num_rows(mysql_query("SELECT * FROM ".DB_TABLE_PA." WHERE MID='".$passiv."' AND bis='00.00.00'", $verbindung))==0){
                mysql_query("INSERT INTO ".DB_TABLE_PA." (MID, von) VALUE ('".$passiv."', '".$day.".".$month.".".$year."')", $verbindung);
            }

        }

Wie löse ich dies am besten?
 
Wie sieht denn ein "Austragen" bei dir aus? Das Löschen einer Zeile in der DB-Tabelle?

Übrigens ist dein zweites Skript nicht gerade sicher, da du (anscheinend) die übertragenen Variablen direkt in das MySQL-Query einfügst. Theoretisch könnte jemand diese Variablen manipulieren und das sollte man verhindern.
Siehe dazu auch mein Tutorial, Punkt 3: Sicherheit in PHP-Codes schaffe
 
es ist ja nicht das komplette Script. Hab davor noch andere Sicherheitsmechamisnen. Die Tabelle ist wiefolgt aufgebau:

Id | MID | von | bis

Beim eintrag wird die Zeile mit 00.00.00 gefüllt. Wenn ich jetzt für eine bestimmte person den Status wegneheme (also austrage), dan wir das Feld bs von der zeile mt demaktuellen Datum geändert
 
Wenn ich das richtig verstehe willst Du einfach den Inhalt der Zelle ändern?

Das geht mit UPDATE


Code:
$sql = "UPDATE
       `tabellennamen`
SET
    `spalte` = 'Neuer Wert'    //(Bei dir ist die Spalte wohl Datum****)
WHERE
    ID = '5'    //(Kenn Deine Bedingung nicht, musst Du halt ändern)
";


Hoffe konnte Dir weiterhelfen
 
Wie ich in einer DB update ist nicht mein Problem, aber danke ;)

Ich versuche es nochmal zu erklären.

Ich habe eine Tabelle Mitglieder. Diese ist mit den Entitys A, B, C, D, E gefüllt.

Des weiteren habe ich eine Tabelle passiv. In der steht nur A drinnen. Jetzt lade ich also in meinen Script alle Mitglieder und setze neben denen eine Checkbox. Da A aktuell in der passivl-Tabelle das Datum 00.00.00 ist wird die checkbox neben A auf checked gesetz. So jetzt setz ich einen Haken neben B und C und nehme den Haken von A weg. Jetzt ermittle ich mittels einer foreachschleife alle Checkboxen, die gesetzt wurden (hier B und C) und trage sie in die DB ein.
Aber wie kann ich nun diejenigen ermittel, die in der DB sind, aber nicht in der foreach (in dem Fall A)?
 
Ich hoffe ich habe das Problem verstanden:

Setze doch die Variablen A, B , C ... alle auf unchecked. Dann durchläufst Du die foreach-Schleife und änderst die Variablen in Checked, die gesetzt sind.
Und dann fragste noch per if ab welche immernoch auf unchecked stehen.

Sorry wenn ich Dein Problem immernoch nicht erfasst habe ;)
 
schon ok ;)

um es so einfach wie möglich zu machen.

Ich möchte gerne all diejenigen ermitteln, die einen bestimmten Wert in der DB haben, aber nicht in der forschleife vorkommen
 
Hallo,

ich denke mal, das bekommst Du, so auf den ersten Blick, hin, wenn Du Dir den Zustand "vorher" und "nachher" zwischenspeicherst (z.B. in Arrays) und diese dann im Anschluss auf Unterschiede vergleichst. Denn wenn Du den "Wert" Deiner Checkboxen in die DB eingetragen hast, fehlt Dir so die Vergleichsmöglichkeit, was sich geändert hat.
Ich stell das mal vereinfacht dar: Du liest die Tabelle(n) ein:
$vorher[]=$einsatz(mysql_fetch_assoc..... // Ich stehe mehr auf assoziative Arrays
Jetzt setzt Du Deine Checkboxen und speicherst sie ab. Nun liest Du die Tabelle(n) erneut ein: $nachher[]=$einsatz(mysql_fetch_assoc.....
Nun kannst Du die Werte vorher/nachher vergleichen und erhältst als Ergebnis alle, die in der foreach() nicht enthalten waren, denn bei denen ist $vorher[n] == $nachher[n] (sind also nicht verändert worden)! Du kannst natürlich auch nur auf ein einziges Feld prüfen ($vorher[n]['id'] != $nachher[n]['id']).

Hoffe mal, das war's

Greetz ckw

Vergessen: Grundvoraussetzung ist natürlich, dass das Einlesen in beiden Durchgängen identisch ist. Soll heißen, die SQL-Abfrage ist sicherheitshalber um "ORDER BY id" (oder wie auch immer der Primärschlüssel heißt) zu erweitern!!
 
Zuletzt bearbeitet:
Zurück