I ... może się komuś przyda. Wcześniej miałem problem z kodem, ale w końcu udało mi się z tym uporać, więc postanowiłem zaktualizować post o poprawny kod.
Niestety przy próbie jego przeróbki na obsługę pojedynczej tabeli mam problem, którego nie mogę rozwiązać. Po wybraniu ostatniego SELECT'a wyświetla wszystkie wartości z zadanym parametrem bez uwzględnienia parametru z wcześniejszej kategorii.
Plik index.php<?php
include_once 'dbconfig.php';
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css" />
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
// function to get all records from table
function getAll(){
$.ajax
({
url: 'pokaz.php',
data: 'action=showAll',
cache: false,
success: function(r)
{
$("#display").html(r);
}
});
}
getAll();
// function to get all records from table
$(".site").change(function()
{
var site=$(this).val();
var dataString = 'id='+ site + '&action=site';
$.ajax
({
type: "POST",
url: "get_menu.php",
data: dataString,
cache: false,
success: function(html)
{
$(".menu").html(html);
}
});
$.ajax
({
type: "POST",
url: "pokaz.php",
data: dataString,
cache: false,
success: function(r)
{
$("#display").html(r);
}
});
});
$(".menu").change(function()
{
var id=$(this).val();
var dataString = 'id='+ id + '&action=menu';
$.ajax
({
type: "POST",
url: "get_categ.php",
data: dataString,
cache: false,
success: function(html)
{
$(".categ").html(html);
}
});
$.ajax
({
type: "POST",
url: "pokaz.php",
data: dataString,
cache: false,
success: function(r)
{
$("#display").html(r);
}
});
});
$(".categ").change(function()
{
var id=$(this).val();
var dataString = 'id='+ id + '&action=categ';
$.ajax
({
type: "POST",
url: "get_categ.php",
data: dataString,
cache: false,
success: function(html)
{
$(".links").html(html);
}
});
$.ajax
({
type: "POST",
url: "pokaz.php",
data: dataString,
cache: false,
success: function(r)
{
$("#display").html(r);
}
});
});
});
</script>
<style>
label
{
font-weight:bold;
padding:10px;
}
div
{
margin-top:20px;
}
select
{
width:150px;
height:25px;
}
</style>
</head>
<body>
<center>
<div>
<label>Strona :</label>
<select name="site" class="site">
<option selected="selected">--Strona--</option>
<?php
include_once 'get_site.php';
?>
</select>
<label>Dział :</label> <select name="menu" class="menu">
<option selected="selected">--Dział--</option>
</select>
<label>Temat :</label> <select name="categ" class="categ">
<option selected="selected">--Temat--</option>
</select>
</div>
<div class="" id="display">
<!-- Records will be displayed here -->
</div>
</center>
</body>
</html>
Plik pokaz.php<?php
include('dbconfig.php');
$action = $_REQUEST['action'];
if ($action=='showAll')
{
$id = "0";
}
else $id=$_POST['id'];
if($action=="showAll"){
$stmt=$DB_con->prepare('SELECT * FROM slist GROUP BY site');
$stmt->execute();
}
elseif($action=="site"){
$stmt=$DB_con->prepare('SELECT menu FROM slist WHERE site=:id GROUP BY menu ORDER BY menu');
$stmt->execute(array(':id'=>$id)); }
elseif($action=="menu"){
$stmt=$DB_con->prepare('SELECT categ FROM slist WHERE menu=:id GROUP BY categ ORDER BY categ');
$stmt->execute(array(':id'=>$id)); }
elseif($action=="categ"){
$stmt=$DB_con->prepare('SELECT links FROM slist WHERE categ=:id GROUP BY categ ORDER BY links');
$stmt->execute(array(':id'=>$id)); }
else{
$stmt=$DB_con->prepare('SELECT * FROM slist GROUP BY site');
$stmt->execute();
}
?>
<div class="row">
<?php
if($stmt->rowCount() > 0)
{
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
?>
<?php
if($action=="showAll")
{
?>
<div class="col-xs-3">
<div style="border-radius:3px; border:#cdcdcd solid 1px; padding:22px;">Strona::
<?php echo $action; ?> ::
<?php echo $site; ?></div><br />
</div>
<?php
}
elseif($action=="site")
{
?>
<div class="col-xs-3">
<div style="border-radius:3px; border:#cdcdcd solid 1px; padding:22px;">Strona::
<?php echo $action; ?> ::
<?php echo $menu; ?></div><br />
</div>
<?php
}
elseif($action=="menu")
{
?>
<div class="col-xs-3">
<div style="border-radius:3px; border:#cdcdcd solid 1px; padding:22px;">Dział::
<?php echo $action; ?> ::
<?php echo $categ; ?></div><br />
</div>
<?php
}
elseif($action=="categ")
{
?>
<div class="col-xs-3">
<div style="border-radius:3px; border:#cdcdcd solid 1px; padding:22px;">Temat::
<?php echo $action; ?> ::
<?php echo $links; ?></div><br />
</div>
<?php
}
}
} else
{
?>
<div class="col-xs-3">
<div style="border-radius:3px; border:#cdcdcd solid 1px; padding:22px;">Wszystko::
<?php echo $action; ?> ::
<?php echo ""; ?></div><br />
</div>
<?php
}
?>
</div>
BazaINSERT INTO `slist`
(`id`, `site`, `menu`, `categ`, `links`) VALUES
(1, 'MarPlo.net', 'Courses', 'Ajax', 'www.marplo.net/ajax/'),
(4, 'MarPlo.net', 'Courses', 'JavaScript', 'www.marplo.net/javascript/'),
(7, 'MarPlo.net', 'Courses', 'English', 'www.marplo.net/engleza/'),
(10, 'MarPlo.net', 'Anime', 'Aspecte de viata', 'www.marplo.net/anime/aspecte_de_viata'),
(13, 'MarPlo.net', 'Anime', 'Comedie', 'www.marplo.net/anime/comedie'),
(16, 'MarPlo.net', 'Anime', 'Romantic', 'www.marplo.net/anime/romantic'),
(19, 'CoursesWeb.net', 'Games', 'Adventure-Mystery', 'http://coursesweb.net/games/adventure'),
(22, 'CoursesWeb.net', 'Games', 'Logic and Intuition', 'http://coursesweb.net/games/logic-perspicacity'),
(25, 'CoursesWeb.net', 'PHP-MySQL', 'Lessons', 'http://coursesweb.net/php-mysql/'),
(28, 'CoursesWeb.net', 'PHP-MySQL', 'Tutorials', 'http://coursesweb.net/php-mysql/tutorials_t'),
(31, 'CoursesWeb.net', 'JavaScript', 'Lessons', 'http://coursesweb.net/javascript/'),
(34, 'CoursesWeb.net', 'JavaScript', 'Tutorials', 'http://coursesweb.net/javascript/tutorials_t'),
(37, 'CoursesWeb.net', 'JavaScript', 'jQuery', 'http://coursesweb.net/jquery/jquery-course'),
(40, 'CoursesWeb.net', 'Flash-AS3', 'Flash Lessons', 'http://coursesweb.net/flash/lessons'),
(43, 'CoursesWeb.net', 'Flash-AS3', 'ActionScript Lessons', 'http://coursesweb.net/actionscript/lessons-as3'),
(46, 'CoursesWeb.net', 'Flash-AS3', 'Tutorials', 'http://coursesweb.net/flash/tutorials_t');
Plik get_site.php<?php
$stmt=$DB_con->prepare("SELECT site FROM slist GROUP BY site");
$stmt->execute();
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
?>
<option value="
<?php echo $row['site']; ?>">
<?php echo $row['site']; ?></option>
<?php
}
?>
Plik get_menu.php<?php
include('dbconfig.php');
if($_POST['id'])
{
$id=$_POST['id'];
$action=$_POST['action'];
$stmt=$DB_con->prepare('SELECT menu FROM slist WHERE site=:id GROUP BY menu ORDER BY menu');
$stmt->execute(array(':id' => $id)); ?><option selected="selected">Dział :</option><?php
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
?>
<option value="
<?php echo $row['menu']; ?>">
<?php echo $row['menu']; ?></option>
<?php
}
}
?>
Plik get_categ.php<?php
include('dbconfig.php');
if($_POST['id'])
{
$id=$_POST['id'];
$action=$_POST['action'];
$stmt=$DB_con->prepare('SELECT categ FROM slist WHERE menu=:id GROUP BY categ ORDER BY categ');
$stmt->execute(array(':id' => $id)); ?><option selected="selected">Temat :</option><?php
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
?>
<option value="
<?php echo $row['categ']; ?>">
<?php echo $row['categ']; ?></option>
<?php
}
}
?>
Plik dbconfig.php<?php
$DB_host = "localhost";
$DB_user = "root";
$DB_pass = "";
$DB_name = "tests";
try
{
$DB_con = new PDO("mysql:host={$DB_host};dbname={$DB_name}",$DB_user,$DB_pass);
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
$e->getMessage();
}
Obecnie, po wyborze 3 selekta, powoduje pobranie wyniku z pierwszego na liście wiersza, w którym parametr jest równy
categ. Pytanie, jak do tego dodać warunek, żeby w zapytaniu został uwzględniony jeszcze parametr
menu.
Ten post edytował Przemo75 16.11.2017, 12:26:00