Mehrdimensionales Array aus DB füllen

  • #1
W

wibni

Bekanntes Mitglied
Themenersteller
Dabei seit
15.04.2005
Beiträge
71
Reaktionspunkte
0
Hallo Forum,

ich möchte ein mehrdimensionales Array aus einer DB heraus füllen um mir danach die Werte in 2 Dropdownboxen anzeigen lassen zu können.

Das Array hat z.B. diese Einträge - hier mal als statisches Bsp.:
$arr_db = array(
Accounting => array(Other Accts,System Dev),
Admin => array(Meetings,Other Admin,Reception),
Engineering => array(Other Engineering,Sales Support),
HR => array(Other HR),);

Das ergibt:
Array ( [Accounting] => Array ( [0] => Other Accts [1] => System Dev ) [Admin] => Array ( [0] => Meetings [1] => Other Admin [2] => Reception ) [Engineering] => Array ( [0] => Other Engineering [1] => Sales Support )
=> Array ( [0] => Other HR ) )

(sorry, die 0 bei Feld 0 will er net anzeigen hier)

In der DB habe ich 2 Spalten welche ungefähr so aussehen:
spalte1 | spalte2
Accounting | Other Accts
Accounting | System Dev
Admin | Meetings
Admin | Other Admin

Wenn ich also in der ersten Box Admin wähle, sollen in der anderen Box Meeings, Other Admin und Reception erscheinen.
Das mache ich sicher in Javascript. Aber zunächst brauche ich erstmal hilfe das
mehrdimensionale Array dynamisch zu füllen.

lG,
Pia
 
  • #2
Code:
<?php
$sql = SELECT DISTINCT spalte1 FROM test_tbl ORDER by spalte1 ASC;
$res = mysql_query($sql);
while($row = mysql_fetch_row($res)) {
	$sql = SELECT spalte2 FROM test_tbl WHERE spalte1='. $row[0] .' ORDER by spalte2;
	$res2 = mysql_query($sql);
	while($row2 = mysql_fetch_row($res2)) {
		$arr[$row[0]][] = $row2[0];
	}
}
print_r($arr);
?>

Ergebnis:
Array ( [Accounting] => Array ( [0] => Other Accts [1] => System Dev ) [Admin] => Array ( [0] => Meetings [1] => Other Admin [2] => Reception ) [Engineering] => Array ( [0] => Other Engineering [1] => Sales Support )
=> Array ( [0] => Other HR ) )



Du musst nur die MySQL-Befehle gegen ODBC-Befehle austauschen. (Du hattest doch ne ACCESS-DB. Oder ???)

gruss conny

PS:
Schon mal daran gedacht ADODB einzusetzen ??? Die kann auch mit einer ACCES-DB kommunizieren ;)
http://adodb.sourceforge.net/#download
 
  • #3
Ok. Danke. Habe es so.
es fehlen nur die Werte aus der zweiten Abfrage. Wieviele es sind, weiss er ja offensichtlich, da die Anzahl der Indexe unterschiedlich sind.

$result_phasecodes = odbc_exec( $con, SELECT DISTINCT phasecode FROM activitycodes ORDER by phasecode ASC);

while( odbc_fetch_row( $result_phasecodes ) ) {
$phase = odbc_result( $result_phasecodes, 1 );
$result_activitycodes = odbc_exec( $con,SELECT activitycode FROM
activityCodes WHERE phasecode ='. $phase .' ORDER BY activitycode);

while( odbc_fetch_row( $result_activitycodes ) ) {
$activity = odbc_result( $result_activitycodes, 1 );

$arr[$phase][] = $$activity;
}
}

Ich erhalte:
Array ( [Accounting] => Array ( [0] => [1] => ) [Admin] => Array ( [0] => [1] => [2] => ) [Engineering] => Array ( [0] => [1] => )
=> Array ( [0] => )


An ADO hab ich schon gedacht. Aber das ist jetzt glaube ich die letzte Herausforderung mit Access und da lohnt sich des net mehr alles umzuschreiben. Ausserdem schiesst mir bei ADO imemr der Apache ab und ich stände ja dann immer noch vor meinem Array-Prolem oder?
 
  • #4
Sorry mein Fehler!!!
Habe zwei $ vor dem $activity.

Ich Dussel!
Der Dank gebührt Conny!

Nun muss ich des nur noch in Dropdownboxen unterbringen.
Bin sicher ich melde mich wieder...
;)
 
  • #5
*hüstel*

ADO und ADODB haben genausoviel gemeinsam wie Weinbergschnecken und Windmühlen ;) ;D ;D


gruss conny
 
  • #6
Ich glaube, da war noch zu wenig Kaffee im Spiel ;D ;D

Die Sache geht doch viel einfacher ;D

Code:
<?php
$sql = SELECT * FROM test_tbl ORDER by spalte1, spalte2 ASC;
$res = mysql_query($sql);
while($row = mysql_fetch_row($res)) {
	$arr[$row[0]][] = $row[1];
}

?>

gruss conny
 
  • #7
jepp.
ich quäl mich derweil wieder mit JS rum. mit dem steh ich echt auf kriegsfuss.
hab dieses statische beispiel und versuche das nun in die selectboxen umzusetzen.
$search_value ist dabei die getroffene auswahl in der ersten selectbox. also der value oder der index dieser box (sind gleich)
mit der foreach-schleife lasse ich mir die werte des arrays ausgeben, welche zu dem $search_value gehören.

$search_value = Admin;
foreach ($arr_activity as $key => $row)
{
if ($key == $search_value)
{
foreach ($arr_activity[$key] as $cell)
{
echo <p>.$cell.<br>;
}
}
}

und nun wieder dieses JS!!!
ändere ich 1.dropdownbox, habe ich meinen $search_value und dieser soll mir die resultierenden werte in der 2.dropdownbox anzeigen.

ich glaub mir fehlt hier ne windung.... :-[
 
  • #8
Code:
<script language=javascript type=text/javascript>
// 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 func1(f1, f2) {
 dat1 = f1;
 dat2 = MM_findObj(f2);
 opt = MM_findObj(dat1.value);
 
 var l = dat2.length;
 var params = opt.value.split(;);
 var x=0;
 var i=0;
 
 while(x < l) {
	dat2.options[0] = null;
	++x;
 }
 
 while(i < params.length) {
	var option = new Option(params[i], params[i]);
    dat2.options.add(option);
	++i;
 }
}
</script>


<?php
$con = mysql_connect(localhost,xxxx,xxxx);
mysql_select_db(test,$con);
$sql = SELECT * FROM test_tbl ORDER by spalte1, spalte2 ASC;
$res = mysql_query($sql);
while($row = mysql_fetch_row($res)) {
	$arr[$row[0]][] = $row[1];
}

$hidden = ;
foreach($arr as $key => $val) {
	$opt .= <option value='.$key.'>.$key.</option>;
	$temp = ;
	for($i = 0; $i < count($val); $i++) {
		$temp .= $val[$i].;; 
	}
	$temp = ereg_replace(;$,, $temp);
	$hidden .=-><input type=hidden name='.$key.' value='.$temp.'>';
}
?>

<form action=datum.php method=post name=form1>
 <?php echo $hidden; ?>
 <select name=dat1 onChange=func1(this,->dat2') style=width:100 >
  <?php echo $opt; ?>
 </select> 
 <select name=dat2 style=width:100 ></select>
</form>

;D ;D

gruss conny
 
  • #9
Thanks mate!
mal ausprobieren.
Aber wie ich Dich kenne, laeuft es einwandfrei....

C ya
 
  • #10
Hi Conny,

....und natuerlich funzt Dein Beispiel.
Ist es auch moeglich in der Dropdownbox dat2 als ersten Wert immer alles auszugeben. und danach erst die werte aus dem array?

habe mal so angefangen aber nur fehler kassiert.

var i=0;
while(i < params.length ) {
if (i=0){
var option = new Option(all Activities, first);
activity.options.add(option);
}

option .= new Option(params, params);
activity.options.add(option);
++i;
}
 
  • #11
ok. habe es einfach so gemacht und es funzt:

var option = new Option(all Activities, first);
activity.options.add(option);

var i=0;
while(i < params.length ) {
option = new Option(params, params);
activity.options.add(option);
++i;
}
 
  • #12
wibni schrieb:
Code:
var i=0;
while(i < params.length ) {
	if (i=0){
	  var option = new Option(all Activities, first);
	  activity.options.add(option);
	}
	
		option .= new Option(params[i], params[i]);
		activity.options.add(option);
		++i;
	}

Wenn, dann:
Code:
var i=0;
while(i < params.length ) {
  if (i==0){
    var option = new Option(all Activities, first);
  }
  else {
    var x = i-1;
    var option = new Option(params[x], params[x]);  
  }
  activity.options.add(option);
  ++i;
}

;) ;D ;D

gruss conny
 
Thema:

Mehrdimensionales Array aus DB füllen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben