Selectiemaken
Ik heb een collectiepagina waarin ik met een select * From een tabel helemaal uitlees en print op het scherm.
Daarbij heb ik drie form gemaakt, zodat mensen de tabel kunnen filteren. Ik heb dit gedaan door aan elke form een if statment te hangen. Dus als je kiest voor categorie 1 zie je alleen de collectie die is ingedeel in categorie 1.
Nu wil ik de selectie verder filteren op deze query. En dan loop ik vast. Als ik bijvoorbeeld in categorie 1 wil filteren op kleur, voert het script deze filter toe op heel de tabel en niet alleen op mijn geprinte tabel.
Kan iemand mij helpen hoe ik dit op kan lossen?
Bedankt alvast.
Hieronder vind je mijn code.
Tabel met filter forms:
<html>
<table width="100%">
<tr>
<td><form name="categorie" action="" method="post" style="margin-bottom:20px;">Filter op Categorie:<br />
<input name="categorie" type="radio" onclick="submit()" value="design" />design<br />
<input name="categorie" type="radio" onclick="submit()" value="leuk" />leuk<br />
<input name="categorie" type="radio" onclick="submit()" value="saai" />saai
</form></td>
<td><form action="" method="post" style="margin-bottom:20px;">
Filter op opstelling:<br />
<input name="opstelling" type="radio" onclick="submit()" value="eiland" />eiland<br />
<input name="opstelling" type="radio" onclick="submit()" value="l-vorm" />l-vorm<br />
<input name="opstelling" type="radio" onclick="submit()" value="recht" />recht
</form></td>
</tr>
</table>
</html>
En tabel met mijn php code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php //
if (isset ($_POST['categorie'])){
$query = "SELECT img_thumb FROM collectie WHERE categorie = '".$_POST['categorie']."' ";
}
elseif (isset ($_POST['opstelling'])){
$query = "SELECT img_thumb FROM collectie WHERE opstelling = '".$_POST['opstelling']."' ";
}
else
$query = "SELECT img_thumb FROM collectie";
$result_collectie = mysql_query($query) or die ("FOUT: " .mysql_error());
while (list ($img_thumb) = mysql_fetch_row($result_collectie) ){
echo ("<td><img src='img/collectie/".$img_thumb.".jpg'/></td>");}
?>
if (isset ($_POST['categorie'])){
$query = "SELECT img_thumb FROM collectie WHERE categorie = '".$_POST['categorie']."' ";
}
elseif (isset ($_POST['opstelling'])){
$query = "SELECT img_thumb FROM collectie WHERE opstelling = '".$_POST['opstelling']."' ";
}
else
$query = "SELECT img_thumb FROM collectie";
$result_collectie = mysql_query($query) or die ("FOUT: " .mysql_error());
while (list ($img_thumb) = mysql_fetch_row($result_collectie) ){
echo ("<td><img src='img/collectie/".$img_thumb.".jpg'/></td>");}
?>
Bedankt alvast voor jullie hulp!
Gewijzigd op 29/06/2011 11:13:36 door Ed van Papenrecht
Toevoeging op 29/06/2011 11:24:40:
Script is trouwens lek => SQL-Injection.
Ik had ze eerst in 1 form staan alleen dan kan het maar 1x submitten terwijl ze in het begin er ook voor kunnen kiezen om bijvoorbeeld te filteren op opstelling in plaat van categorie.. Zet ik dit in 1 form dat pakt hij dit niet..
EDIT// Heb het nu samen gevoegd in 1 form. Het werkt toch wel.. excuses!
Gewijzigd op 29/06/2011 11:28:49 door Ed van Papenrecht
Edwin van beers op 29/06/2011 11:27:25:
SQL injection moet in inderdaad nog toepassen.
Ik zou het proberen te vermijden ;-)
Haal onclick="submit()" weg en zet er een submit knop onder.
- SanThe - op 29/06/2011 11:30:21:
Ik zou het proberen te vermijden ;-)
Haal onclick="submit()" weg en zet er een submit knop onder.
Edwin van beers op 29/06/2011 11:27:25:
SQL injection moet in inderdaad nog toepassen.
Ik zou het proberen te vermijden ;-)
Haal onclick="submit()" weg en zet er een submit knop onder.
haha inderdaad,
Ik heb er 1 submit button onder gezet, maar helaas hij filtert het nog niet zoals ik wil. Zodra ik categorie 1 kies en daarna opstelling eiland, krijg ik nog alle eilanden te zien. Ook degene die in categorie 2 staan.. En dat wil ik juist niet..
HOe kan ik dat oplossen?
Toevoeging op 29/06/2011 11:56:14:
Okey,
Het is me gelukt om de selectie te filteren wanneer je alle keuzes aanvinkt die je wilt hebben. Bijvoorbeeld. Je wilt uit categorie 1 de eiland opstelling. Dan vink je dit in het begin in het formulier aan. Als je op verzenden klikt laat hij alleen de eilanden uit categorie 1 zien. Hier ben ik blij mee..
Alleen nu wil ik een stap verder.
Je kiest categorie 1 en drukt op verzenden. Alles van categorie 1 wordt getoond. Nu wil de bezoeker deze selectie uitbreiden met alleen eilanden. De bezoeker drukt op eiland en daarna op verzenden.. Helaas hij laat alle eilanden zien, ook die uit categorie 2 en 3... Het script onthoud dus niet dat hij al een query heeft uitgevoerd en dat hij op die query de selectie moet toevoegen van Opstelling = eiland..
Hoe kan ik dit realiseren..
Mijn php code nu is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if (isset ($_POST['categorie'], $_POST['opstelling'])){
$query = "SELECT img_thumb FROM collectie WHERE categorie = '".$_POST['categorie']."' AND opstelling = '".$_POST['opstelling']."'";
}
elseif (isset ($_POST['categorie'])){
$query = "SELECT img_thumb FROM collectie WHERE categorie = '".$_POST['categorie']."' ";
}
elseif (isset ($_POST['opstelling'])){
$query = "SELECT img_thumb FROM collectie WHERE opstelling = '".$_POST['opstelling']."' ";
}
else
$query = "SELECT img_thumb FROM collectie";
$result_collectie = mysql_query($query) or die ("FOUT: " .mysql_error());
while (list ($img_thumb) = mysql_fetch_row($result_collectie) ){
echo ("<td><img src='img/collectie/".$img_thumb.".jpg'/></td>");
?>
if (isset ($_POST['categorie'], $_POST['opstelling'])){
$query = "SELECT img_thumb FROM collectie WHERE categorie = '".$_POST['categorie']."' AND opstelling = '".$_POST['opstelling']."'";
}
elseif (isset ($_POST['categorie'])){
$query = "SELECT img_thumb FROM collectie WHERE categorie = '".$_POST['categorie']."' ";
}
elseif (isset ($_POST['opstelling'])){
$query = "SELECT img_thumb FROM collectie WHERE opstelling = '".$_POST['opstelling']."' ";
}
else
$query = "SELECT img_thumb FROM collectie";
$result_collectie = mysql_query($query) or die ("FOUT: " .mysql_error());
while (list ($img_thumb) = mysql_fetch_row($result_collectie) ){
echo ("<td><img src='img/collectie/".$img_thumb.".jpg'/></td>");
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$query = "SELECT img_thumb FROM collectie";
if($_SERVER['REQUEST_METHOD'] == "POST")
{
if(isset($_POST['categorie']) or isset($_POST['opstelling']))
{
if(isset($_POST['categorie']) and isset($_POST['opstelling']))
{
$query .= " WHERE categorie = '" . mysql_real_escape_string($_POST['categorie']) . "'
AND opstelling = '" . mysql_real_escape_string($_POST['opstelling']) . "'";
}
elseif(isset($_POST['categorie']))
{
$query .= " WHERE categorie = '" . mysql_real_escape_string($_POST['categorie']) . "'";
}
else
{
$query .= " WHERE opstelling = '" . mysql_real_escape_string($_POST['opstelling']) . "'";
}
}
}
$result_collectie = mysql_query($query);
if(!$result_collectie)
{
echo 'Error';
}
else
{
// afhandelen
}
?>
$query = "SELECT img_thumb FROM collectie";
if($_SERVER['REQUEST_METHOD'] == "POST")
{
if(isset($_POST['categorie']) or isset($_POST['opstelling']))
{
if(isset($_POST['categorie']) and isset($_POST['opstelling']))
{
$query .= " WHERE categorie = '" . mysql_real_escape_string($_POST['categorie']) . "'
AND opstelling = '" . mysql_real_escape_string($_POST['opstelling']) . "'";
}
elseif(isset($_POST['categorie']))
{
$query .= " WHERE categorie = '" . mysql_real_escape_string($_POST['categorie']) . "'";
}
else
{
$query .= " WHERE opstelling = '" . mysql_real_escape_string($_POST['opstelling']) . "'";
}
}
}
$result_collectie = mysql_query($query);
if(!$result_collectie)
{
echo 'Error';
}
else
{
// afhandelen
}
?>
MMM ik heb je code overgenomen, maar helaas. Nu filtert deze helemaal niets meer...:(
Hoe ziet het formulier er nu uit?
Edwin van beers op 29/06/2011 12:26:07:
MMM ik heb je code overgenomen, maar helaas. Nu filtert deze helemaal niets meer...:(
Dit is inderdaad wel een stuk net geschreven code:) Hij werkt weer, alleen het werkt wel weer zoals de eerste keer. Dus nog steeds niet dat je na een selectie nog een selectie op die selectie kan maken.. Maar misschien moet ik dit nog neit toepassen. En moet de bezoeker het gewoon vanaf begin selecteren:)
Bedankt iig!
Toevoeging op 29/06/2011 12:49:40:
Ik heb het hier even getest. Het werkt perfect.
Toevoeging op 29/06/2011 13:22:37:
Toch nog een vraag, sorry..;)
het werkt nu perfect, alleen aangezien ik straks een hele collectie moet weer geven wil ik werken met pagenumbers. Ik heb daarvoor een functie van internet gehaald en deze in mijn website gebouwd.. Deze werkt goed, alleen het werkt niet meer als je bijvoorbeeld op pagina twee bent en je wilt een selectie maken. Dit komt omdat je dan op een andere pagina bent waar hij de overige sql niet meer heeft geladen...
Is dit op te lossen?
Sorry, maar de vraag is mij niet duidelijk.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php
/**
* Used for building query's witch need pagination.
*/
class PagedQuery
{
/** @var integer Total number of records */
var $total;
/** @var integer Record length of a page */
var $pageSize;
/** @var integer Total pages */
var $pages;
/** @var string Current requested page */
var $currentPage;
/** the variable in the url to indicate the current page. Defaul = 'page' */
var $pageVar;
/**
* Construct a PagedQuery. The $query variable will be replaced by a new
* query wich will allow pagination.
* @param string $query Sql select query
* @param integer $totalRows Number of rows to show on a page
* @param integer $pageVar (optional) The used variable for pagination
*/
function __construct(&$query, $totalRows, $pageVar = "page")
{
// set pageVar
$this->pageVar = $pageVar;
// Get the current page
if (isset($_GET[$pageVar]) && is_numeric($_GET[$pageVar]))
{
$currentPage = $_GET[$pageVar];
}
else
{
$currentPage = 1;
}
$this->pageSize = $totalRows;
$this->currentPage = $currentPage;
$query = strtolower($query);
// Split the query to create a new count query
list($queryStart, $queryEnd) = explode(" from ", $query, 2);
// Create the count query
if (substr_count($queryEnd,"group by ",1) == 1)
$query = "select count(*) from (select count(*) from " . $queryEnd . ") as t1";
else
$query = "select count(*) from " . $queryEnd;
// Get the total rows
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$this->total = $row[0];
// bereken het aantal pagina's
$this->pages = ceil($this->total / $totalRows);
// Create the new query
$offset = ($currentPage - 1) * $totalRows;
$query = $queryStart . " from " . $queryEnd . " limit " . $offset . "," . $totalRows . " ";
}
/**
* Get the base link from the requested url current
* Used to build the page links
*/
public function getBaseUrl()
{
if (!isset($_GET[$this->pageVar]))
{
if ($_SERVER['QUERY_STRING'] == "")
return "?" . $this->pageVar . "=";
else
return "?" . $_SERVER['QUERY_STRING'] . "&" . $this->pageVar . "=";
}
else
{
// replace and append the query string
if (sizeOf($_GET) <= 1)
{
return "?" . $this->pageVar . "=";
}
else
{
// try to replace the var
$newQueryString = str_replace("&" . $this->pageVar . "=" . $_GET[$this->pageVar], "", $_SERVER['QUERY_STRING']);
// try to replace the first var
$newQueryString = str_replace($this->pageVar . "=" . $_GET[$this->pageVar], "", $newQueryString);
// correct & if this is the first char
if(substr($newQueryString,0,1) == "&")
{
$newQueryString = substr($newQueryString,1,strlen($newQueryString)-1);
}
return "?" . $newQueryString . "&" . $this->pageVar . "=";
}
}
}
/**
* Get the url for the first page,
* without the page infor in the url.
* This will prevent urls with duplicate content
* for search engine optimization.
*/
public function getFirstUrl()
{
if (isset($_GET[$this->pageVar]))
{
// try to replace the var
$newQueryString = str_replace("&" . $this->pageVar . "=" . $_GET[$this->pageVar], "", $_SERVER['QUERY_STRING']);
// try to replace the first var
$newQueryString = str_replace($this->pageVar . "=" . $_GET[$this->pageVar], "", $newQueryString);
// strip off last character for correct url
return "?" . $newQueryString;
}
else
{
if ($_SERVER['QUERY_STRING'] != "")
{
return "?" . $_SERVER['QUERY_STRING'];
}
else
return ".";
}
}
/**
* Shorcut function for calling the static
* method pageLinks from class Pagination
*/
public function pageLinks()
{
return Pagination::pageLinks($this);
}
/**
* Shorcut function for calling the static
* method simplePageLinks from class Pagination
*/
public function simplePageLinks()
{
return Pagination::simplePageLinks($this);
}
}
?>
/**
* Used for building query's witch need pagination.
*/
class PagedQuery
{
/** @var integer Total number of records */
var $total;
/** @var integer Record length of a page */
var $pageSize;
/** @var integer Total pages */
var $pages;
/** @var string Current requested page */
var $currentPage;
/** the variable in the url to indicate the current page. Defaul = 'page' */
var $pageVar;
/**
* Construct a PagedQuery. The $query variable will be replaced by a new
* query wich will allow pagination.
* @param string $query Sql select query
* @param integer $totalRows Number of rows to show on a page
* @param integer $pageVar (optional) The used variable for pagination
*/
function __construct(&$query, $totalRows, $pageVar = "page")
{
// set pageVar
$this->pageVar = $pageVar;
// Get the current page
if (isset($_GET[$pageVar]) && is_numeric($_GET[$pageVar]))
{
$currentPage = $_GET[$pageVar];
}
else
{
$currentPage = 1;
}
$this->pageSize = $totalRows;
$this->currentPage = $currentPage;
$query = strtolower($query);
// Split the query to create a new count query
list($queryStart, $queryEnd) = explode(" from ", $query, 2);
// Create the count query
if (substr_count($queryEnd,"group by ",1) == 1)
$query = "select count(*) from (select count(*) from " . $queryEnd . ") as t1";
else
$query = "select count(*) from " . $queryEnd;
// Get the total rows
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$this->total = $row[0];
// bereken het aantal pagina's
$this->pages = ceil($this->total / $totalRows);
// Create the new query
$offset = ($currentPage - 1) * $totalRows;
$query = $queryStart . " from " . $queryEnd . " limit " . $offset . "," . $totalRows . " ";
}
/**
* Get the base link from the requested url current
* Used to build the page links
*/
public function getBaseUrl()
{
if (!isset($_GET[$this->pageVar]))
{
if ($_SERVER['QUERY_STRING'] == "")
return "?" . $this->pageVar . "=";
else
return "?" . $_SERVER['QUERY_STRING'] . "&" . $this->pageVar . "=";
}
else
{
// replace and append the query string
if (sizeOf($_GET) <= 1)
{
return "?" . $this->pageVar . "=";
}
else
{
// try to replace the var
$newQueryString = str_replace("&" . $this->pageVar . "=" . $_GET[$this->pageVar], "", $_SERVER['QUERY_STRING']);
// try to replace the first var
$newQueryString = str_replace($this->pageVar . "=" . $_GET[$this->pageVar], "", $newQueryString);
// correct & if this is the first char
if(substr($newQueryString,0,1) == "&")
{
$newQueryString = substr($newQueryString,1,strlen($newQueryString)-1);
}
return "?" . $newQueryString . "&" . $this->pageVar . "=";
}
}
}
/**
* Get the url for the first page,
* without the page infor in the url.
* This will prevent urls with duplicate content
* for search engine optimization.
*/
public function getFirstUrl()
{
if (isset($_GET[$this->pageVar]))
{
// try to replace the var
$newQueryString = str_replace("&" . $this->pageVar . "=" . $_GET[$this->pageVar], "", $_SERVER['QUERY_STRING']);
// try to replace the first var
$newQueryString = str_replace($this->pageVar . "=" . $_GET[$this->pageVar], "", $newQueryString);
// strip off last character for correct url
return "?" . $newQueryString;
}
else
{
if ($_SERVER['QUERY_STRING'] != "")
{
return "?" . $_SERVER['QUERY_STRING'];
}
else
return ".";
}
}
/**
* Shorcut function for calling the static
* method pageLinks from class Pagination
*/
public function pageLinks()
{
return Pagination::pageLinks($this);
}
/**
* Shorcut function for calling the static
* method simplePageLinks from class Pagination
*/
public function simplePageLinks()
{
return Pagination::simplePageLinks($this);
}
}
?>
Wat ik dus eigenlijk wil is dat wanneer je op pagina 2 klikt je niet naar http://localhost/test/keuken-collectie.php?page=2 gaat maar gewoon op http://localhost/test/keuken-collectie.php blijft zodat de query hetzelfde blijft. Zodra je naar page2 gaat vervangt hij de query....
Gewijzigd op 29/06/2011 13:30:27 door Ed van Papenrecht
Misschien kan iemand anders je daar mee helpen.
Toevoeging op 29/06/2011 13:30:02:
Ik moet trouwens nu weg.
Succes verder.