Dynamiska rullistor (java) med data från MySQL-databas (hämtat med PHP)

Permalänk
Medlem

Dynamiska rullistor (java) med data från MySQL-databas (hämtat med PHP)

Vad jag vill göra:
Jag har en HTML-sida som hämtar och visar information från en MySQL-databas mha PHP. Nu vill jag ha två rullistor där den andra rullistans alternativ ändras beroende på vad som väljs i den första. Alternativen från båda rullistorna ska hämtas från två tabeller i databasen: "foretag" och "uppdrag". Båda dessa tabeller har ett fält som heter "foretag_id".

Den första rullistan ska visa alla företag (fält foretag_foretagsnamn) från foretag-tabellen. När man väljer ett företag anges företagets id som value (foretag_id från foretag-tabellen). Den andra listan ska visa de uppdrag som har samma värde i fältet foretag_id i uppdrag-tabellen.

Hämtning av data från databasen:

$result_foretag = mysql_query("SELECT foretag_foretagsnamn, foretag_id FROM foretag") or die("Kunde inte hämta företagen<br />" . mysql_error()); $result_uppdrag = mysql_query("SELECT uppdrag_id, uppdrag_tjanst, foretag_id FROM uppdrag") or die("Kunde inte hämta uppdragen<br />" . mysql_error());

Java-scriptet:
Hur ska jag skriva för att nånting sånt här ska skrivas ut i headen?:

<SCRIPT LANGUAGE="javascript" TYPE="text/javascript"> function setOptions(chosen) { var selbox = document.form_intervju.tjanst; selbox.options.length = 0; if (chosen == " ") { selbox.options[selbox.options.length] = new Option('Välj företag först',' '); } if (chosen == "200001") { selbox.options[selbox.options.length] = new Option('NamnPåUppdraget','oneone'); selbox.options[selbox.options.length] = new Option('NamnPåUppdraget','onetwo'); } if (chosen == "200002") { selbox.options[selbox.options.length] = new Option('NamnPåUppdraget','twoone'); } ... } </SCRIPT>

Och för listorna på sidan:

<select name="foretag" size="1" onchange="setOptions(document.form_intervju.foretag.options[document.form_intervju.foretag.selectedIndex].value);"> <option value=" " selected="selected"> </option> <?php while($row = mysql_fetch_array( $result_foretag )) { ?> <?php echo "<option" ; echo ' value="'; echo $row['foretag_id']; echo '">'; echo $row['foretag_foretagsnamn']; echo "</option>"; ?> <?php } ?> </select> <select name="tjanst" size="1"> <option value=" " selected="selected">Välj företag först</option> </select>

Permalänk
Medlem

1: Säg aldrig java när du menar javascript, folk blir förvirrade och arga.

2: Dropdowns som byter innehåll baserat på tidigare val:

Detta löser man normalt med ajax om det behövs info från mysql för att skapa de alternativ som ska visas.

Du anropar en phpfil med ett javascriptanrop och säger vad du vill ha för info... Php tar fram all info som behövs, och returnerar till javascriptet - som i sin tur stoppar in det i rätt element.

Jag brukar låta php generera hela select-taggen med alla options, som javascriptet sen stoppar in i något html-element.

Permalänk
Medlem

Tack för svaret. Men kan jag lösa det utan Ajax?

Nu ser mitt java-script ut så här:

<SCRIPT LANGUAGE="javascript" TYPE="text/javascript"> function setOptions(chosen) { var selbox = document.form_intervju.uppdrag; selbox.options.length = 0; if (chosen == " ") { selbox.options[selbox.options.length] = new Option('Valj foretag forst',' '); } <?php while($rowf = mysql_fetch_array( $result_foretag )) { echo 'if (chosen == "'; echo $rowf['foretag_id']; echo '") {'; while($rowu = mysql_fetch_array( $result_uppdrag )) { if($rowf['foretag_id'] == $rowu['foretag_id']) { echo " selbox.options[selbox.options.length] = new Option('"; echo $rowu['uppdrag_tjanst']; echo "','twoone'); "; } } echo " } "; } ?> }

Problemet är att det bara fungerar för det första företaget. När den ska gå igenom det andra företaget verkar det inte som att den inte kan använda "while(rowu = mysql_fetch_array..." igen.

Hur kan jag lösa det?

PHP-koden högst upp på sidan ser ut så här:

$result_foretag = mysql_query("SELECT foretag_foretagsnamn, foretag_id FROM foretag") or die("Kunde inte hämta företagen<br />" . mysql_error()); $result_uppdrag = mysql_query("SELECT uppdrag_id, uppdrag_tjanst, foretag_id FROM uppdrag") or die("Kunde inte hämta uppdragen<br />" . mysql_error());

För att förtydliga:
Det går inte att jämföra rowf['foretag_id'] med rowu['foretag_id'] för det andra företaget, eftersom att den redan har "fetchat" hela $result_uppdrag en gång (om man nu kan säga så).

Som jag förstår det måste jag skicka in det som är hämtat från uppdrag-tabellen till en array, för att sedan loopa igenom den och jämföra ID-numrerna med företagen ID-nummer...

Förstår jag det rätt och i så fall - hur ska jag lösa det?