Hallo zusammen,
ich bin gerade dabei zwei Select-Felder zu machen, wo das 2. vom ersten abhängig ist.
Im groben geht es darum, ein User kann ein Jahr wählen und in der 2. Select-Box werden die Monate dann angezeigt in denen er läuferisch akiv war und Daten zur verfügung stehen.
Vor ein paar Jahren hat mir jemand sowas für mein Musik-Archiv fix und fertig programmiert. Ist natürlich toll, aber lerneffekt gleich null. So hab ich nun angefangen mir das langsam aufzubauen und alles entsprechend anzupassen.
Nun zu meinem Problem:
Beim IE7/8 sowie Safarie funktioniert es so wie es soll, nur FireFox3.x und Opera machen das nicht. Jetzt steh ich irgendwie auf dem Schlauch!!
Hier mal der Link um zu testen:
http://privatwebarea.dyndns.org/entw...eite/test2.php
Hier entsprechender Quellcode:
Java-Funktionen
Code:
// Object finden
function MM_findObj(n, d) { //v4.01
var p,i,x;
if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
}
if(!(x=d[n])&&d.all) x=d.all[n];
for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function build_options(f1, f2) {
dat1 = f1;
dat2 = MM_findObj(f2);
opt = MM_findObj(dat1.value);
// Alle Optionen in Box 2 entfernen
var l = dat2.length;
var x=0;
while(x < l) {
dat2.options[0] = null;
++x;
}
// Box 2 mit neuen Optionen füllen
if(opt) {
var params = opt.value.split(";");
var t = (params.length == 1) ? "Monat" : "Monate";
var option = new Option("Bitte wählen ("+params.length+" "+t+")", "-1");
dat2.options.add(option);
var i=0;
while(i < params.length) {
var option = new Option(params[i], params[i]);
dat2.options.add(option);
++i;
}
}
// Keine Monate vorhanden
else {
var option = new Option("Bitte Monat wählen", "-1");
dat2.options.add(option);
}
}
kompletter PHP-Code, die Funktionen hab ich einfach zum testen in die gleiche Datei gepackt
PHP-Code:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Title here!</title>
<script language="javascript" type="text/javascript" src="./js/functions.js"></script>
</head>
<?php
function build_temp_options($user_id){
include('./db_connect/connect_sql.php');
//$arr = array();
$result = mysql_query("SELECT DISTINCT DATE_FORMAT(datum, '%Y') AS jahr
FROM laufen_meintraining
WHERE user_id = ".$user_id."
GROUP BY DATE_FORMAT(datum, '%Y')
ORDER BY datum ASC",$db) or trigger_error(mysql_error($db));
if(!$result){ logfile('sql',error_get_last());}
while($years = mysql_fetch_array($result)){
$sel_jahr .= "<option value=\"".$years['jahr']."\" ";
if($years['jahr'] == $jahr){ $sel_jahr .= " selected";}
$sel_jahr .= ">".$years['jahr']."</option>";
$result_2 = mysql_query("SELECT DISTINCT DATE_FORMAT(datum, '%m') AS monat
FROM laufen_meintraining
WHERE user_id = ".$user_id."
AND DATE_FORMAT(datum, '%Y') = ".$years['jahr']."
GROUP BY DATE_FORMAT(datum, '%m')
ORDER BY datum ASC",$db) or trigger_error(mysql_error($db));
if(!$result_2){ logfile('sql',error_get_last());}
while($months = mysql_fetch_array($result_2)){
$arr[$user_id][$years['jahr']] .= $months['monat'].";";
}
}
$hidden = "";
foreach($arr AS $id => $user_id){
foreach($user_id AS $jahr => $monate){
$monate = ereg_replace(";$","", $monate);
$hidden .= "<input type=\"hidden\" id=\"".$id."\" name=\"".$jahr."\" value=\"".$monate."\">";
}
}
return array($sel_jahr, $hidden);
}
function build_month_option($year,$user_id=false){
include('./db_connect/connect_sql.php');
$result = mysql_query("SELECT DISTINCT DATE_FORMAT(datum, '%m') AS monat
FROM laufen_meintraining
WHERE user_id = ".$user_id."
AND DATE_FORMAT(datum, '%Y') = ".$year."
GROUP BY DATE_FORMAT(datum, '%m')
ORDER BY datum ASC",$db) or trigger_error(mysql_error($db));
if(!$result){ logfile('sql',error_get_last());}
while($row = mysql_fetch_array($result)){
$opt .= '<option value="'.$row['monat'].'">'.$row['monat'].'</option>';
}
return $opt;
}
$_jahre = build_temp_options(34);
if($_POST[dat1]){
$_monate = build_month_option($_POST[dat1], $_POST[dat2]);
}
if(isset($_POST[dat1])){
echo "Übergebene Daten => Jahr: ".$_POST[dat1]." Monat: ".$_POST[dat2];
}
?>
<body>
<form action="test2.php" name="form1" method="POST">
<?php echo $_jahre[1];?>
<select name="dat1" onChange="build_options(this, 'dat2')" size="1">
<option value="-1">Bitte wählen</option>
<?php echo $_jahre[0]; ?>
</select>
<br>
<select name="dat2" size="1">
<option value="-1">Bitte wählen</option>
<?php echo $_monate; ?>
</select>
<p><input type="submit" name="senden" value="senden"></p>
</form>
</body>
</html>
Hoffe Ihr könnt ein wenig Licht ins Dunkel bringen.
Gruß
Alex