Marktplatz Downloads Tutorials Forum

Designnation bietet auch:

Mysql & array Problem

Forum » PHP / MySQL » Mysql & array Problem

Hi,

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
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 von: Yakkul
Veröffentlicht am: 25 Jul. 2010
Bookmarks: social bookmarking yigg it Linkarena Technorati Yahoo Mr. Wrong



Antworten

Anfang

<<

1

>>

Ende

Crash sagt:
http://pastie.org/1059456
nicht getestet.

25 Jul. 2010 20:19:14 • Antworten


Yakkul sagt:
Danke schon mal für die schnell Antwort.

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:
explode(...) muss natürlich noch angepasst werden. Also explode(',', $edit['maps']) oder ähnlich. Ich weiß ja nicht was $edit['maps'] ist, auch wenn's verdächtig aussieht.

26 Jul. 2010 17:49:18 • Antworten


Yakkul sagt:
Oh sry vergessen hier das angepasste rein zu stellen

Code:


$selected_maps = explode(',', $edit['maps']);



$edit['maps'] ist eine mysql Abfrage von War.

27 Jul. 2010 07:53:16 • Antworten


Crash sagt:
Lass mich raten, dort stehen in einem Feld die Maps mit Komma getrennt drin? Das verstößt in jedem Fall gegen die Normalformen.

Funktioniert es denn nun wenigstens?

27 Jul. 2010 09:12:42 • Antworten


Yakkul sagt:
Ne funktioniert nicht.
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:
Was heißt denn "funktioniert nicht"?

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_mapstrue)

    

    );

}

?>



<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:
var_dump($selected_maps); und guck ob da deine Maps drin sind.

27 Jul. 2010 21:34:33 • Antworten


Yakkul sagt:
Ok habe es hin bekommen dank deinen Tipp mit der extra tabell.
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

Antworten



Partner: • Designer in ActionFlash HilfeTutorials.dePixelio.deFlashstar BlogLizenzfreie Bilder