Как става това?

SLADE

Registered
Здравейте. Как става този номер с това: http://912.bg/add/step1
При избор на Област да излезе Населено място и то населеното място да излиза за дадената област, а не всички?
В базата данни съм направил таблица oblast и таблица mqsto, като съм сложил в таблица oblast всички области и в таблица mqsto всички населени места от всички области - доста станаха, но не се сетих за друг начин. Та как може да стане или трябва да се направи по друг начин? Ако може малко помощ ще съм ви много благодарен. Благодаря предварително! :)
 

s_gerrard

Registered
Номера става с джаваскрипт. Хубаво е да използваш някоя библиотека като jQuery, защото ти спестява много работа. При смяна на стойността на селекта, се добавя нов селект със стойностти в зависимост от новата стойност на първия селект.

Ето и демо: http://jsfiddle.net/vTp43/2/
 

SLADE

Registered
Здравей. Благодаря ти за кода, но не мога да разбера едно нещо:

[js]
var regions = $('#regions'),
numbers = $('#numbers').hide(),
nums = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
[/js]

Тези nums какво представляват и на тяхно място какво трябва да сложа?
 

s_gerrard

Registered
SLADE каза:
Здравей. Благодаря ти за кода, но не мога да разбера едно нещо:

[js]
var regions = $('#regions'),
numbers = $('#numbers').hide(),
nums = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
[/js]

Тези nums какво представляват и на тяхно място какво трябва да сложа?
Ами това е многомерен масив. При смяна на елемент от селекта, новия селект получава стойностите на масива с индекс текущата стойност на първия селект. Тоест, ако потребителят избере първата опция (1-3), стойността на този елемент е 0 (value="0"), и затова във новия селект стойностите ще са nums[0] (1, 2, 3).
 

SLADE

Registered
Ето до къде съм стигнал и до там!

PHP:
<?php
include 'config.php';
echo '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/JavaScript" src="jquery-1.4.3.min.js"></script>
<script language="javascript" type="text/javascript" src="over.js"></script>
</head>
<body>
';

$row_oblast=mysql_query("SELECT `id`,`raion` FROM `raioni` WHERE `raion` LIKE '%област%' ");
$countoblast=1;

while($oblast=mysql_fetch_assoc($row_oblast)){

echo "<h2>".$oblast['raion']."</h2><br>";

$idob=$oblast['id'];
$count_raion=1;
$row_raion=mysql_query("SELECT * FROM `raioni` WHERE `master`='$idob' LIMIT 0, 3");

while($raion=mysql_fetch_assoc($row_raion)){
echo $count_raion++."| ".$raion['raion'];
echo "<br><hr><br><br>";
}

}

echo '
</body>
</html>
';
?>

Сега как примерно да го направя така, че в JS файла при nums да са областите, а в PHP файла населените места?
Смисъл такъв как ше стане при избор на област да излезе населеното място?

P. S. От този PHP код, който съм дал съм изкарал всички области и 3 населени места към дадена област.
Някакъв пример в JS файла, ако може? Защото не мисля, че трябва да пиша над 5000 населени места в него!? Трябва да има по-лесен начин с код с който да ги изкарам, както е в PHP файла?
Благодаря предварително!!!
 

s_gerrard

Registered
Просто е. Генерирай javascript масива с php. Друг вариянт е да използваш ajax.

П.С.: Ето какво се опитах да направя:

PHP:
// Генериране на информацията в 2 масива
$row_oblast=mysql_query("SELECT `id`,`raion` FROM `raioni` WHERE `raion` LIKE '%област%' ");

$oblasti = array();
$raioni = array();

while($oblast=mysql_fetch_assoc($row_oblast)) {
  
  $row_raion=mysql_query("SELECT * FROM `raioni` WHERE `master`='$idob' LIMIT 0, 3");
  $raioni2 = array();
  
  while($raion=mysql_fetch_assoc($row_raion)){
    $raioni2[] = $raion['raion'];
  }
  
  $oblasti[] = $oblast['raion'];
  $raioni[] = $raioni2;

}

// Генериране на селекта
echo '<select name="oblast">';
          foreach($oblasti as $oblast) {
            echo '<option>' . $oblast . '</option>';
          }
echo '</select>';

// Генериране на масива
echo 'var nums = [';
      for($i = 0, $len = count($raioni); $i < $len; i++) {
        echo '[';
        for($j = 0, $len2 = count($raioni[$i]); $j < $len2; j++) {
          echo $raioni[$i][$j];
          if($j < $len2 - 1) {
            echo ',';
          }
        }
        echo ']';
        if($i < $len - 1) {
          echo ',';
        }
      }
echo '];';
 

SLADE

Registered
Не става, колега. Дава ми грешка на 43 ред.

Parse error: syntax error, unexpected T_INC, expecting ')' in SITE on line 43

Не успях да разбера от къде идва проблема, ако може да го погледнеш и да видиш от къде ти идва грешката. Благодаря ти!
 

s_gerrard

Registered
SLADE каза:
PHP:
[b]42[/b] echo 'var nums = [';
[b]43[/b]       for($i = 0, $len = count($raioni); $i < $len; i++) {
[b]44[/b]         echo '[';
Както виждаш(и аз сега) забравил съм $-а преди i++. Понеже се занимавах и с други езици и ми стана навик. :D Надявам се вече да проработи.

П.С. надолу също преди ++ изразите съм забравил долара. Иначе след това при мен проработи с тестов масив.
 

SLADE

Registered
Да, наистина е от $. Беше го пропуснал на i++ и j++
Стана и ми излиза формата за избор на област(както ми излизат и областите в нея), обаче от дясно на нея ми излиза:
var nums = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
Нещо има!? Която и област да избера все това си седи. Защо така?
 

s_gerrard

Registered
SLADE каза:
Да, наистина е от $. Беше го пропуснал на i++ и j++
Стана и ми излиза формата за избор на област(както ми излизат и областите в нея), обаче от дясно на нея ми излиза:
var nums = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
Нещо има!? Която и област да избера все това си седи. Защо така?
Хмм.. Я дай как е кода сега.
 

SLADE

Registered
PHP:
// Генериране на информацията в 2 масива
$row_oblast=mysql_query("SELECT `id`,`raion` FROM `raioni` WHERE `raion` LIKE '%област%' ");

$oblasti = array();
$raioni = array();

while($oblast=mysql_fetch_assoc($row_oblast)) {
  
  $row_raion=mysql_query("SELECT * FROM `raioni` WHERE `master`='$idob' LIMIT 0, 3");
  $raioni2 = array();
  
  while($raion=mysql_fetch_assoc($row_raion)){
    $raioni2[] = $raion['raion'];
  }
  
  $oblasti[] = $oblast['raion'];
  $raioni[] = $raioni2;

}

// Генериране на селекта
echo '<select name="oblast">';
          foreach($oblasti as $oblast) {
            echo '<option>' . $oblast . '</option>';
          }
echo '</select>';

// Генериране на масива
echo 'var nums = [';
      for($i = 0, $len = count($raioni); $i < $len; $i++) {
        echo '[';
        for($j = 0, $len2 = count($raioni[$i]); $j < $len2; $j++) {
          echo $raioni[$i][$j];
          if($j < $len2 - 1) {
            echo ',';
          }
        }
        echo ']';
        if($i < $len - 1) {
          echo ',';
        }
      }
echo '];';
 

s_gerrard

Registered
SLADE каза:
PHP:
// Генериране на информацията в 2 масива
$row_oblast=mysql_query("SELECT `id`,`raion` FROM `raioni` WHERE `raion` LIKE '%област%' ");

$oblasti = array();
$raioni = array();

while($oblast=mysql_fetch_assoc($row_oblast)) {
  
  $row_raion=mysql_query("SELECT * FROM `raioni` WHERE `master`='$idob' LIMIT 0, 3");
  $raioni2 = array();
  
  while($raion=mysql_fetch_assoc($row_raion)){
    $raioni2[] = $raion['raion'];
  }
  
  $oblasti[] = $oblast['raion'];
  $raioni[] = $raioni2;

}

// Генериране на селекта
echo '<select name="oblast">';
          foreach($oblasti as $oblast) {
            echo '<option>' . $oblast . '</option>';
          }
echo '</select>';

// Генериране на масива
echo 'var nums = [';
      for($i = 0, $len = count($raioni); $i < $len; $i++) {
        echo '[';
        for($j = 0, $len2 = count($raioni[$i]); $j < $len2; $j++) {
          echo $raioni[$i][$j];
          if($j < $len2 - 1) {
            echo ',';
          }
        }
        echo ']';
        if($i < $len - 1) {
          echo ',';
        }
      }
echo '];';
Не ме разбираш. Това са части от кода. Вмъкни ги където сметнеш за необходимо в твоя скрипт. Генерирането на масива трябва да е където е джаваскрипта.
 

SLADE

Registered
Колега, това е. Просто съм ти дал само необходимия код от който идва проблема...

PHP:
<?php
include 'config.php';
echo '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/JavaScript" src="jquery-1.4.3.min.js"></script>
<script language="javascript" type="text/javascript" src="over.js"></script>
</head>
<body>
';


// Генериране на информацията в 2 масива
$row_oblast=mysql_query("SELECT `id`,`raion` FROM `raioni` WHERE `raion` LIKE '%област%' ");

$oblasti = array();
$raioni = array();

while($oblast=mysql_fetch_assoc($row_oblast)) {
  
  $row_raion=mysql_query("SELECT * FROM `raioni` WHERE `master`='$idob' LIMIT 0, 3");
  $raioni2 = array();
  
  while($raion=mysql_fetch_assoc($row_raion)){
    $raioni2[] = $raion['raion'];
  }
  
  $oblasti[] = $oblast['raion'];
  $raioni[] = $raioni2;

}

// Генериране на селекта
echo '<select name="oblast">';
          foreach($oblasti as $oblast) {
            echo '<option>' . $oblast . '</option>';
          }
echo '</select>';

// Генериране на масива
echo 'var nums = [';
      for($i = 0, $len = count($raioni); $i < $len; $i++) {
        echo '[';
        for($j = 0, $len2 = count($raioni[$i]); $j < $len2; $j++) {
          echo $raioni[$i][$j];
          if($j < $len2 - 1) {
            echo ',';
          }
        }
        echo ']';
        if($i < $len - 1) {
          echo ',';
        }
      }
echo '];';


echo '
</body>
</html>
';
?>

За това ли става въпрос? Да е така цялото... Ако не става въпрос за това и този код явно наистина не мога да те разбера, но се надявам да не е така!
 

s_gerrard

Registered
Мисля, че трябва да стане нещо такова(не съм тествал):

PHP:
<?php
include 'config.php';

// Генериране на информацията в 2 масива
$row_oblast=mysql_query("SELECT `id`,`raion` FROM `raioni` WHERE `raion` LIKE '%област%' ");

$oblasti = array();
$raioni = array();

while($oblast=mysql_fetch_assoc($row_oblast)) {
  
  $row_raion=mysql_query("SELECT * FROM `raioni` WHERE `master`='$idob' LIMIT 0, 3");
  $raioni2 = array();
  
  while($raion=mysql_fetch_assoc($row_raion)){
    $raioni2[] = $raion['raion'];
  }
  
  $oblasti[] = $oblast['raion'];
  $raioni[] = $raioni2;

}

echo '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/JavaScript" src="jquery-1.4.3.min.js"></script>
<script language="javascript" type="text/javascript" src="over.js"></script>
<script type="text/javascript">
$(function() {
    var oblast = $('#oblast'),
        region = $('#region').hide(),
        // Генериране на масива
        echo 'var regioni = [';
              for($i = 0, $len = count($raioni); $i < $len; $i++) {
                echo '[';
                for($j = 0, $len2 = count($raioni[$i]); $j < $len2; $j++) {
                  echo $raioni[$i][$j];
                  if($j < $len2 - 1) {
                    echo ',';
                  }
                }
                echo ']';
                if($i < $len - 1) {
                  echo ',';
                }
              }
        echo '];';
    
    oblast.change(function() {
        if(this.value === 'hint') {
            region.hide();
            return;
        }
        
        var val = parseInt(this.value);
        
        if(val >= 0 && val <= regioni.length) {
            region.empty();
            
            for(var i = 0; i < regioni[val].length; i++) {
                $('<option value="' + regioni[val][i] + '">' + regioni[val][i] + '</option>').appendTo(numbers);
            }
            
            region.show();
        } else {
            region.hide();
        }
    });
    
});
</script>
</head>
<body>
';


// Генериране на селекта
echo '<select name="oblast" id="oblast">
          <option value="hint">Hint</option>';
          for($i = 0, $len = count($oblasti); $i < $len; $i++) {
            echo '<option value="' . $i . '">' . $oblasti[$i] . '</option>';
          }
echo '</select>';
echo '<select id="region"></select>';




echo '
</body>
</html>
';
?>
 

Горе