Checkbox-Mehrfachauswahl keine Rückgabe

Maniac

Erfahrenes Mitglied
Moin, also ich glaub ich steh im Wald.....

Ich bekomm kein Array als Rückgabe bei mehreren Checkboxen.

hier der Code:

HTML:
<form method="post" action="work.php">
<input type="checkbox" name="test[]" value="1" />
<input type="checkbox" name="test[]" value="2" />
<input type="checkbox" name="test[]" value="3" />
<input type="submit" name="send" value="abschicken" />
</form

sollte doch nun in der var $_POST['test'] ein Array stecken.

wenn ich nun

PHP:
var_dump($_POST['test']);

erhalte ich folgendes:
string(5) "Array"

foreach sagt mir das es ein ungültiger parameter ist...
Warning: Invalid argument supplied for foreach()


Was mache ich bitte falsch
 
In dem Ausschnitt: nichts.

Habe deinen Code übernommen mit anderem action-attribut:
PHP:
<?php
var_dump($_POST['test']);
?>

<form method="post" action="">
<input type="checkbox" name="test[]" value="1" />
<input type="checkbox" name="test[]" value="2" />
<input type="checkbox" name="test[]" value="3" />
<input type="submit" name="send" value="abschicken" />
</form>

Und erhalte ein Array (1 und 2 markiert):
Code:
array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
}

Was sagt denn nur var_dump($_POST); ?
 
Zuletzt bearbeitet:
Habe das nun in einer Externen Dateu auch versucht und kam zum gewünschten Ergebnis.

Hab mich auf Fehlersuche in meinem Script begeben und festgestellt das diese Funktion schuld ist, damit es anscheinend nicht geht.

PHP:
if(get_magic_quotes_gpc()){
		foreach($_POST as $key => $elem)
		{
			$_POST[$key] = stripslashes($elem);
		}
	}

kann ich diese Funktion anders lösen?

Meine POST-Vars maskiere ich mit dieser Funktion:

PHP:
function maskpostdata($_POST)
	{
		foreach ( $_POST as $var => $val ) 
		  { 
			$_POST[$var] = mysql_real_escape_string(htmlentities(trim($val))); 
		  } 

		 return $_POST;
	}
 
Zuletzt bearbeitet:
Danke mal logisch mit. Es wird über ein Array iteriert, dessen Elemente wieder ein Array seien können und in diesem Fall sogar sind. So wird $elem / $val irgendwann ein Array sein.
Da ist es nicht verwunderlich, dass stripslashes / trim meckern und dich indirekt darauf hinweisen, indem sie den String "Array" zurückgeben.

Wenn du das alles wirklich umsetzen willst, dann heißt die Lösung: Rekursion und Referenzierung.
PHP:
function foo(&$arr)
{
  foreach($arr as $a)
  {
    if (is_array($a))
    {
      foo($a);
    }
    else
    {
      // Iterationsschritt
    }
  }
}

is_array ist ein Performancekiller bzw. es gibt schnellere Varianten zum prüfen, die noch zu suchen sind.
 
Zuletzt bearbeitet:
Danke dir, soweit hatte ich vorhin auch schon gedacht :)
Nur machte ich den Fehler und hab in dieser Funktion nicht überprüft ob "$elem" ein array ist, zumindest nicht mit "is_array()"...

jetzt scheint es zu funktionieren:

PHP:
if(get_magic_quotes_gpc()){
		foreach($_POST as $key => $elem)
		{
			if(is_array($elem))
			{
				foreach($elem as $keys => $var)
				{
					$elem[$keys] = stripslashes($var);
				}
			}else{
				$_POST[$key] = stripslashes($elem);
			}
		}
			echo "<pre>";
			print_r($_POST);
			echo "</pre>";
	}

Wie tiefgründig können POST-Vars denn gehen? weil so sind ja nur die ersten 2 ebenen abgedeckt.

gibt es ne bessere Lösung für magic_quotes?
hatte es auch schon mit einer .htaccess abgeschalten, aber das ist ja nicht auf jedem Web-Server so damit das mit .htaccess auch klappt, oder?
 
Können schon tief gehen, aber kommt auf den Sinn an ;)

[phpf]array_map[/phpf] hilft.

Und warum sollte das mit .htaccess nicht klappen? Richtige Seite als action-attribut des Formulars und klappt.
 
Hi,

Meine POST-Vars maskiere ich mit dieser Funktion:

PHP:
function maskpostdata($_POST)
	{
		foreach ( $_POST as $var => $val ) 
		  { 
			$_POST[$var] = mysql_real_escape_string(htmlentities(trim($val))); 
		  } 

		 return $_POST;
	}

Sowas ist übrigens gar nicht gut. Vor allem nicht, wenn Du auch noch direkt das $_POST-Array veränderst. Was ist, wenn Du hinterher die Daten noch auf der Webseite ausgeben oder per Mail verschicken willst?
Und HTML-Entitäten haben sowieso nichts in der Datenbank verloren.

=> Behandle Userdaten immer genau dann, wenn Du sie in einem bestimmten Kontext verwenden willst und zwar genau mit den Mitteln, die für diesen Kontext gedacht sind, statt irgendwo pauschal mit Allem draufzuschlagen, was das PHP-Manual hergibt...

LG
 

Neue Beiträge

Zurück