Vergleich von GET-Variable und der Null

Paula

Erfahrenes Mitglied
Servus zusammen,

ich möchte gerne eine Auswahl erstellen und die ausgewählten Felder werden durch die Parameter in der URL beeinflusst. Meine URL sieht z.B. wie folgt aus:
Code:
?nav=select&time_start=1136070000&time_end=1139871599
Nun habe ich eine Funktion gebastelt, die mir die Optionsfelder zurückgibt:
PHP:
function create_option( $get, $value, $entry ) {

	if( $_GET[$get] == $value ) {
		return '<option value="'. $value .'" selected>'. $entry .'</option>';
	}
	elseif( !isset( $_GET[$get] ) and $value == 'backup_start_ASC' ) {
		return '<option value="'. $value .'" selected>'. $entry .'</option>';
	}
	else {
		return '<option value="'. $value .'">'. $entry .'</option>';
	}

}
Nun zu meinem Problem:
Code:
?nav=select&retention=0&time_start=1136070000&time_end=1139871599
So wird die richtige Retention ausgewählt.
Code:
?nav=select&time_start=1136070000&time_end=1139871599
Hierbei sollte eigentlich kein Auswahlfeld selektiert werden, aber bei der 0 wird dennoch ein selected hinterlegt. Wie kann ich dies umgehen?
 
PHP:
$retention_array = array( 0, 1, 2, 3, 4, 5, 6, 7, 14, 30, 31, 60, 62, 90, 93, 180, 186 );
foreach( $retention_array as $retention_foo ) {
	$retention.= create_option( 'retention', $retention_foo, $retention_foo );
}
 
Steht im Quelltext wirklich ein „selected“ oder ist es nur ausgewählt, weil es die erste Option ist?
 
Es steht wirklich ein selected.
Code:
?nav=select&time_start=1136070000&time_end=1139871599
Code:
<select name="retention" onChange='this.form.submit()'>
	<option value="">alle</option>
	<option value="0" selected>0</option>
	<option value="1">1</option>
	<option value="2">2</option>
	...
 
PHP:
if( isset( $_GET['retention'] ) or !empty( $_GET['retention'] ) )
	echo $_GET['retention'] .'.';
else
	echo '?';
Dies habe ich in die Funktion implementiert und als Ausgabe werden nur die Fragezeichen zurückgegeben.
 
Ich habe gerade keinen PHP-Interpreter zur Hand, deshalb probier mal Folgendes und teile mir die Ausgabe mit:
PHP:
unset($_GET['retention']);
var_dump( $_GET['retention'] == 0 );
Falls ein true zurückgegeben wird, ist die Ursache des Problems gefunden und du solltest die create_option()-Funktion wie folgt anpassen:
PHP:
function create_option( $get, $value, $entry ) {

	if( isset($_GET[$get]) && $_GET[$get] == $value ) {
		return '<option value="'. $value .'" selected>'. $entry .'</option>';
	} elseif( !isset($_GET[$get]) && $value == 'backup_start_ASC' ) {
		return '<option value="'. $value .'" selected>'. $entry .'</option>';
	} else {
		return '<option value="'. $value .'">'. $entry .'</option>';
	}

}
 
Dein Code gibt folgendes zurück:
Code:
bool(true)
Jedoch funktioniert dein Lösungsvorschlag nicht! Das Problem besteht auch damit weiterhin.
 
Als Notnagel hab ich nun folgendes umgesetzt:
PHP:
	if( $retention_foo == 0) {
		$retention_foo = 'null';
	}
Dies habe ich einfach in die Schleife reingepackt.
 
Zurück