Mysql & array Problem
Forum » PHP / MySQL » Mysql & array Problem
Leute ich habe ein Problem mit einer Datenbankabfrage & einer Array.
Vielleicht habt Ihr ja ein guten Tipp oder sogar ein Lösung für mich.
Erst einmal alle Fakten:
Die MySql Tabelle "maps"
id gameid map
1 1 de_dust
2 1 de_dust2
3 1 de_atze
Die MySql Tabelle "wars" (gekürzt)
id ... maps ...
1 de_dust, de_dust2
Der Phpcode (gekürzt)
Code:
<?php
$maps = explode(',', $edit['maps']);
$mapzahl = count($maps);
?>
<select name='maps[]' multiple style='width: 200px;' size=10>
<?php
foreach($maps as $selmap)
{
print '<option value=''.$selmap.'' SELECTED>'.$selmap.'</option>';
}
for($i=0; $i < $mapzahl; $i++)
{
$query = "SELECT * FROM `maps` WHERE map != '".$maps[$i]."' ORDER BY map";
$result = mysql_query($query) OR die("<img src='img/icons/exclamation.png' border='0' width='16px' height='16px' alt='Error'> Mysql Error 1".mysql_error());
$show = mysql_fetch_array($result);
print '<option value="'.$show['map'].'">'.$show['map'].'</option>';
}
?></select>
Aussehen tuht die Ausgabe wie folgt

phpprob
Ich möchte die Maps die in der DB "war" gespeichert sind als SELECTED ausgeben und
die Maps die nicht in der war Array vorkommen aus der "maps" DB holen und als nicht SELECTED ausgeben.
Hört sich eigentlich einfach an aber ich verzweifel dran >.<
Bin damit jetzt schon mehre Tage beschäftigt aber bekommen es einfach nicht hin.
Habe es auch schon mit verschieden if Schleifen versucht mit der Funktion in_array aber da kam auch nix gescheit es beirum.
Wäre super wenn jemand mir helfen kann. =)
MFG Yakkul
P.S. Es dauert was bis ich wieder Antworte weil ich zur Zeit nur I-net mit ein Stick habe und das Netz wo ich bin sehr Bescheiden ist.
|
Veröffentlicht am: 25 Jul. 2010 |
Bookmarks:
|
Anfang
<<
1
>>
Ende
25 Jul. 2010 20:19:14 • Antworten •
Yakkul sagt:
Habe es erst einmal so übernommen wie es da stand aber wirklich geklappt hat es nicht. Werde gleich noch etwas rum testen weil der Lösungsansatz gefällt mir recht gut.
Wenn ich nicht weiter kommen sollte melde ich mich nochmal.
MFG Yakkul
25 Jul. 2010 20:41:54 • Antworten •
Yakkul sagt:
Code:
<?php
$selected_maps = explode(...);
$maps = array();
$result = mysql_query("SELECT map FROM maps ORDER BY map");
while($map = mysql_fetch_object($result)) {
$maps[] = array('name' => $map->map, 'selected' => in_array($map->map, $selected_maps));
}
?>
<select name='maps[]' multiple style='width: 200px;' size=10>
<?php foreach ($maps as $map): ?>
<option value="<?php print $map['name']; ?>"<?php if($map['selected'] === true): ?> selected<?php endif; ?>>
<?php print $map['name']; ?>
</option>
<?php endforeach; ?>
</select>
Habe es gestern noch getestet aber es klappt noch nicht ganz und zwar bei
'selected' => in_array($map->map, $selected_maps) nimmt er nur die erste Variabel der Array.
Hat wer ein Tipp?
26 Jul. 2010 08:26:14 • Antworten •
Crash sagt:
26 Jul. 2010 17:49:18 • Antworten •
Yakkul sagt:
Code:
$selected_maps = explode(',', $edit['maps']);
$edit['maps'] ist eine mysql Abfrage von War.
27 Jul. 2010 07:53:16 • Antworten •
Crash sagt:
Funktioniert es denn nun wenigstens?
27 Jul. 2010 09:12:42 • Antworten •
Yakkul sagt:
Wie schon gesagt nimmt er nur die erste Variabel von der Array.
Aber was meinst du mit es verstößt gegen die Normalformen? Wie sollte ich es denn anders machen?
27 Jul. 2010 11:35:57 • Antworten •
Crash sagt:
Vielleicht solltest du mal das ganze Script posten, bzw. was nach dem explode() in $selected_maps steht.
Normalformen siehe: http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29 Demnach müsste es eine zweite Tabelle geben, in denen die Maps pro War stehen in der Form:
Code:
war_id, maps_name
1 , "de_dust"
1 , "de_dust2"
2 , "de_aztec"
2 , "de_inferno"
27 Jul. 2010 19:04:07 • Antworten •
Yakkul sagt:
Code:
<?php
$result_01 = mysql_query("SELECT * FROM wars WHERE id = '$id'");
while($edit = mysql_fetch_array($result_01 ))
{
$selected_maps = explode(',', $edit['maps']);
$maps = array();
$result = mysql_query("SELECT map FROM maps ORDER BY map");
while($map = mysql_fetch_object($result))
{
$maps[] = array(
'name' => $map->map,
'selected' => in_array($map->map, $selected_maps, true)
);
}
?>
<select name='maps[]' multiple style='width: 200px;' size=10>
<?php foreach ($maps as $map): ?>
<option value="<?php print $map['name']; ?>"<?php if($map['selected'] === true): ?> selected<?php endif; ?>>
<?php print $map['name']; ?>
</option>
<?php endforeach; ?>
</select></td>
</tr>
<?php
}
?>
Das ist jetzt der ganze Relevante Code.
Also meinst du soll ich noch eine extra tabelle machen wo ich die warid mit der ausgewählten maps speicheren kann.
27 Jul. 2010 19:14:41 • Antworten •
Crash sagt:
27 Jul. 2010 21:34:33 • Antworten •
Yakkul sagt:
Habe mal wieder zu Kompliziert gedacht um das Problem zu lösen :>
Hier Lösung:
db warmaps
id warid map
1 14 de_dust
1 14 de_dust2
Code:
$result = mysql_query("SELECT * FROM maps");
while($map = mysql_fetch_array($result))
{
$result_01 = mysql_query("SELECT * FROM warmaps WHERE warid = '$id' AND map ='".$map['map']."'");
$selected_maps = mysql_fetch_array($result_01 );
if($map['map']==$selected_maps['map'])
{
print '<option value=''.$map['map'].'' selected='selected'>'.$map['map'].'</option>';
} else {
print '<option value=''.$map['map'].''>'.$map['map'].'</option>';
}
}
Ich danke dir für deine Hilfe Crash. Ist echt super gewesen von dir ;-) thx
27 Jul. 2010 21:49:11 • Antworten •
Anfang
<<
1
>>
Ende

Hauptmenü




