Array aus DB im Formular mit Mehrfachauswahl

fixxxxxi

Erfahrenes Mitglied
Hallo,

ich habe ein Array aus einer Tabelle. Nun möchte ich diese Werte in einem Formular in einer Mehrfachauswahl ausgewählt haben, wenn diese in diesem Array vorkommen.

Als erstes hole ich mir alle vorhandenen gameIDs und die dazugehörigen Namen aus der Tabelle, in welcher alle Spiele gespeichert sind. Dann hole ich mir das Array aus der zweiten Tabelle, wo gameID=gameID ist. Die einzelnen Arrays sind zumindest die richtigen. Ich denke mein Problem liegt an dem foreach() oder das ich $gameids[$n] irgendwie vewenden muss im Zusammenhang mit for(). Aber nach etlichen Stunden komm ich hier einfach nicht weiter.

Wie komme ich zu meinem gewünschtem Ergebnis?

LG

PHP:
  $ds = mysql_fetch_array(safe_query("SELECT * FROM ".PREFIX."gegner_clans WHERE clanID='$id'"));
  $gamessql = safe_query("SELECT * FROM ".PREFIX."games");  
  $xgameids = explode("|", $ds['gameID']);
  $games='';
  $n=1;
  while($dq = mysql_fetch_array($gamessql)) 
  {
  foreach($xgameids as $gameids) {
  if ($gameids == $dq['gameID']){
  $games .= '<option value="'.$dq['gameID'].'" selected>'.$dq['name'].'</option>'};
  else
  $games .= '<option value="'.$dq['gameID'].'" >'.$dq['name'].'</option>'};
  }
  $n++;}

*UPDATE*

Hab soeben noch was anderes probiert, was denke ich schon ziemlich nah am Ergebnis dran ist aber leider auch nicht funktioniert =(

PHP:
  $gameids=explode("|", $ds['gameID']);
  $gamessql = safe_query("SELECT * FROM ".PREFIX."games WHERE gameID<>'60'"); 
  $anz = mysql_numrows($gamessql);
  $games='';
  while($dq=mysql_fetch_array($gamessql)) 
  {
  for ($i=0; $i<$anz; $i++)
     {
  if ($gameids[$i]==$dq['gameID']) $selected='"selected"'; else $selected='';
  $games.= '<option value="'.$dq['gameID'].'" '.$selected.'>'.$dq['name'].'</option>'; 
    }    
  }
 
Zuletzt bearbeitet:
Mich würde einmal interessieren, was genau nicht funktioniert: Felder sind nicht selektiert? For-Schleife arbeitet nicht korrekt?
 
Die Felder werden mittlerweile selektiert - Hatte einfach nur ein Semikolon vergessen. Aber es wird alles 5 mal angezeigt. Also alle Einträge - allerdings wird nicht 5 mal selektiert sondenr das nur einmal. Also arbeitet die FOR Schleife nicht korrekt.

Muss die FOR Schleife vor die WHILE Schleife? wenn ja, dann ****t das selektieren wieder nicht mehr =(
 
Zuletzt bearbeitet:
Mahlzeit,

ich hab das Ganze mal ein wenig überarbeitet:

PHP:
<?php
  $gameids=explode("|", $ds['gameID']);
  $gamessql = mysqli_query("SELECT * FROM \".PREFIX.\"games WHERE gameID<>'60'"); 
  $anz = mysql_numrows($gamessql);
  $games='';
  while($dq = mysqli_fetch_array($gamessql)) {
	  extract($dq);
	  
  	for ($i=0; $i<$anz-1; $i++) {
		
  	if ($gameids[$i]== "$gameID") {
		  $games.= "<option value='$gameID' selected>$name</option>";
  	} else {
		  $games.= "<option value='$gameID'>$name</option>";
  	}
	}
	
  }
  
?>

..hab mir mal das Recht rausgenommen alles mit einer mysqli-Syntax zu schreiben :p
Falls das nicht funktioniert bitte nochmal melden.
 
Das ist ja ein Skandal:

und wenn du diese Zeile:

PHP:
      if ($gameids[$i]== "$gameID") {

mal so abwandelst:

PHP:
      if ($gameids[$i]== $gameID) {

...sprich die Variable aus den Anführungsstrichen nimmst.
 
Bleibt das Auswahlmenü leider auch leer. Aber wenn ich folgendes nehme:

PHP:
  $gameids=explode("|", $ds['gameID']);
  $gamessql = safe_query("SELECT * FROM ".PREFIX."games WHERE gameID<>'60'"); 
  $anz = mysql_numrows($gamessql);
  $games='';
  
  while($dq=mysql_fetch_array($gamessql)) 
  {
  for ($i=1; $i<2; $i++) //DIESE ZEILE ÄNDERE
     {
  if ($gameids[$i]==$dq['gameID']) $selected='"selected"'; else $selected='';
  $games.= '<option value="'.$dq['gameID'].'" '.$selected.'>'.$dq['name'].'</option>'; 
    }    
  }

Dann erscheint jeder Eintrag nur einmal. Allerdings wird auch immer nur der erste Eintrag des arrays selektiert :/ Also auch nicht richtig. Aber ich denke es liegt einfach an der FOR() Schlefe die nicht richtig arbeitet.
 
hab jetz ne Möglichkeit, wie du die for-Schleife umgehen kannst - dauert nur noch 5 minuten bis ich den Code gebastelt habe ^^
 
Die schlüsselworte hierbei sind array_search und in_array die beide ein Array auf einen möglichen Wert durchsuchen. Was anderes willst du ja nicht machen.

hier mal meine beiden Beispielcodes:

PHP:
<?php
  $gameids=explode("|", $ds['gameID']);
  $gamessql = safe_query("SELECT * FROM ".PREFIX."games WHERE gameID<>'60'"); 
  $anz = mysql_numrows($gamessql);
  $games='';
  
  while($dq=mysql_fetch_array($gamessql)) 
  {
  
  	$suche = array_search($dq['gameID'], $gameids);
  	if($suche != "FALSE") {
		  $games.= "<option value='".$dq['gameID']."' selected>".$dq['name']."</option>";
  	} else {
		  $games.= "<option value='".$dq['gameID']."'>".$dq['name']."</option>";
  	}
  
  } 
?>

oder mit in_array:

PHP:
<?php
  $gameids=explode("|", $ds['gameID']);
  $gamessql = safe_query("SELECT * FROM ".PREFIX."games WHERE gameID<>'60'"); 
  $anz = mysql_numrows($gamessql);
  $games='';
  
  while($dq=mysql_fetch_array($gamessql)) 
  {
  
  	
  	if(in_array($dq['gameID'], $gameids)) {
		  $games.= "<option value='".$dq['gameID']."' selected>".$dq['name']."</option>";
  	} else {
		  $games.= "<option value='".$dq['gameID']."'>".$dq['name']."</option>";
  	}
  
  } 
?>

Hoffe das funktioniert jetzt, sonst wirds bei mir auch langsam eng :D
 
Zurück