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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2016, 21:37   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Связанные списки php

Здравствуйте,уважаемые форумчане. Обращаюсь к Вам за помощью по связанным спискам. Задание состоит в том,чтобы создать форму поиска туров по заданным пользователем критериям. В текущий момент, у меня есть три основные таблицы в бд: Країна (Id,Country),Місто(Id,City,Countr_i d), Тур-країна (Id,country_id,tour_id,city). Я пытаюсь создать два поля для ввода: в первом пользователь выбирает страну (выплывающий список,вывод из БД),после выбора страны в следующем поле идет фильтрация данных и в списке появляются города выбранной страны. К сожалению,в Ajax я новичок и тяжело сразу все разобрать. Делала по примеру http://programilla.com/blog/siteconstruction/231.html
В результате на странице есть только одно поле со списком стран.
PHP код:
<!DOCTYPE html>
<head>
 <link rel="stylesheet" type="text/css" href="seek.css" />

<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript" >

</script>
</head>

<body>


<script type="text/javascript">
var slideshow=new TINY.slider.slide('slideshow',{
    id:'slider',
    auto:3,
    resume:true,
    vertical:false,
    navid:'pagination',
    activeclass:'current',
    position:0
});
</script>




<div id="block2">


 
   <select size="1" name="country" onchange="javascript:selectRegion();" style="float:left;">
        <option value=''>-- Виберіть країну --</option>



<?php
            $dbname 
'admin';
            
$db mysql_connect ("localhost","admin1","1111");
        
mysql_query("SET NAMES 'cp1251'");
            
mysql_select_db ($dbname,$db);
            if (!
$db) {
                echo 
'Ошибка подключения к mysql';
                exit;
            }  

$resmysql_query('SELECT * FROM `Тур-країна` INNER JOIN `Країна` ON `Тур-країна`.`Id`=`Країна`.`Id`');
while(
$row mysql_fetch_assoc($res)){
    
?>  
     <option value="<?=$row['Id']?>"><?=$row['Country']?></option>

    <?
}

 echo
"<br>";

 
?>

</select>
<div name="selectDataRegion" style="float:left;">

<script>
function selectRegion(){
        var id_country = $('select[name="country"]').val();
        if(!id_country){
                $('div[name="selectDataRegion"]').html('');
 
        }else{
                $.ajax({
                        type: "POST",
                        url: "C:\OpenServer\domains\tour\command.php",
                        data: { action: 'showRegionForInsert', id_country: id_country },
                        cache: false,
                        success: function(responce){ $('div[name="selectDataRegion"]').html(responce); }
                });
        };
};
    
</script>
</div>

  
          



</div>

<div id="block4">


</div>


</body>
</html>

PHP код:
<?php

ini_set
(default_charset,"UTF-8");

#include "copy_seek.php"


switch ($_POST['action']){
                
        case 
"showRegionForInsert":
               
                
$rows $DB->select("SELECT * FROM `Місто` WHERE `Місто`.`Countr_id`='$id_country' "$_POST['id_country']);
               foreach (
$rows as $numRow => $row) {
                        echo 
'<option value="'.$row['Id'].'">'.$row['City'].'</option>';
                };
                echo 
'</select>';
                break;
                
      
        
};

?>
Заранее спасибо!

Последний раз редактировалось Вероника99; 23.04.2016 в 21:56.
Вероника99 вне форума Ответить с цитированием
Старый 24.04.2016, 11:45   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Вероника99 Посмотреть сообщение
В результате на странице есть только одно поле со списком стран.
Ну а где, собственно, открывающий тег второго списка с городами?
Даже просто скопипастить с готового примера по ссылке не получается?
PHP код:
case "showCityForInsert":
        echo 
'<select size="1" name="city">';
        
$rows $DB->select('...'); 
Andkorol вне форума Ответить с цитированием
Старый 24.04.2016, 15:30   #3
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

В примере показан поиск страны-региона-города,а в моем случае,нужно только страна-город,поэтому все что было связано с городами -я удалила, а оставила только то,что связано с регионами,так как третий поиск мне не нужен...
Вероника99 вне форума Ответить с цитированием
Старый 24.04.2016, 18:43   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Вероника99 Посмотреть сообщение
В примере показан поиск страны-региона-города,а в моем случае,нужно только страна-город,поэтому все что было связано с городами -я удалила, а оставила только то,что связано с регионами,так как третий поиск мне не нужен...
Ну и какая разница?
Там тоже есть открывающий тег для списка:
PHP код:
case "showRegionForInsert":
    echo 
'<select size="1" name="region" onchange="javascript:selectCity();">';
    
$rows $DB->select('...'); 
Вроде ж достаточно очевидно, что без указания открывающего тега элемент не будет показан на странице.
Andkorol вне форума Ответить с цитированием
Старый 25.04.2016, 12:32   #5
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Спасибо,помогло,что-то я затупила, второе поле появляется после выбора страны,но оно пустое,т.е там нет списка городов,хотя у меня все как в примере,подскажите,пожалуйста,из-за чего может быть проблема?
Вероника99 вне форума Ответить с цитированием
Старый 25.04.2016, 13:04   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Да кто ж знает?
Код у вас, БД у вас.
Может в запросе ошибка.
Может поля в таблице БД не совпадают с теми, которые используются в коде для формирования <option>.
Всё нужно смотреть, выводить на экран, проверять.

P.S.: а, ну и вот это ж глупость у вас в запросе написана:
Цитата:
Сообщение от Вероника99 Посмотреть сообщение
$rows = $DB->select("SELECT * FROM `Місто` WHERE `Місто`.`Countr_id`='$id_country' ", $_POST['id_country']);
В примере по ссылке всё совсем не так, там используются prepared statements:
Цитата:
$rows = $DB->select('SELECT * FROM tbl_region WHERE id_country=? ORDER BY region ASC', $_POST['id_country']);
Разница в том, что в примере в запрос подставляется экранированное значение из формы - а у вас ничего и никуда не подставляется.
В этом минус копипаста чужого кода:
вместо того, чтоб подумать и написать свой код на примере чужого – копипастер тупо копипастит весь чужой код, а потом пытается из него выпилить «ненужное», в 90% случаев неудачно.

Последний раз редактировалось Andkorol; 25.04.2016 в 13:22. Причина: PS
Andkorol вне форума Ответить с цитированием
Старый 26.04.2016, 14:45   #7
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Вы правы,проблема в sql-запросе. Я проверила, переменная id_country правильно передается в файл command.php. Но что же все таки не так,с запросом понять не могу. Скидываю подробное описание структуры моей БД: есть таблица Тур-країна,которая по таким ключам,как ключ на id страны (табл. Країна),ключ на город(табл.Місто) и ключ на описание тура(табл.Тур) создает один тур. Также есть таблица Місто,которая содержит id и названия городов .
PHP код:
switch ($_POST['action']){
                
        case 
"showRegionForInsert":
    
           
//  echo $_POST['id_country'];

              
echo '<select size="1" name="region" onchange="javascript:selectRegion();">';
            
//    echo '<option value="">Все страны</option>';
                
$rows $DB->select('SELECT * FROM `Тур-країна` WHERE `id_country`=?  '$_POST['id_country']);
             
            
              foreach (
$rows as $numRow => $row) {
                        echo 
'<option value="'.$row['Id'].'">'.$row['city'].'</option>';
                };
               
                 echo 
'</select>';
                break;
        
                
      
        
}; 
Изображения
Тип файла: jpg 2.JPG (18.3 Кб, 104 просмотров)
Тип файла: jpg 3.JPG (46.6 Кб, 134 просмотров)
Тип файла: jpg 4.JPG (19.1 Кб, 152 просмотров)
Вероника99 вне форума Ответить с цитированием
Старый 26.04.2016, 15:57   #8
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Разобралась,сделала таким образом,но теперь в списке городов,что-то не так с кодировкой и выводит какие-то кракозябры вместо кириллицы (с латинскими все ок) .
Код:
<?php

ini_set(default_charset,"UTF-8");
#include "copy_seek.php"

  $dbname = 'admin';
            $db = mysql_connect ("localhost","admin","1111");
		mysql_query("SET NAMES 'cp1251'");
            mysql_select_db ($dbname,$db);
            if (!$db) {
                echo 'Ошибка подключения к mysql';
                exit;
     	 }  
		 
		 
		 foreach ($_POST as $key=>$id_country)
			$query=mysql_query("SELECT * FROM `Тур-країна` LEFT JOIN `Місто` ON `Тур-країна`.`country_id`= `Місто`.`Countr_id` WHERE `Тур-країна`.`city`='$id_country'");
			$result=mysql_num_rows($query);
			 echo '<select size="1" name="region" onchange="javascript:selectRegion();">';
			while ($row=mysql_fetch_assoc($query)) {
			  echo '<option value="'.$row['Id'].'">'.$row['City_name'].'</option>';
			 // echo '<option value=\''.$row['Id'].'\'>'.$row['City_name'].'</option>';
			
			}
				echo '</select>';


?>

Последний раз редактировалось Вероника99; 26.04.2016 в 16:10.
Вероника99 вне форума Ответить с цитированием
Старый 26.04.2016, 16:26   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а зачем Вы переопределяете кодовую страницу?
вот эту строчку
Цитата:
Код:
mysql_query("SET NAMES 'cp1251'");
или уберите совсем или замените на
Код:
mysql_query("set names utf8");
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2016, 16:40   #10
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Попробовала два варианта,теперь оно выдает предупреждение Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in command.php on line 20
Вероника99 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
связанные списки Lusin Общие вопросы C/C++ 3 27.08.2011 10:08
связанные списки nikulia Microsoft Office Excel 4 20.02.2011 23:56
Связанные списки. С++ S1av0k Общие вопросы C/C++ 1 21.10.2010 23:08
Связанные списки Shoosh Общие вопросы C/C++ 11 02.10.2010 16:24
Связанные списки Лешка Помощь студентам 1 30.09.2010 21:31