我的代码有什么问题?
问题描述:
我想让用户根据名称,价格等对mysql查询进行排序。这个下拉菜单让他们有能力做到这一点,它根据用户选择的内容更改“ORDER BY”子句。这是凌晨3点在这里,我只是不能看出错误:我的代码有什么问题?
<?php
$sortBy = $_POST['sortBy'];
if ($sortBy) {
$priceLowToHigh = $_POST['price-low-to-high'];
$priceHighToLow = $_POST['price-high-to-low'];
$dateMostRecent = $_POST['date-most-recent'];
$dateOldest = $_POST['date-oldest'];
$alphabeticalOrder = $_POST['alphabetical-order'];
if ($priceLowToHigh) {
$sortOrder = "price ASC";
} elseif ($priceHighToLow) {
$sortOrder = "price DESC";
} elseif ($dateMostRecent) {
$sortOrder = "date DESC";
} elseif ($dateOldest) {
$sortOrder = "date ASC";
} elseif ($alphabeticalOrder) {
$sortOrder = "name ASC";
}
} else {
$sortOrder = "date DESC";
}
?>
<form action="" method="post">
<select name="sortBy" onchange="this.form.submit()">
<option>Sort By</option>
<option value="price-low-to-high">Price (low to high)</option>
<option value="price-high-to-low">Price (high to low)</option>
<option value="date-most-recent">Date (most recent)</option>
<option value="date-oldest">Date (oldest)</option>
<option value="alphabetical-order">Alphabetical Order</option>
</select>
</form>
后来在ORDER BY子句中使用这样的:
$query = mysql_query("SELECT * FROM products WHERE category = $categoryId ORDER BY $sortOrder");
答
您正在错误地处理菜单。您的$ sortBy变量将已经是用户选择的内容,而不是单独的$ _POST字段。
这是你应该做的,而不是 -
<?php
$sortBy = $_POST['sortBy'];
if($sortBy == 'price-low-to-high') {
$sortOrder = "price ASC";
} else if($sortBy == 'price-high-to-low') {
$sortOrder = "price DESC";
} else if($sortBy == 'date-most-recent') {
$sortOrder = "date DESC";
} else if($sortBy == 'date-oldest') {
$sortOrder = "date ASC";
} else if($sortBy == 'alphabetical-order') {
$sortOrder = "name ASC";
} else {
$sortOrder = "date DESC";
}
?>
答
看来你的代码是在双引号时,它应该是在单个有PHP做代替你的代码。你应该把这个sql打印到屏幕上,你会发现它很可能不会取代这个值。
我指的是您进行mysql_query调用的行。
答
你的基本代码是一个有点不对劲。它应该是以下内容: -
<?php
$sortBy = $_POST['sortBy'];
if($sortBy == 'price-low-to-high')
$sortOrder = "price ASC";
else if($sortBy == 'price-high-to-low')
$sortOrder = "price DESC";
else if($sortBy == 'date-most-recent')
$sortOrder = "date DESC";
else if($sortBy == 'date-oldest')
$sortOrder = "date ASC";
else if($sortBy == 'alphabetical-order')
$sortOrder = "name ASC";
else
$sortOrder = "date DESC";
?>
<form action="" method="post">
<select name="sortBy" onchange="this.form.submit()">
<option>Sort By</option>
<option value="price-low-to-high">Price (low to high)</option>
<option value="price-high-to-low">Price (high to low)</option>
<option value="date-most-recent">Date (most recent)</option>
<option value="date-oldest">Date (oldest)</option>
<option value="alphabetical-order">Alphabetical Order</option>
</select>
</form>
我认为如果将代码更改为上面的代码,现在就可以工作了。
希望它有帮助。
答
我不能评论你的答案拉斐尔,因为我不够高,但我只是想提及可能使用switch语句的可读性。但你在那里。 Upvote
不应该表单标签有一个值的行动?像当前页面的名称一样...发布到哪里? – 2010-07-03 06:13:49
不一定,因为默认值是当前页面。 – spinon 2010-07-03 06:14:14