Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 17:36   #1
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию Два динамических списка php

Добрый вечер.

Суть проблемы: имеется БД, в ней 2 таблицы: predmet и zadania. Нужно из predmet брать name_pr и составлять список, затем составлять второй список на основе выбраного в 1 списке. Из второй таблицы беру name_z, предварительно выбрав запросом нужное.

Делал на основе примера с этого сайта.

Удалось вытащить из БД элементы для 1 списка, со вторым же проблема:


Почему не подставляет во второй список и почему квадраты?

Ниже код.

test.php
PHP код:
<?php 
  
include('mysql.php');
  include(
'func.php');
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Chained Select Boxes using PHP, MySQL and jQuery</title>
<script type="text/javascript" src="js/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    $('#wait_1').hide();
    $('#drop_1').change(function(){
      $('#wait_1').show();
      $('#result_1').hide();
      $.get("func.php", {
        func: "drop_1",
        drop_var: $('#drop_1').val()
      }, function(response){
        $('#result_1').fadeOut();
        setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
      });
        return false;
    });
});

function finishAjax(id, response) {
  $('#wait_1').hide();
  $('#'+id).html(unescape(response));
  $('#'+id).fadeIn();
}
</script>
</head>

<body>
<p>
<form action="" method="post">
  
    <select name="drop_1" id="drop_1">
    
      <option value="" selected="selected" disabled="disabled">Выберите предмет</option>
      
      <?php getTierOne(); ?>
    
    </select> 
    
    <span id="wait_1" style="display: none;">
    <img alt="Пожалуйста подождите" src="ajax-loader.gif"/>
    </span>
    <span id="result_1" style="display: none;"></span> 
  
</form>
</p>
<p>
<?php if(isset($_POST['submit'])){
    
$drop $_POST['drop_1'];
    
$name_z $_POST['name_z'];
    
//echo "Вы выбрали ";
    //echo $drop." & ".$name_z;
}
?>
</body>
</html>
func.php

PHP код:
<?php
//**************************************
//     Page load dropdown results     //
//**************************************
function getTierOne()
{
    
$result mysql_query("SELECT DISTINCT name_pr FROM predmet"
    or die(
mysql_error());

      while(
$tier mysql_fetch_array$result )) 
  
        {
           echo 
'<option value="'.$tier['name_pr'].'">'.$tier['name_pr'].'</option>';
        }

}

//**************************************
//     First selection results     //
//**************************************
if($_GET['func'] == "drop_1" && isset($_GET['func'])) { 
   
drop_1($_GET['drop_var']); 
}

function 
drop_1($drop_var)
{  
    include_once(
'mysql.php');
    
$result mysql_query("SELECT name_z FROM predmet,zadania WHERE predmet.name_pr='$drop_var' AND predmet.id_predmet=zadania.id_predmet"
    or die(
mysql_error());
    
    echo 
'<select name="name_z" id="name_z">
          <option value=" " disabled="disabled" selected="selected">Выберите задание</option>'
;

           while(
$drop_2 mysql_fetch_array$result )) 
            {
              echo 
'<option value="'.$drop_2['name_z'].'">'.$drop_2['name_z'].'</option>';
            }
    
    echo 
'</select> ';
    echo 
'<input type="submit" name="submit" value="Кнопка" />';
}
?>
Нужен ли яваскрипт? Он такой же, как и по ссылке вверху.

Запрос проверял в phpmyadmin, выдает то, что надо
HDMI вне форума Ответить с цитированием
Старый 30.03.2012, 18:18   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Квадраты - проблемы с кодировкой (самого файла с кодом, страницы, сервера), AJAX работает с UTF-8.
По поводу работы функции - нужно дебажить, проверьте поэтапно, выводя через echo:
- что приходит в функцию
- какой получается запрос после подстановки всех переменных
- выполняется ли именно такой запрос без ошибок
Баг в одном из этих моментов.
Andkorol вне форума Ответить с цитированием
Старый 30.03.2012, 18:32   #3
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Квадраты - проблемы с кодировкой (самого файла с кодом, страницы, сервера), AJAX работает с UTF-8.
По поводу работы функции - нужно дебажить, проверьте поэтапно, выводя через echo:
- что приходит в функцию
- какой получается запрос после подстановки всех переменных
- выполняется ли именно такой запрос без ошибок
Баг в одном из этих моментов.
В функцию drop_1 приходит $drop_var без ошибок, т.е. то, что выбрал в первом списке.
После запроса name_z вывести не удалось, видимо в этом ошибка? Не могу понять в чем конкретно.

И насчет кодировки: что можно сделать в данном случае? charset=windows-1251" в данном случае помогло только в первом списке, вторые же квадратами. Если аякс работает только с UTF-8, возможно ли, что в этом проблема?
HDMI вне форума Ответить с цитированием
Старый 30.03.2012, 18:41   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от HDMI Посмотреть сообщение
После запроса name_z вывести не удалось, видимо в этом ошибка? Не могу понять в чем конкретно.
Запрос ваш именно в этой функции (не во всяких phpMyAdmin-ах, а именно в вашем коде) - точно возвращает ожидаемый результат?
Выведите его при помощи print_r() - и скопируйте сюда, посмотрим что вам выдается.
Andkorol вне форума Ответить с цитированием
Старый 30.03.2012, 18:47   #5
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Запрос ваш именно в этой функции (не во всяких phpMyAdmin-ах, а именно в вашем коде) - точно возвращает ожидаемый результат?
Выведите его при помощи print_r() - и скопируйте сюда, посмотрим что вам выдается.
Сделал print_r($drop_2['name_z']); Вообще ничего не вывело
HDMI вне форума Ответить с цитированием
Старый 30.03.2012, 18:53   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от HDMI Посмотреть сообщение
Сделал print_r($drop_2['name_z']); Вообще ничего не вывело
Ну так естественно - если б это сработало - у вас бы был нормальный селект.
Убедитесь, что результат запроса вообще что-либо содержит:
echo mysql_num_rows($result); сделайте.

И сам готовый запрос выведите и сюда скопируйте, с подставленными значениями переменных, сформированный именно в коде вашей функции - в нем точно проблема есть.
Andkorol вне форума Ответить с цитированием
Старый 30.03.2012, 19:04   #7
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

mysql_num_rows выдал 0, хех.

print_r($result['name_z']); выдал 1
print_r($result); выдает Resource id #61

Сам запрос после подстановки переменных:

Код:
SELECT name_z FROM predmet,zadania WHERE predmet.name_pr='Социология' AND predmet.id_predmet=zadania.id_predmet

Последний раз редактировалось HDMI; 30.03.2012 в 19:13.
HDMI вне форума Ответить с цитированием
Старый 30.03.2012, 19:21   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от HDMI Посмотреть сообщение
mysql_num_rows выдал 0, хех.
Сам запрос после подстановки переменных:
Код:
SELECT name_z FROM predmet,zadania WHERE predmet.name_pr='Социология' AND predmet.id_predmet=zadania.id_predmet
Значит, нет у вас в БД соответствий условиям этого запроса - раз "mysql_num_rows выдал 0".
Не может один и тот же запрос работать в phpMyAdmin - и при этом не работать в коде.
Этот запрос именно так сформирован вашим кодом, и выведен в браузер через echo - или вы просто сами подставили в него значение из вашего select?
Что-то тут не то...
Andkorol вне форума Ответить с цитированием
Старый 30.03.2012, 19:27   #9
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Сам поражаюсь почему так. Запрос скопировал из браузера

Тот же самый запрос, выполненный в phpmyadmin дает:

Код:
Создан: phpMyAdmin 3.4.7.1 / MySQL 5.1.35-community
SQL-запрос: SELECT name_z FROM predmet,zadania WHERE predmet.name_pr='Социология' AND predmet.id_predmet=zadania.id_predmet LIMIT 0, 30 ; 
Строки: 1 name_z 
Практическая1

Последний раз редактировалось HDMI; 30.03.2012 в 19:29.
HDMI вне форума Ответить с цитированием
Старый 30.03.2012, 19:46   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

А нет ли у вас каких-то заморочек с настройками соединения скриптов с БД? (типа указания SET NAMES ...)?
В какой кодировке у вас сама БД, таблицы в ней?
Что возвращает такой запрос к БД:
SHOW VARIABLES LIKE 'char%';
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В каждый момент на форме отображаются только два списка с именами и фамилиями Johny91 Помощь студентам 4 08.11.2013 14:44
Программная реализация динамического списка динамических очередей Ghost1k Помощь студентам 2 30.08.2011 22:41
реализация упорядоченного динамического списка динамических стеков(Delphi) berezka Помощь студентам 3 28.12.2010 19:40
Соединить два списка в третий Иванов_ДМ Microsoft Office Excel 11 20.08.2009 08:21