2013-02-25 6 views
0

Я имею проблему изменяющуюся варианты выбери, основанную на опции другого выбора х, ниже приведен код, который работает:проблем с несколько Котировки в JavaScript

dropdown2.innerHTML = "<?php echo($SQLFormElements->GetColumnAsOptions('SELECT `field2` FROM `table2` WHERE `field1` = \'8\' ')); ?>"; 

Объяснение:

У меня есть два таблицы базы данных: table1 и table2. table1 имеет field1. table2 имеет поля field2 и field1. SQLFormElements - это php-файл, который выводит элементы html на основе запросов mysql, в данном случае, для элемента select. dropdown1 содержит field1 значения. dropdown2 должен отображать значения field2 на основании значения field1, то есть выбранного элемента dropdown1.

В любом случае, приведенный выше код работает отлично, однако я уже зашиты в отличие от получения значения, потому что, когда я делаю что-то вроде этого:

var selectedItem = document.getElementById("ddField1"); 
dropdown2.innerHTML = "<?php echo($SQLFormElements->GetColumnAsOptions('SELECT `field2` FROM `table2` WHERE `field1` = \'" + selectedItem + "\' ')); ?>"; 

он не работает, ни малейшего представления, почему !? Я немного тупой. Напомним, первый фрагмент кода работает.

Я попробовал следующее:

  • разбор переменного как Integer (field1 в моей таблице целочисленного типа)
  • выходя из цитаты в пункте где
  • выезда из-за котировок, но жесткое кодирование значения в рабочем документе where
+1

Потенциально имеют огромную уязвимость SQL Injection. Никогда не используйте незащищенные пользовательские значения непосредственно в коде SQL! – asawyer

+1

Это не проблема с кавычками, вы жутко пытаетесь смешать JavaScript с PHP. Подумайте, когда и где (по какому) исполнению каждый из них. Решение называется «AJAX», вы найдете много информации об этом в Интернете. – Bergi

+0

Я знаю Ajax, но я только начал изучать PHP и JavaScript. Таким образом, изучение Ajax является своеобразным задним сиденьем прямо сейчас. Но если мне это нужно, я думаю, мне нужно идти по этому пути –

ответ

1

Я думаю, вы пропустили значение в своем выбранном элементе.

var selectedItem = document.getElementById("ddField1"); изменить его var selectedItem = document.getElementById("ddField1").value;

+0

Правильно, см. Ответы здесь: http://stackoverflow.com/questions/1085801/how-to-get-the-selected-value-of-dropdownlist-using-javascript – asawyer

+0

Я собираюсь дать это. И дайте знать. Спасибо :) –

+0

Не работает :( Когда я использую 'alert (selectedItem)', он показывает, что он выбран, однако, когда я соединяю выбранный элемент, он не работает. Гоша, это сводит меня с ума. –

0

Так метод AJAX предложенный @Bergi сделал трюк:

здесь: OnChange событие

dropdown1 в:

onchange="AJAXItemChangeEvent(this.value)" 

.. .

JavaSc НИИИТ Функция

function AJAXItemChangeEvent(selectedValue) 
{ 
    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function(){ 
    document.getElementById("dropdown2").innerHTML = xmlhttp.responseText; 
    }; 

    xmlhttp.open("GET","Getter.php?field1=" + selectedValue,true); 
    xmlhttp.send(); 
} 

...

Getter.php

<?php 
    mysql_connect("dbhost","username","password"); 
    mysql_select_db("dbname"); 

    $field1 = $_GET["field1"]; 
    $sql = "SELECT field2 FROM table2 WHERE field1 = '".$field1."'"; 

    $result = mysql_query($sql); 
    echo "<option></option>"; 

    while($row = mysql_fetch_array($result)) 
    { 
     echo "<option>".$row[0]."</option>";  
    }   
?> 

Примечание - мой Аякса код не обслуживать старых браузеров \ обратной возможности

+0

Это по-прежнему не затрагивает проблему SQL Injection, а также вы можете ввести уязвимость XSS-атаки, если те элементы данных, которые вы пишете в DOM, каким-либо образом поступают с пользовательского ввода. Например - предположим, что я использую клиентский отладчик для редактирования значение выпадающего списка на ''или 1 = 1; отбросить все; --' и затем отправить запрос Ajax. Что произойдет? http://bobby-tables.com/ – asawyer

+0

Aha Я знаю, что есть огромный недостаток безопасности, но это касается только небольшой группы конечных пользователей. Менее 10, и они даже не слышали о Linux раньше. Так что это не проблема. Однако когда я решаю реализовать id, это. Спасибо asawyer для l чернила. –

Смежные вопросы