Малко помощ за меню и mySQL

afreto

New member
Здравейте. Трябва ми малко помощ относно съставянето на една система(или там както се казва). Идеята ми е да направя едно дроп-даун меню което да извлича стойност от определена таблица в mySQL. например:
menu1.png

При избор на район Бургас да се покаже второ меню с градовете в този район.
menu2.png

Вече при избор на град да се покаже друга информация.Структурата на таблицата е следната
за район:
table%20region.png

за град:
table%20grad.png


Надявам се да съм обяснил що-годе добре и да сте ме разбрали правилно.

Забележка: Търсих в нета и открих доста кодове за извличане да информация от таблица но нищо не ми се получава, или кода е грешен или съм много тъп та не мога да го преправя.

Предварително благодаря.
 
Re: Малко помощ за меню и mySQL

Имаш 2 варианта (поне аз за толкова се сещам).
Единия е селекта ти да има събмит при смяна на избраното value:
Код:
<select onchange="this.form.submit();" name="region"></select>
Това ще ти презареди страницата като ти събмитне формата.

Другия е при onchange да имаш JS функцийка, която ти прави post request, извлича динамично данните спрямо кое си избрал и ти показва втория дропдаун и т.н.
С jQuery съм ги правил доста подобни.
А първия вариант е някак по-НЕбъгав, но по-кофти за потребителя, че му се презарежда цялата страница.

Ако обаче имаш проблем още с извличането на данните и предвид колко е проста тая заявка спрямо всичко останало да заработи.. то по-добре намери някой познат да ти го направи набързо, вместо да се мъчиш. Или поне да ти покаже.

A и не си казал на PHP ли го пишеш? Въпреки, че почти се подразбира. 🙂
 
Последно редактирано:
Re: Малко помощ за меню и mySQL

@BornToDrink и аз преди време се наложи да правя нещо подобно с jQuery, намерих скрипт, но някак не ми вървеше като хората, можеш ли да постнеш някакъв примерен код, който със сигурност работи.

При мен проблема беше, че всичко си работеше, но при субмит променливата, не получаваше стойността и съответно не субмитваше нищо като резултат да речем в колона region 😉

Ще съм ти много благодарен, че тоя jQuery някак не го тача, въпреки, че все по-често се налага да се ползва в някой ситуации 🙂
 
Re: Малко помощ за меню и mySQL

Имаш 2 варианта (поне аз за толкова се сещам).
Единия е селекта ти да има събмит при смяна на избраното value:
Код:
<select onchange="this.form.submit();" name="region"></select>
Това ще ти презареди страницата като ти събмитне формата.

Другия е при onchange да имаш JS функцийка, която ти прави post request, извлича динамично данните спрямо кое си избрал и ти показва втория дропдаун и т.н.
С jQuery съм ги правил доста подобни.
А първия вариант е някак по-НЕбъгав, но по-кофти за потребителя, че му се презарежда цялата страница.

Ако обаче имаш проблем още с извличането на данните и предвид колко е проста тая заявка спрямо всичко останало да заработи.. то по-добре намери някой познат да ти го направи набързо, вместо да се мъчиш. Или поне да ти покаже.

A и не си казал на PHP ли го пишеш? Въпреки, че почти се подразбира. 🙂

Благодаря за бързия отговор, но проблема е там че незнам как да подредя кода.

Код:
<?php
$dbservertype='mysql';
$servername='localhost';
// username and password to log onto db server
$dbusername='username';
$dbpassword='pass';
// name of database
$dbname='dbname';
connecttodb($servername,$dbname,$dbusername,$dbpassword);
function connecttodb($servername,$dbname,$dbuser,$dbpassword)
{
global $link;
$link=mysql_connect ("$servername","$dbuser","$dbpassword");
if(!$link){die("Could not connect to MySQL");}
mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
}

?>
до тук добре Свързва се с базата или поне не ми изкарва грешка 🙂
След това незнам как да изкарам резултатите в меню може би нещо от сорта:
Код:
<?php
$query  = "SELECT [COLOR="Red"]name, subject, message[/COLOR] FROM [COLOR="red"]contact[/COLOR]";
$result = mysql_query($query);

while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    echo "<select>";
  echo "<option>" . $row['[COLOR="red"]FirstName[/COLOR]'] . "</option>";
  echo "</select>";
} 

?>
В червено са примерни данните. също незнам какво трябва да напиша на мястото на ['FirstName']
 
Re: Малко помощ за меню и mySQL

Успях малко да се справя:
Код:
<?php
$con = mysql_connect("localhost","user","pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("test", $con);

$result = mysql_query("SELECT * FROM locality_place_copy");

echo "<select>";

while($row = mysql_fetch_array($result))
  {
  
  echo "<option>" . $row['locality_place_name_bg'] . "</option>";
  
  }
echo "</select>";

mysql_close($con);
?>

До тук добре само че в менюто ми изкарва "? ? ?" таблиците са ми енкодинг utf8_general_ci.
Какво value="" да му дам че да отвори второ подобно меню с градовете?
 
Re: Малко помощ за меню и mySQL

аз уж съм и програмист но не успяхда се ориентирам. Защо.. locality_regison_country_id е навсякъде "1" . Не би ли трябвало, градовете в областта да имати колона с id, на областта или общината?
 
Re: Малко помощ за меню и mySQL

аз уж съм и програмист но не успяхда се ориентирам. Защо.. locality_regison_country_id е навсякъде "1" . Не би ли трябвало, градовете в областта да имати колона с id, на областта или общината?

locality_regison_country_id отговаря на дъравата но тази таблица не съм я дал защото не мисля да я използвам.

table_dyrjava.png
 
Re: Малко помощ за меню и mySQL

@BornToDrink и аз преди време се наложи да правя нещо подобно с jQuery, намерих скрипт, но някак не ми вървеше като хората, можеш ли да постнеш някакъв примерен код, който със сигурност работи.

При мен проблема беше, че всичко си работеше, но при субмит променливата, не получаваше стойността и съответно не субмитваше нищо като резултат да речем в колона region 😉

Ще съм ти много благодарен, че тоя jQuery някак не го тача, въпреки, че все по-често се налага да се ползва в някой ситуации 🙂
Сещам се за 3 сайта в момента, където съм правил дропдауни динамични, но на двата го разкарах (сложих optgroup 😀 ), а третия клиента го смъкна преди време.
Всъщност на единия го бях правил с някакъв намерен код от нета и беше сравнително омотан.
С jQuery ми се получава адски лесно, виж тук:
http://api.jquery.com/jQuery.post/

Примерите са мисля доста добри, ако нещо имаш проблем, драсни, може и на ПМ. 🙂

ps: ето един, който съм ползвал преди:

Код:
function login_check(login_name,login_pass) {
	$.post("some_path/login_check.php", {loginName: ""+login_name+"", loginPass: ""+login_pass+""}, function(data){
		if(data.length > 0) {
			if (data == "true") {
				window.location='http://mysite.com/index.php';
			}else {
				$('#error_message').show();
				$('#error_message').html(data);
			}
		}
	});
}
В php-то ти идват като $_POST['loginName'] и $_POST['loginPass'].
От там нататък чеквам логина и връщам стринг - "true" ако е ОК и редиректвам нанякъде } else { принтвам грешката в контейнер с ID #error_message.
Е може да си поиграеш всякак де.
A "връщането" от php-то си е просто echo или чист html.
 
Последно редактирано:
Re: Малко помощ за меню и mySQL

Имаш 2 варианта (поне аз за толкова се сещам).
Единия е селекта ти да има събмит при смяна на избраното value:
Код:
<select onchange="this.form.submit();" name="region"></select>
Това ще ти презареди страницата като ти събмитне формата.

Другия е при onchange да имаш JS функцийка, която ти прави post request, извлича динамично данните спрямо кое си избрал и ти показва втория дропдаун и т.н.
Дай някакъв подобен скрипт ако не е проблем, защото мен хич ме няма в програмните езици - камо ли JS или PHP. то май други не ми трябват ама карай 🙂
 
Re: Малко помощ за меню и mySQL

@afreto това с "? ? ?" ти излиза така защото връзката ти с дб-то е кодирана с друг енкодинг, а ти вероятно си попълвал таблицата с помоща на phpmyadmin, единият от вариантите е да ги експортнеш и вкараш с помоща на php фаил и тогава ще ти излизат правилно енкоднати, аз поне така си го направих, за да не си играя да бърникам из сървърите.

@BornToDrink, благодаря, ще разгледам адреса който ми даде и ще видя дали ще се справя 🙂
 
Re: Малко помощ за меню и mySQL

@afreto това с "? ? ?" ти излиза така защото връзката ти с дб-то е кодирана с друг енкодинг, а ти вероятно си попълвал таблицата с помоща на phpmyadmin, единият от вариантите е да ги експортнеш и вкараш с помоща на php фаил и тогава ще ти излизат правилно енкоднати, аз поне така си го направих, за да не си играя да бърникам из сървърите.

@BornToDrink, благодаря, ще разгледам адреса който ми даде и ще видя дали ще се справя 🙂

Ми да ти кажа честно незнам с какъв енкодинг се свързва, знам само че тези таблици са ср-1251. иначе съм ги импортнал от sql файл. Някакъв начин да знаеш да ги оправя.

Относно скрипта някой има ли идея как да му задам така че при избор на определен район да ми отвори второ меню с опция за избор на град от този район.

PS:

Код:
$result = mysql_query("SELECT * FROM locality_region_copy");

echo "<select>";

while($row = mysql_fetch_array($result))
  {
  
  echo "<option value="[COLOR="Red"].$row1.[/COLOR]">" .$row['locality_region_name_bg']. "</option>";
  
  }
echo "</select>";



$result1 = mysql_query("SELECT * FROM locality_place_copy [COLOR="red"]where locality_place_copy=...[/COLOR]");

echo "<select>";

while($row1 = mysql_fetch_array($result1))
  {
  
  echo "<option>".$row1['locality_place_name_bg']."</option>";
  
  }
echo "</select>";
Може би трябва да е нещо такова. но нз какво да му задам вместо .$row1. така че да избере ид-то на района и след това можеби where locality_place_id=... ...

незнам. хич ме няма в mySQL и php и дори незнам дали съм на правилна посока.
 
Последно редактирано:
Re: Малко помощ за меню и mySQL

Оправих се.

Демо

Ако на някой му трябва ще постна и кодовете на страниците.
остана само въпроса с ? ? ?. Как да направя така че да си ги изкарва на Български. Ако някой мойе да помогне ще съм ви много благодарен.
 
Re: Малко помощ за меню и mySQL

след конект към бд:
Код:
mysql_query("SET NAMES CP1251");
 
Re: Малко помощ за меню и mySQL

А да те питам, пробвал ли си дали реално субмитва нещо, след като избереш регион и град, понеже на мен проблема ми беше, че след това не субмитваше нищо 🙂 тоест все едно нямаше нищо като стойност 🙂
 
Re: Малко помощ за меню и mySQL

след конект към бд:
Код:
mysql_query("SET NAMES CP1251");

Много ти благодаря.
след слагане на charset=utf8 и mysql_query("SET NAMES utf8"); вече всичко си излиза на БГ
 
Re: Малко помощ за меню и mySQL

Справих се с дропдаун менюто (макар и малко аматьорски), но имам няколко грешки или по точно проблема с които не мога да се справя сам:

1. Как може в менютата първият град или район да са селектирани по подразбиране, защото на този етап не мойе да се избира първата позиция в менюто (малко смотано го обясних). С две думи как да мога да избирам Благоевград без да се налага първо да избирам друг?

2. След избора на град ми показва таблица с записана инфозмация за избрания град. да но ми изчезва опцията да мога да избера отново град?

Ето и кодовете:
dropdown.php
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title></title>       
    </head>
    <body>
<?php
include("header.php");
include("config.php");
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
mysql_query("SET NAMES utf8");
echo '<table align="center"><tr><td><center><form method="post" action="">Регион:<select name="category" onChange="CategoryGrab('."'".'ajaxcalling.php?locality_region_id='."'".'+this.value);">';
$result = mysql_db_query($dbname, "SELECT * FROM locality_region_copy");
$nr=0;
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
 $nr++;
 echo "<option value=".'"'.$row['locality_region_id'].'" >'.$row['locality_region_name_bg']."</option>";
}
echo '</select>'."\n";
echo '<div id="details">Град:<select name="details" width="100" >';

$result = mysql_db_query($dbname, "SELECT * FROM locality_place_copy WHERE locality_place_id=".$ID);
	while($row = mysql_fetch_array($result, MYSQL_ASSOC))
	{
		 echo "<option value=".$row['locality_place_id'].">".$row['locality_place_name_bg']."</option>";
	}
echo '</select></div>';
echo '</form></td></tr></table>';
mysql_close($conn);
include("footer.php");
?>    
    </body>
</html>
ajaxcalling.php
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title></title>
    </head>
    <body>
<?php
include("config.php");
$ID=$_REQUEST['locality_region_id'];
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
mysql_query("SET NAMES utf8");
echo '<table align="center"><tr><td><center><form method="post" action="">Град:<select name="category" onChange="CategoryGrab('."'".'ajaxcalling1.php?locality_place_id='."'".'+this.value);">';
$result = mysql_db_query($dbname, "SELECT * FROM locality_place_copy WHERE locality_place_region_id=".$ID);
$nr=0;
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
 $nr++;
 echo "<option value=".'"'.$row['locality_place_id'].'" >'.$row['locality_place_name_bg']."</option>";
}
echo '</select>'."\n";

echo '</form></td></tr></table>';
mysql_close($conn);
?>
    </body>
</html>
ajaxcalling1.php
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title></title>
    </head>
    <body>
<?php
include("config.php");
$ID=$_REQUEST['locality_place_id'];
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
mysql_query("SET NAMES utf8");
$result = mysql_db_query($dbname, "SELECT * FROM asd WHERE content_id=".$ID);
echo "<table border='1'><tr><th>Описание</th></tr>";
	while($row = mysql_fetch_array($result, MYSQL_ASSOC))
  {
  echo "<tr>";
   echo "<td>".$row['content']."</td>";
   echo "</tr>";
  }
echo "</table>";
mysql_close($conn);
?>
    </body>
</html>

За момента са активни само първите три града от район Благоевград.
За сега толкова.

ДЕМО

Предварително благодаря на отзовалите се.
 

Back
Горе