Jeg har fået lavet et "ajax-request", når en select box er valgt, så opdaterer en anden select box afhængigt af hvad der er valgt i den første.
I den første box, vælger admin hvilken hovedkategori, den valgte underside skal tilhøre. Når den er valgt, kører onchange funktionen(ajax, red) og den anden select box dukker så op, og i den er der trukket de mulige positioner fra databasen, som undersiden kan få under det valgte hovedemne. helt fint..
MEN..
Når admin vælger at redigere en underside, og den skal blive under det SAMME hovedemne, får jeg en "position" for meget.
Dvs. den anden selectbos viser f,eks 3 mulige positioner for siden, men der er kun 2 sider. Så admin har altså mulighed for at vælge en højere position, end der faktisk er sider.
Når admin vælger et nyt/andet hovedemne, end siden var i FØR redigering, virker scriptet fint.
Jeg skal på en eller anden måde få adgang til at tjekke om der er skiftet hovedemne eller ej.
Her er min form med select box nr. 1:
- <?php
- global $current_subject_id;
- $SQL ="SELECT id, linknavn FROM subjects WHERE id = $til_subject";
- $result1 = mysqli_query($connection, $SQL);
- while($row = mysqli_fetch_array($result1)){
- $current_subject_id = $row['id'];
- $current_subject_name = $row['linknavn'];
- }
- ?>
- <?php // Her tages position ud fra DB, til brug i drop down liste
- $sqlCommand="SELECT id, linknavn, pos FROM subjects WHERE id > 1 ORDER BY pos ASC";
- $result = mysqli_query($connection, $sqlCommand);
- ?>
- <p class="form_labels"><b>Til Hovedemne:</b></p>
- <select name="new_subjectid" onchange="showUser(this.value)">
- <option value="<?php echo $current_subject_id ;?>"><?php echo $current_subject_name; ?></option>
- <?php
- while($row=mysqli_fetch_array($result)){
- echo '<option value=' . $row['id'] . '>' . $row['linknavn'] . '</option>';
- }
- echo "</select>";
- ?>
- <?php
- mysqli_free_result($result);
- ?>
-
- <?php
- // Her kommer den opdaterede select box ind
- // Den hentes ind fra ajax folderen, via xmlhttpRequest i
- // select_ajax.php
- // '<span id="pos"></span>' - er det object, som js.filen finder og
- // sætter select boxen "ind i"!
- echo '<span id="pos"></span>';
- ?>
i denne linie i formen:
- <option value="<?php echo $current_subject_id ;?>"><?php echo $current_subject_name; ?></option>
Er der den værdi i <option value> som jeg ikke kan få adgang til i den fil der hedder selectbox.php. for at tjekke om det valgte hovedemne er det samme eller om der er skiftet til et nyt.
Her er min ajax fil der kører efter den 1. select box er valgt:
- // JavaScript Document
- function MakeRequestObject(){
- var xmlhttp=false;
- try {
- xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
- } catch (e) {
- try {
- xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
- } catch (E) {
- xmlhttp = false;
- }
- }
- if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
- xmlhttp = new XMLHttpRequest();
- }
- return xmlhttp;
- }
-
- function showUser(cat){
- var xmlhttp=MakeRequestObject();
- xmlhttp.open('GET', 'ajax/selectbox.php?page_position='+cat, true);
- xmlhttp.onreadystatechange=function(){
- if(xmlhttp.readyState==4 && xmlhttp.status==200){
- var content = xmlhttp.responseText;
-
- if ( content ) {document.getElementById('pos').innerHTML = content
- }
- }
- }
- xmlhttp.send()
- }
Her er så den selectbox.php fil, hvor jeg ikke kan hitte ud af at få adgang til at tjekke den option value jeg omtalte lige ovenfor:
- <?php
- require("../../mysql/connection.php");
-
- $sql = "SELECT * FROM pages WHERE subjectid =".$_GET['page_position'];
- $result_from_first_select_list = mysqli_query($connection, $sql);
-
- echo '<td><p class="form_labels"><b>Sidens position:</b></p></td>';
-
- echo '<select name="page_position" id="page_position">';
-
- echo "<option> - Vælg her - </option>";
-
- $position_count = mysqli_num_rows($result_from_first_select_list);
- for($count=1; $count<=$position_count+1; $count++){
- echo '<option value= ' . $count . '>' . $count . '</option>';
- }
-
- echo "</select>";
- ?>
Det jeg gerne vil er noget i stil med dette:
- require("../../mysql/connection.php");
-
- $sql = "SELECT * FROM pages WHERE subjectid =".$_GET['page_position'];
- $result_from_first_select_list = mysqli_query($connection, $sql);
-
- echo '<td><p class="form_labels"><b>Sidens position:</b></p></td>';
-
- echo '<select name="page_position" id="page_position">';
-
- echo "<option> - Vælg her - </option>";
-
- if(($current_subject_id) != ($_GET['page_position'])){
- $position_count = mysqli_num_rows($result_from_first_select_list);
- for($count=1; $count<=$position_count+1; $count++){
- echo '<option value= ' . $count . '>' . $count . '</option>';
- }
- }elseif(($current_subject_id) == ($_GET['page_position'])){
- $position_count = mysqli_num_rows($result_from_first_select_list);
- for($count=1; $count<=$position_count; $count++){
- echo '<option value= ' . $count . '>' . $count . '</option>';
- }
- }
- echo "</select>";
- ?>
Sådan at jeg laver:
$position_count+1; - HVIS det er et NYT hovedemne
OG:
$position_count; - HVIS det er det SAMME hovedemne
Men jeg kan ikke få adgang til: $current_subject_id - har prøvet ovenstående, men det bliver ignoreret, og kun det der står i den første if sætning kører..
Jeg håber der er en ajax haj der har opfanget min sikkert lidt indviklede roman, og som kan se hvad jeg kan gøre!?!
Mange hilsner
Indlæg senest redigeret d. 14.07.2011 23:08 af Bruger #16555