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

SLADE

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

Ето и демо: http://jsfiddle.net/vTp43/2/
 
Здравей. Благодаря ти за кода, но не мога да разбера едно нещо:

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

Тези nums какво представляват и на тяхно място какво трябва да сложа?
 
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).
 
Ето до къде съм стигнал и до там!

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 файла?
Благодаря предварително!!!
 
Просто е. Генерирай 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 '];';
 
Не става, колега. Дава ми грешка на 43 ред.

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

Не успях да разбера от къде идва проблема, ако може да го погледнеш и да видиш от къде ти идва грешката. Благодаря ти!
 
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 Надявам се вече да проработи.

П.С. надолу също преди ++ изразите съм забравил долара. Иначе след това при мен проработи с тестов масив.
 
Да, наистина е от $. Беше го пропуснал на i++ и j++
Стана и ми излиза формата за избор на област(както ми излизат и областите в нея), обаче от дясно на нея ми излиза:
var nums = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
Нещо има!? Която и област да избера все това си седи. Защо така?
 
SLADE каза:
Да, наистина е от $. Беше го пропуснал на i++ и j++
Стана и ми излиза формата за избор на област(както ми излизат и областите в нея), обаче от дясно на нея ми излиза:
var nums = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
Нещо има!? Която и област да избера все това си седи. Защо така?
Хмм.. Я дай как е кода сега.
 
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 каза:
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 '];';
Не ме разбираш. Това са части от кода. Вмъкни ги където сметнеш за необходимо в твоя скрипт. Генерирането на масива трябва да е където е джаваскрипта.
 
Колега, това е. Просто съм ти дал само необходимия код от който идва проблема...

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>
';
?>

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

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>
';
?>
 

Back
Горе