det med arrays fatter jeg simpelthen bare ikke, og nu bliver jeg nødt til at spørge...
Jeg har to tabeller - varer og varegrupper. I et administrationsmodul, opdateres tabellen varer, hvor der bl.a. skal kunne skiftes varegruppe for den valgte vare. Opdateringen foregår ved, at jeg udskriver alle varerne til skærmen, og ud for hver vare, skal der så være en dropdown (<select>), hvorfra eventuel ny varegruppe kan vælges.
Hvis jeg har eks. 600 varer, vil jeg - som jeg programmerer i dag - skulle lave 601 forespørgsler til databasen (1 der henter varerne fra "varer", og en for hver record, der henter "varegrupper". Dette kan jeg vel korte ned til to queries - en til varegrupper og en til varer.
Jeg kunne derfor godt tænke mig at få at vide, hvordan jeg kan lave et array, hvori jeg lægger varegruppeid og varegruppenavn, så jeg kan lave en dropdown (select) i den EFTERFØLGENDE udskrift af varere til skærmen.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
$result = mysql_query("SELECT * FROM varegrupper") or die (mysql_error()); while ($row = mysql_fetch_array($result)) { $option .= "<option value=\"".$row[varegruppeid]."\">".$row[varegruppeid]."</option>\n"; }
Ja - den er jeg godt med på, og det er sådan jeg gør idag. Men på denne måde, skal jeg lave alt for mange forespørgsler, hvilket vil sænke sidens hastighed.
Jeg vil gerne gøre sådan her: 1) Lav en forespørgsel i varegrupper, og læg records i et array (varegruppeid og varegruppenavn). 2) Lav en forespørgsel i varer, og udskriv til skærm
Der kommer noget tables-værk ind i udskrvningen, men simplificeret, skal det se sådan her ud:
$q_varer = $("SELECT * FROM varer ORDER BY varenavn ASC"); while($varer = mysql_fetch_assoc($q_varer)) { echo '<tr>'; echo '<td>'.$varer[varenavn].'</td>'; echo '<td>* * * <select>...</select></td>'; echo '</tr>'; }
Dermed kan du se, at jeg med din løsning bliver nødt til at forespørge en gang for hver record - alt for tungt :-)
det skal du da ikke du laver den 1 gang og bruger variablen resten af vejen ned
$result = mysql_query("SELECT * FROM varegrupper") or die (mysql_error()); while ($row = mysql_fetch_array($result)) { $option .= "<option value=\"".$row[varegruppeid]."\">".$row[varegruppeid]."</option>\n"; }
$q_varer = $("SELECT * FROM varer ORDER BY varenavn ASC"); while($varer = mysql_fetch_assoc($q_varer)) { echo '<tr>'; echo '<td>'.$varer[varenavn].'</td>'; echo '<td>* * * <select>$option</select></td>'; echo '</tr>'; }
Smart nok :-) Og jo egentlig simpelt, når man ser det....
Til gengæld har jeg så næste problem nu. Normalt laver jeg noget a la nedenstående, som sætter dropdown'en til at have valgt den varegruppe som er valgt i forvejen: if($varer[varegruppeid] == $row[varegruppeid]) { echo '<option value="'.$row[varegruppeid].'" selected>'.$varer[varenavn].'</option>'; } else { echo '<option value="'.$row[varegruppeid].'">'.$varer[varenavn].'</option>';
hmm tja du kan enten lave en ekstra <option value="$row[varegruppeid]">ingen ændring</option> eller også skal du bruge et array men så skal du også lave en ekstra while løkke hver gang
Hmmm. Okay - så er jeg nærmest tilbage hvor jeg startede :-|
Hvad nu, hvis man lavede endnu et array før whileløkken, hvor man hentede vareid og varegruppeid fra *varer*, og så matchede dem med forespørgslen i whileløkken? Jeg kan ikke finde ud af det med arrays, men hvis man kunne registrere vareid og varegruppeid i en ny array, kan man vel godt matche, og hvis det så matcher udskrive det ene, eller det andet....?
det sted du vil have at option tagget skal være SELECTED ændre du bare med str_replace()
$result = mysql_query("SELECT * FROM varegrupper") or die (mysql_error()); while ($row = mysql_fetch_array($result)) { $option .= "<option value=\"".$row[varegruppeid]."\">".$row[varegruppeid]."</option>\n"; // skal den ikke skrive et gruppe navn i option tagget? }
$q_varer = $("SELECT * FROM varer ORDER BY varenavn ASC"); while($varer = mysql_fetch_assoc($q_varer)) { $option_sel = str_replace("<option value=\"".$varer[varegruppeid]."\">", "<option value=\"".$varer[varegruppeid]."\" SELECTED>", $option)
Det var i hvert fald det jeg gerne ville have den til at gøre. Men det gør den desværre ikke...
Nu har jeg ikke lige lavet en konstruktion a la den du foreslår før, men umiddelbart kan jeg ikke se, at vi tjekker om der skal udskrives det ene med det andet.
I min eksempel ovenfor, er der to værdier - 58 og 70. Hvor i koden tjekker vi, om $varer[varegruppeid] == 58 eller 70?
det gør du hellere ikke for før det bliver udskrevet laver du en ny variabel hvor du ændre det tag som har et bestemt id nummer til selected og resten forbliver som normale og derefter udskriver du den nye variabel ($option_sel) en god ide vil være at unset($option_sel) efter du har udskrevet den for ellers vil den ændre den næste hvis den ikke finder et id der passer
Hvis jeg udskriver alle records med følgende: $option_sel = str_replace("<option value=\"".$q_kategorier[kat_id]."\">", "<option value=\"".$q_kategorier[kat_id]."\" selected>", $option);
Ja, men jeg har bare lige udskrevet det uden for en select, for at se, hvad det gav af indhold.
Jeg kunne godt have tænkt mig at konstatere, at der ville være forskel i udskrifterne, så de matchede varegrupperne.
Hvad gør vi tror du? Jeg slipper måske alligevel ikke for at lave en ny forespørgsel i whileløkken....?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.