foreach, arrays

Sebbo90

Mitglied
Hi,

ich habe ein paar Fragen was die foreach Schleife und Arrays angeht. Vielleicht poste ich dazu mal meinen bisherigen Code und erkläre dann woran es hapert:

PHP:
if ( isset($_POST['select']) && $_POST['select'] == "delete"){
foreach($_POST['feld'] AS $id => $feld) {
  mysql_query("DELETE FROM adressbuch WHERE id = '$feld[check]' LIMIT 1");
} 
}
if ( isset($_POST['select']) && $_POST['select'] == "edit"){
	foreach($_POST['feld'] AS $id => $feld) {
  mysql_query("UPDATE adressbuch SET nachname='$feld[nachname]', vorname='$feld[vorname]' WHERE id='$feld[id]'");
} 
}

echo '<table id="table" width="500px">';
echo '<td></td>';
echo '<td>Nachname</td>';
echo '<td>Vorname</td>';

echo '<form action="" method="POST">';
echo "<select name=\"select\" id=\"select\" onchange='document.getElementById(&quot;loginForm&quot;).action = this.options[this.selectedIndex].value'>";
echo '<option value="delete">L&ouml;schen</option>';
echo '<option value="edit">Editieren</option>';

$counter = 1;

while ($row = mysql_fetch_array( $result, MYSQL_ASSOC)){
	
    echo "<tr>";
	echo '<td class=\"row$counter\"><input type="checkbox" name="feld['.$row['id'].'][check]" ></td>';
    echo '<td class=\"row$counter\"><input type="text" name="feld['. $row['nachname'] . '][nachname]" value="'. $row['nachname'] . '"></td>';
    echo '<td class=\"row$counter\"><input type="text" name="feld['. $row['vorname'] . '][vorname]" value="'. $row['vorname'] . '"</td>';
    echo "</tr>";
	
	$counter = $counter == 1 ? 2 : 1;
	
}

echo '<input type="submit" name="löschen" value="OK">';
echo '</form>';
echo "</table>";

mysql_free_result( $result );

Ich habe bisher noch nie mit foreach gearbeitet. Das Problem ist, es tut sich einfach nichts. Ich möchte alle gecheckten Datensätze editieren können oder löschen. Desweiteren weiß ich nicht ob mein Array richtig aufgebaut ist und in der foreach Schleife richtig abgerufen wird.

Zum Aufbau des Arrays dachte ich, ich muss ja irgendwie, zumindest beim UPDATE query, einzelne Felder in den query bringen. Das habe ich dadurch versucht den feldnamen hinten anzuhängen, allso quasi das schema: feld[inhalt][feldname].

Ich hoffe ich konnte es möglichst verständlich erklären und hoffe mir kann jemand helfen, denn ich hänge da jetzt schon fast 1 Tag fest.

mfg
Sebbo
 
Zuletzt bearbeitet:
Hi

zu allererst: Schreibe die Querys mal lieber so:
PHP:
mysql_query("UPDATE adressbuch SET nachname='".$feld['nachname']."', vorname='".$feld['vorname']."' WHERE id='".$feld['id']."'");

Zu foreach schreibe ich dir einfach mal 2 Beispiele:
PHP:
$my_array = array(1, 2, 3, 4, 5);
foreach( $my_array as $my_alias ){
  echo $my_alias; // 1 2 3 4 5
}

$my_array = array("key1" =>"value1", "key2" => "value2");
foreach( $my_array as $array_key => $array_value){
  echo "Zum Key ".$array_key." gehört der Wert: ".$array_value; //Zum Key key1 gehört der Wert: value1....
}
 
Ich habe ja davon nicht die größte Ahnung, aber sind diese Art von Queries nicht sehr anfällig gegen SQL-Injections?

Gruß
RudolfG
 
Moin,

doch, sind sie, aber Timestamp wollte Dir (vermutlich) nur zeigen, dass Du Deine SQL-Strings mit dem Punkt-Operator verknüpfst. Das hilft auch u.a. vor Fehlern, die durch den falschen Gebrauch von einfachen und doppelten Anführungsstrichen entstehen können.
Z.B.
PHP:
$item="Apfel";
echo "$item";   // Apfel
echo '$item';    // $item
Ich selbst würde noch einen Schritt weitergehen und das ganze in eine Variable packen:
PHP:
$sql='UPDATE xyz SET..... ';
mysql_query($sql);
// zum debuggen
// echo $sql;
Durch die echo-Anweisung kann man im Fehlerfall sich schnell mal sein SQL-Statement ansehen (und zur Not auch kopieren und direkt - z.B. per phpmyadmin - ausführen) und prüfen, ob auch alles so drin ist, wie es sein soll. Das hat mir schon manches mal geholfen, den Fehler zu finden.

Die Validierung der Eingaben ist in der End-Version natürlich zwingend erforderlich, hat in Bezug auf Deine Fragestellung damit aber nichts zu tun, oder?

Greetz
cw
 
Zuletzt bearbeitet:
Zurück