2015-11-10 3 views
0

У меня есть два выпадающего списка, такие как Item и Product. Когда я выберу Item, соответствующий продукт будет показан в другом обратном направлении из базы данных. И я хочу сохранить такой Идентификатор товара и Идентификатор продукта в другой таблице. Пожалуйста, помогите мне. (Сырье PHP, MySQL, JavaScript)Как показать и сохранить динамическое выпадающее меню из базы данных?

if(isset($_POST['submit'])){      

$sales = htmlspecialchars(stripslashes(trim($_POST['sales']))); 
$regionID = htmlspecialchars(addslashes(trim($_POST['cat']))); 
$branchID = htmlspecialchars(addslashes(trim($_POST['subcat']))); 

if($sales){ 
     $insert = mysql_query("INSERT INTO dailycollection VALUES('', '$regionID', '$branchID', '$sales')"); 
    } 
else{ 
     $msg = "Please fillup all required fields!"; 
}} 
+0

Можете ли вы разместить свой код в своем вопросе? – BRoebie

+0

Помогите мне в кодировании, как динамически извлекать данные из базы данных. –

+1

Ну сначала не используйте функцию 'mysql_ *', поскольку она устарела, используя mysqli_ * или PDO. – BRoebie

ответ

1

Вот простой пример ...., которые описывают, как retrive список продуктов dyanmically в выпадающем списке через пункт ид с помощью Ajax ....

<select id="item_id" name="item_id"> 
    <option value="1">Item_1</option> 
    <option value="2">Item_2</option> 
    <option value="3">Item_3</option> 
    <option value="4">Item_4</option> 
</select> 

<select name="product_id" id="product_id"> 
</select> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#item_id').change(function(e){ 
       e.preventDefault(); 
       var item_id= $(this).val(); 
       $.post('product.php',{item_id:item_id},function(res){ 
         $('#product_id').html(res); 
       }); 
     }) 
    }); 
</script> 

/** product.php **/

$item_id = $_POST['item_id']; 
$sql="SELECT product_id, product_name FROM product where item_id='".$item_id."'"; 
$result=mysql_query($sql); 
if(mysql_num_rows($result)>0){ 
    while($line=mysql_fetch_array($result)){ 
     $str .='<option value="'.$line['product_id'].'">'.$line['product_id'].'</option>'; 
    } 
}else{ 
    $str='no record'; 
} 
echo $str; exit; 
+1

, пожалуйста, не используйте 'mysql_ *' функции, поскольку он устарел, а в PHP 7.0 он полностью удаляется, вместо этого использует 'mysqli_ *' или PDO – BRoebie

0

Позволь мне предварить этот ответ с моим пониманием вашего вопроса: у вас есть две бок о боке выпадающего меню. Выбор опции в одном приведет к тому, что связанная опция в другой станет текущей. Основываясь на ваших тегах, похоже, что вы создаете полный стек. Это хорошо - это будет отличный опыт для вас.

Давайте посмотрим, что я вижу в качестве возможного решения для вас, назад к фронту, повторяя один или два раза, когда мы строим знакомство с системами.

Нижний нижний слой вот ваша база данных MySQL (на данный момент я предполагаю, что это уже построено, поэтому, если это не так, дайте мне знать, и я добавлю соответствующую информацию к этому ответу). Ваш сайт взаимодействует с этой базой данных через PHP или, точнее, с помощью усовершенствованного расширения PHP MySQL (http://php.net/manual/en/book.mysqli.php).

Первый PHP-скрипт, который вам понадобится, - это тот, который получает данные из базы данных. Я брошу несколько примеров кода за строкой и объясню, что все делает.

$itemID = $_POST["itemID"]; 

Мы узнаем через минуту, что это данные, связанные с запросом POST для нашего скрипта. Мы будем использовать это, чтобы сообщить нашей базе данных, какую строку мы ищем.

$mydatabase = new mysqli("databaseserver.com", "mysqlusername", 
    "mysqlpassowrd", "databasename"); 

Эта линия устанавливает соединение между вашим сайтом (сервером, а не клиентом) и сервером базы данных. Если они размещены на одном компьютере, а MySQL работает на локальном хосте, вы можете поместить localhost в качестве местоположения сервера базы данных.

Далее я предлагаю вам проверить документацию по PHP для функций обработки ошибок. Я не хочу становиться слишком зернистым здесь.

После этого выполните ваш запрос.

$result = $mydatabase->query("SELECT * FROM mytable WHERE itemID = " . strval($itemID)); 

Здесь $result имеет тип данных "MySQLi Result." С этим можно справиться больше, но следующий базовый шаг - превратить ваш результат в более дружественные данные. Данные подряда может быть превращен в ассоциативный массив PHP как так:

$row = $result->fetch_assoc(); 

Есть много других вариантов здесь, так что проверить документы, если этот метод не режет его для вас. Прежде чем «вернуть» эти данные с помощью echo, вам нужно проанализировать его в более полезной форме. Например, если в вашей таблице MySQL, которую вы запросили, был только один столбец типа INTEGER, и он содержал идентификатор продукта, вы, вероятно, могли бы уйти с $data = $row["productID"].

ОЧЕНЬ ВАЖНОЕ ПРИМЕЧАНИЕ: Плохо сконфигурированный PHP является одной из наиболее распространенных уязвимостей в Интернете, особенно в тех случаях, когда задействованы POST (подробнее об этом ниже). Пожалуйста, прочитайте документы и убедитесь, что вы принимаете все соответствующие меры предосторожности. Если вы скопируете и вставьте мой пример сверху, вы будете уязвимы для SQL-инъекции.

Перемещение слоя,, вам необходимо получить эти данные на своем клиентском скрипте (см. Javascript). Чтобы узнать, как это сделать, нам нужно создать резервную копию шага и посмотреть, как был выполнен первоначальный запрос. Я рекомендую использовать jQuery для этого; это просто, это популярно, и это хорошо документировано.

Чтобы запустить этот скрипт PHP, о котором мы только что говорили, вам нужно выполнить какой-то запрос. Основываясь на характере этой настройки, похоже, что это будет POST. POST выглядит немного что-то вроде этого в JQuery:

$.post("grabdata.php", {"item":$('#itemID').val()}, function(response){ 
    console.log(response); 
    document.mydata = response; 
} 

Эта функция выводит последние echo из grabdata.php на консоль затем сохранить ответ как свойство вашего document объекта (в основном делает его глобально доступной) , Есть лучшие способы сделать это, чтобы ваше глобальное пространство было чище, но это делает трюк для моего простого примера. Этот средний кусок между ними - это данные, которые вы отправляете в grabdata.php. В вашем случае вы хотели получить идентификатор продукта с определенным идентификатором товара (?) И наоборот. Это пример односторонней версии этого. Проверьте http://api.jquery.com/jQuery.post/ для более подробной информации.

Верхний слой: дисплей. Эта последняя часть довольно прямолинейная. Теперь, когда у вас есть ID продукта хранится в document.mydata, все, что вам нужно сделать, это обновление быстрое значение с JQuery:

$('#productID').val(document.mydata); 

Пожалуйста, имейте в виду, что я скользил много мелких деталей здесь. Я просто хотел дать обзор того, как работает такая система. Пожалуйста, прочитайте документы, с которыми я связался, и вернусь с более конкретными вопросами.

Удачи вам!

+0

Хорошая статья. Я хочу учиться на кодеригенере, пожалуйста, предложите мне хорошую документацию, если у вас есть. Я создал регистрационную форму и регистрационную форму. после входа в систему появится страница продукта. Теперь я хочу показать все свои продукты по категории. Теперь я использую другой контроллер и модель как пользователь. Или я могу кодировать в одном контроллере и модели. –

+0

Я никогда раньше не работал с codeigniter, но документы для самой последней версии можно найти здесь: http://www.codeigniter.com/user_guide/ – Will

+0

Чтобы ответить на другую часть вашего вопроса, это зависит от того, как вы хотите распределить нагрузку между вашим сервером и клиентом. Для более сложной конфигурации сервера отфильтруйте нерелевантные данные в вашем SQL-запросе. Для более сложной установки (которая, вероятно, будет немного более быстрой после загрузки данных), выполнить более широкий запрос и отфильтровать его в своем JavaScript – Will

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