• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Post array in Verarbeitung einzelln prüfen

wessei

Neues Mitglied
Hallo an alle

Ich versuch schon seit Tagen dieses Formular zu überprüfen.
Es handelt sich um die Checkpoxen, die mit einer while() Schleife erzeugt werden und haben als Value die ID-Nummer der Nachricht.
Soweit alles gut, aber wenn ich die Daten dan weiterleite übergibt mir Post zwar alle Id-Nummern in einem Post[deleted_ID]-array.
Jetzt will ich diese ID-Nummern überprüfen ob sie wirklich Nummern sind und bin somit auf foreach() gestoßen aber leider wird mir damit nur 1 der ID-Nummern innerhalb der while() Schleife ausgegeben. Ich weis nicht wie ich dies sonnst lösen könnte.

hier mal der code vom Formular:
dieser funktioniert wunderbar
HTML:
<form name="user_pn_entfernen" action="?page=user&content=user_pn_aktion&pn=<?php echo $pn ?>&uid=<?php echo $session_user_id; ?>" method="post" accept-charset="ISO-8859-1">
 <div class="user_liste_nickname_h">Name</div>
<?php
 while($row_pn_auslesen = mysql_fetch_assoc($result_pn_auslesen)) {
?>
 <div class="user_pn_auswahl">
        <input class="checkbox" type="checkbox" name="deleted_ID[]" onclick="checkbox_checked_test('all','deleted_ID','user_pn_entfernen')" value="<?php echo $user_pn_auslesen_id; ?>">
    </div>
 <div class="u_nickname"></div>
<?php
  }
    }
?>
 <div class="user_pn_zeile_checked_auswahl">
  <input class="checkbox" type="checkbox" id="all" onclick="checkbox_checked(this.checked,'deleted_ID','user_pn_entfernen')">
 </div>
 <div class="user_pn_zeile_checked_alle_makieren"><label for="all">alle markieren</label></div>
    <input type="submit" class="submit" name="submit" value="entfernen">
</form>

und dies die Verarbeitung dessen:
angekreutzt wurden die ID-Nummern 18 , 19 , 20
PHP:
    $array = $_POST['deleted_ID'];
echo $array."_3<br>"; //ausgabe Array_3
    $array_id = implode(", ", $array);
echo $array_id."_3.1<br>"; //ausgabe 18, 19, 20_3.1
    foreach($array as $deleted_key => $deleted_id) {
echo $deleted_id."_3.2<br>"; //ausgabe 18_3.2
    xxx überprüfung
    xxx löschen
    }

ich komm nicht dahinter warum mir nur 1 der ID-Nummern innerhalb der foreach() Schleife ausgegeben wird.
implode() hab ich benutzt um zu sehen was mir übergeben wird.

währe euch sehr dankbar wenn ihr mir da helfen könnt. bin schon am verzweifeln.

mfg. wessei
 
Werbung:
Moin,

also um zu schauen was im Array ist gebe das lieber so aus

PHP:
echo '<pre>';
print_r($array);
echo '</pre>';
 
Also, wenn ich mir die Schleife so ansehe
PHP:
<?php
 while($row_pn_auslesen = mysql_fetch_assoc($result_pn_auslesen)) {
?>
 <div class="user_pn_auswahl">
        <input class="checkbox" type="checkbox" name="deleted_ID[]" onclick="checkbox_checked_test('all','deleted_ID','user_pn_entfernen')" value="<?php echo $user_pn_auslesen_id; ?>">
    </div>
 <div class="u_nickname"></div>
<?php
  }
dann muss ich feststellen, dass Value immer auf $user_pn_auslesen_id gesetzt wird. Wenn ich allerdings in dem gepostetem Quellcode diesen Teil betrachte:
PHP:
<?php
  }
    }
?>
frage ich mich, wo die zweite Klammer herkommt.
 
Werbung:
dann muss ich feststellen, dass Value immer auf $user_pn_auslesen_id gesetzt wird..

...frage ich mich, wo die zweite Klammer herkommt.
Nur 2 der Probleme die zu beheben sind.
$user_pn_auslesen_id verändert sich nicht.

PHP:
<?php echo $pn; ?>
Da fehlt das Semikolon!
PHP:
foreach($_POST['deleted_ID'] as $element)
{
    echo $element;
}

Wo ist das Problem?
 
zum ersten Punkt: dies ist aus dem eigentlichen code rausgeschnitten deshalb die 2 }}, sorry war schon etwas in stress.

zum zweiten Punkt: $user_pn_auslesen_id ist die ID-Nummer der PN und ist nur einmal vorhanden jede andere PN hat eine fortlaufende Nummer um diese geht es ja.

zu den Semikolon: hab gelesen das es egal sei, wenn sich die php in einer Zeile befindet. Schönheitsfehler. :roll:

mir wird im $_POST['deleted_ID'] nur Array ausgegeben und nach der foreach() Schleife gibt es mir lediglich nur 1 ID-Nummer wieder.

mfg. wessei
 
Ich glaube, ohne den kompletten Quellcode zu kennen, kann man dir nicht helfen. Aktuell steht fest, dass innherhalb der while-Schleife $user_pn_auslesen_id nicht verändert wird und somit der Wert immer der gleiche ist.

Sieh' dir mal den HTML-Code, den der Browser bekommt, an, vielleicht entdeckst du dann selber das Problem.
 
Werbung:
ok dies ist der html-code

PHP:
<?php
 $gelesen_nein = "0";
 $deleted_nein = "0";
 $sql = "SELECT
                   *
            FROM
                    PN
            WHERE
                   PN_USER_TO_ID = '".$session_user_id."'
           ";
    $result_pn_auslesen = mysql_query($sql) OR die("<br>".$sql."<br>".mysql_error());
?>
<form name="user_pn_entfernen" action="?page=user&content=user_pn_aktion&pn=<?php echo $pn; ?>&uid=<?php echo $session_user_id; ?>" method="post" accept-charset="ISO-8859-1">
<?php
    while($row_pn_auslesen = mysql_fetch_assoc($result_pn_auslesen)) {
        $user_pn_auslesen_id = htmlentities($row_pn_auslesen['PN_ID']);
        $user_pn_auslesen_user_id = htmlentities($row_pn_auslesen['PN_USER_FROM_ID']);
        $text = htmlentities($row_pn_auslesen['PN_TEXT']);
        $sql = "SELECT
                     *
                  FROM
                     USER
                  WHERE
                     USER_ID = '".$user_pn_auslesen_user_id."'
                 ";
  $result_pn_auslesen_user = mysql_query($sql) OR die("<br>".$sql."<br>".mysql_error());
  while($row_pn_auslesen_user = mysql_fetch_assoc($result_pn_auslesen_user)) {
            $user_id = $user_pn_auslesen_user_id;
            $user_nickname = htmlentities($row_pn_auslesen_user['NICKNAME']);
?>
 <div class="user_liste_zeile_u">
  <div class="user_pn_auswahl">
            <input class="checkbox" type="checkbox" name="deleted_ID[]" onclick="checkbox_checked_test('all','deleted_ID','user_pn_entfernen')" value="<?php echo $user_pn_auslesen_id; ?>">
        </div>
  <div class="u_nickname">
            <a href="?page=user&content=profile&user=user_profil&uid=<?php echo $user_id; ?>"><?php echo $user_nickname; ?></a>
        </div>
  <div class="user_pn_betreff">
            <a href="?page=user&content=user_pn_ansehen&pn=<?php echo $pn; ?>&uid=<?php echo $session_user_id; ?>&pnid=<?php echo $user_pn_auslesen_id; ?>"><?php echo $text_b; ?></a>
        </div>
 </div>
<?php
  }
    }
?>
 <div class="user_pn_zeile_checked">
  <div class="user_pn_zeile_checked_auswahl">
   <input class="checkbox" type="checkbox" id="all" onclick="checkbox_checked(this.checked,'deleted_ID','user_pn_entfernen')">
  </div>
  <div class="user_pn_zeile_checked_alle_makieren"><label for="all">alle markieren</label></div>
     <div class="user_pn_zeile_checked_entfernen"><input type="submit" class="submit" name="submit" value="entfernen"></div>
 </div>
</form>

und dies der php-code abgeändert:

PHP:
<?php
    if($_POST['submit'] == 'entfernen') {
        // Prüft, ob alle post übermittelt wurden (true) -!!!- Admin -!!!-
        if(isset($_POST['deleted_ID'])) {
            $array = $_POST['deleted_ID'];
echo $array."_3<br>"; // die ausgabe dessen ist "Array"
            $array_id = implode(", ", $array);
echo $array_id."_3.1<br>"; // die ausgabe dessen ist "18, 19, 20"
            foreach($_POST['deleted_ID'] as $deleted_key => $deleted_id) {
echo $deleted_id."_3.2<br>";  // die ausgabe dessen ist "18"
// hir in foreach liegt der Fehler aber ich weis nicht warum und wo.
// mir wird nur die erste ID-Nummer ausgegeben obwohl im Array 18, 19, 20 stehn,
// die ich angekreuzt hatte also 3 der ID-Nummern
            // xxx die überprüfung
            // xxx die speicherung
            }
        }
    }
?>

mfg. wessei
 
Also wenn das Array so aufgebaut ist

PHP:
Array ( [deleted_ID] => Array ( [0] => 18 [1] => 19 [2] => 20 ) )

kann ich mir nicht erklären warum die foreach nicht funktioniert. Ich würde direkt vor der foreach einmal mit print_r das Array ausgeben.
Bzw. setz mal über der isset Überprüfung das Array manuell
PHP:
$_POST['deleted_ID'] = array('18','19','20');

Wenn das nämlich funktioniert ist wirklich etwas mit dem Aufbau des Arrays nicht in Ordnung. Denn die foreach ist syntaktisch richtig
 
Nochmal: sieh' dir mal den HTML-Code, den der Browser bekommt, an, vielleicht entdeckst du dann selber das Problem.
 
Werbung:
dies bekomm ich mit print_r vor dem foreach als ausgabe:

PHP:
Array ( [0] => 13 [1] => 14 [2] => 15 )

was sollte mit dem html-Quellcode den nicht richtig sein? ich komm einfach nicht drauf.

mfg. wessei
 
Zurück
Oben