Ik zit al een paar dagen tegen een probleem aan waarbij ik niet weet hoe ik een waarde in de options menu kan onthouden op een simpele manier. Ik ben erachter dat ik cookies kan gebruiken of een sessie, maar ik wil het liever op een manier doen in Javascript, dit is mijn code:

<!--SELECTIE NETWERKEN !-->

<div id="leftmenu">
<form name="jump" action="download.php" method="post">
<select name="providers">
<option value="kpnhi">KPN/Hi</option>
<option value="kpnhiimode">KPN/Hi iMode</option>
<option value="vodafone">Vodafone</option>
<option value="vodafonelife">Vodafone Life</option>
<option value="telfort">Telfort</option>
<option value="tmobile&brand">T-Mobile</option>
<option value="tmobiletzones">T-Mobile T-Zones</option>
<option value="orange">Orange</option>
<option value="orangeworld">Orange World</option>
</select>
</div>

<!--SELECTIE TELEFOONS !-->

<div id="rightmenu">
<select name="telefoons">
<option value="Alle telefoons">Alle telefoons</option>
<option value="nokia">Nokia</option>
<option value="sony">Sony Ericsson</option>
<option value="sagem">Sagem</option>
<option value="blackberry">Blackberry</option>
<option value="lg">LG</option>
<option value="sie">Siemens</option>
<option value="sam">Samsung</option>
<option value="alcatel">Alcatel</option>
<option value="mot">Motorola</option>
<option value="nec">NEC</option>
<option value="benq">BENQ</option>
<option value="sharp">Sharp</option>
<option value="sanyo">Sanyo</option>
<option value="philips">Philips</option>
<option value="panasonic">Panasonic</option>
</select>
<input type="submit"name="submit" value ="Go!">
</form>
</div>

<?php
if (isset($_POST['submit']))
{
$provider = $_POST['providers'];
$brand = $_POST['telefoons'];
}
?>

Kan ik op een simpele manier met onChange of onClick zoiets bereiken na een $_POST? Of is het handiger om met onClick de URL aan te passen middels een $_GET? Dit heb ik al geprobeert, echt zonder succes.

Gr,

Thomas
Voorbeeldpagina: Een selectbox onthouden met OOP
Code:

<?php
	ini_set ('display_errors', 1);
	error_reporting (E_ALL | E_STRICT);
	class core {
		protected $errs;
		protected $msgs;
		
		/*
		* constructor
		*/
		function __construct () {
			$this->errs = array ();
			$this->msgs = array ();
		}
		
		/*
		* setters
		*/
		function set_err ($err) {
			array_push ($this->errs, $err);
		}

		function set_msg ($msg) {
			array_push ($this->msgs, $msg);
		}
		
		/*
		* getters
		*/
		function get_errs () {
			return $this->errs;
		}

		function get_msgs () {
			return $this->msgs;
		}
		
		/*
		* return the number of messages, if any
		* @return int
		*/
		function has_msgs () {
			return count ($this->msgss);
		}
		
		/*
		* return the number of errors, if any
		* @return int
		*/
		function has_errs () {
			return count ($this->errs);
		}
	}
	
	class selectbox extends core {
		protected $name;
		protected $values;
		protected $options;
		protected $selected;
		protected $n;
		
		/* constructor */
		function __construct ($name, $values, $options, $selected) {
			parent::__construct ();
			if (!is_array ($values)) {
				$this->set_err ('<p>Het eerste argument moet een array zijn</p>');
			}
			if (!is_array ($options)) {
				$this->set_err ('<p>Het tweede argument moet een array zijn</p>');
			}
			if (count ($values) != count ($options)) {
				$this->set_err ('<p>De arrays moeten even lang zijn</p>');
			}
			$name = trim ($name);
			$name = preg_replace ('/[^a-zA-Z0-9]/', '', $name);
			if (empty ($name)) {
				$this->set_err ('<p>Geen geldige naam opgegeven</p>');
			}
			$this->name = $name;
			$this->values = $values;
			$this->options = $options;
			$this->selected = $selected;
			$this->n = count ($values);
		}
		
		/*
			@get_html:	haal de HTML code voor de select op
		*/
		function get_html () {
			$html = PHP_EOL;
			$html .= '<select id="' . $this->name . '" name="' . $this->name . '">';
			for ($i = 0; $i < $this->n; $i++) {
				if ($this->selected == $this->values[$i]) {
					$html .= PHP_EOL . '<option selected="selected" value="' . $this->values[$i] . '">' . $this->options[$i] . '</option>';
				}
				else {
					$html .= PHP_EOL . '<option value="' . $this->values[$i] . '">' . $this->options[$i] . '</option>';
				}
			}
			$html .= PHP_EOL . '</select>';
			return $html;
		}
	}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	<title>Options onthouden</title>
	<style type="text/css">
	@import 'oop.css';
	</style>
</head>

<body>
	<div id="container">
	<div class="wrapper">
		<h1>Selectbox class</h1>
		<form method="post" action="#">
			<p>
				<?php
					$name = 'groente';
					$values = range (1, 9);
					$options = array ('sla', 'spruitjes', 'andijvie', 'sperziebonen', 'worteltjes', 'witlof', 'broccoli', 'bloemkool', 'uien');
					$selected = (isset ($_POST[$name])) ? ($_POST[$name]) : ($values[0]);
					$sel = new selectbox ($name, $values, $options, $selected);
					echo $sel->get_html ();
				?>
			</p>
			<p>
				<input type="submit" value="verzenden">
			</p>
		</form>
		<?php
			if ($_SERVER['REQUEST_METHOD'] == 'POST') {
				echo '<pre>';
				print_r ($_POST);
				echo '</pre>';
			}
			if ($sel->has_errs ()) {
				echo '<div class="errs">';
				foreach ($sel->get_errs () as $err) {
					echo $err;
				}
				echo '</div>';
			}
		?>
	</div>
	</div>
</body>
</html>
Bedankt voor je mooi OOP functie, echter krijg ik nu een error die mij dwingt om over te stappen naar PHP 5.0 of hoger:

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in download.php on line 54

Ik denk vanwege de "protected" waarde in de CLASS core. Desallniettemin, bedankt voor je professionele oplossing! :)
Thomas schreef op 21.04.2007 02:35
Bedankt voor je mooi OOP functie, echter krijg ik nu een error die mij dwingt om over te stappen naar PHP 5.0 of hoger:

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in download.php on line 54

Ik denk vanwege de "protected" waarde in de CLASS core. Desallniettemin, bedankt voor je professionele oplossing! :)

Om hem geschikt te maken voor PHP4 kun je het volgende doen:

1) overal waar protected staat, maak je er var van
2) verander de functienaam __construct in de naam van de class (respectievelijk core en selectbox)
3) in de constructor van de selectbox class verander je dit:

parent::__construct ();

in dit:

parent::core ();

Let er op dat je de constructor van de core class ook aangepast hebt.

Reageren