我想创建下拉菜单,我可以按价格对产品进行排序。现在我正在尝试这个版本,也许这不是最好的主意,但如果你有更好的请展示。
<h3>Mobilieji Telefonai</h3>
<form method="post" action="">
<select name="price">
<option value="prioritetas">Atsitiktinis</option>
<option value="kaina DESC">Kaina nuo mažiausios</option>
<option value="kaina ASC">Kaina nuo didžiausios</option>
</select>
<input type="submit" name="orderPrice" value="orderPrice" />
</form>
</div>
<?php
if (!isset($_GET['startrow']) or !is_numeric($_GET['startrow'])) {
$startrow = 0;
} else {
$startrow = (int)$_GET['startrow'];
}
$sort = @$_POST['price'];
$fetch = mysql_query("SELECT * FROM telefonai order by ".$sort." LIMIT $startrow, 15")or
die(mysql_error());
$fetch = mysql_query($query);
print mysql_error();
$num=Mysql_num_rows($fetch);
if($num>0)
{
echo "<table border=2 >";
echo "<tr><td>Telefono pavadinimas</td><td>Nuotrauka<td>Kaina</td> <td>Parduotuve</td><td>Nuoroda</td></tr>";
for($i=0;$i<$num;$i++)
{
$row=mysql_fetch_row($fetch);
echo "<tr>";
echo"<td>$row[1]</td>";
echo "<td> <img src=\"{$row[5]}\" width=75 height=75/> </td>";
echo"<td>$row[2] LT</td>";
echo"<td>$row[3]</td>";
echo "<td><a href=\"{$row[4]}\"><img src=\"".base_url()."images/parduotuve.png\" /></a></td>";
echo"</tr>";
}
echo"</table>";
}
echo '<a href="'.base_url().$this->uri->segment(1)."/".'?startrow='. ($startrow+5).'">Sekantis</a>';
$prev = $startrow - 5;
if ($prev >= 0)
echo '<a href="'.base_url().$this->uri->segment(1)."/".'?startrow='.$prev.'"> Buves</a>';
?>
</form>
</body>
</html>
<br>
没有点击,只是打开了页面
单击排序后
还有排序不工作表分页,但我会稍后尝试修复
需要更正代码,我想修复此错误。知道如何修复此错误吗?
答案 0 :(得分:1)
尝试改变:
$sort = $_POST['price'];
$fetch = mysql_query("SELECT * FROM telefonai order by ".$price." LIMIT $startrow,5")
为:
$sort = $_POST['price'];
$fetch = mysql_query("SELECT * FROM telefonai order by ".$sort." LIMIT $startrow, 5")
您没有在任何地方定义变量$price
。
答案 1 :(得分:1)
我会尝试将其表述为答案,因为我需要添加代码。
对于这个答案,我认为你唯一的问题是你的截图中的sql错误。 你为mysqlerror打印的地方永远不会到达btw,因为你有一个mysql错误而die()会停止一切。
我认为第一个答案是正确的,你必须使用$ sort而不是$ price。但如果这不起作用,下面的代码应该向您展示如何添加额外的调试。
在附注中,确实使用预备语句或添加一些排序检查(白名单或其他)
这是完整的代码(没有验证),其中一些测试代码被注释掉了。如果之后它不起作用,您应该取消注释测试代码并再次运行并显示输出。如果事情确实有效,你可以删除我添加的注释行。
<h3>Mobilieji Telefonai</h3>
<form method="post" action="">
<select name="price">
<option value="prioritetas">Atsitiktinis</option>
<option value="kaina DESC">Kaina nuo mažiausios</option>
<option value="kaina ASC">Kaina nuo didžiausios</option>
</select>
<input type="submit" name="orderPrice" value="orderPrice" />
</form>
</div>
<?php
if (!isset($_GET['startrow']) or !is_numeric($_GET['startrow'])) {
$startrow = 0;
} else {
$startrow = (int)$_GET['startrow'];
}
$sort = @$_POST['price'];
$query = "SELECT * FROM telefonai order by " . $sort . " LIMIT $startrow, 5";
//$query2 = "SELECT * FROM telefonai order by ". $price . " LIMIT $startrow, 5";
print $query;
//print $query2;
$fetch = mysql_query($query)or die(mysql_error());
$num=Mysql_num_rows($fetch);
if($num>0)
{
echo "<table border=2 >";
echo "<tr><td>Telefono pavadinimas</td><td>Nuotrauka<td>Kaina</td> <td>Parduotuve</td><td>Nuoroda</td></tr>";
for($i=0;$i<$num;$i++)
{
$row=mysql_fetch_row($fetch);
echo "<tr>";
echo"<td>$row[1]</td>";
echo "<td> <img src=\"{$row[5]}\" width=75 height=75/> </td>";
echo"<td>$row[2] LT</td>";
echo"<td>$row[3]</td>";
echo "<td><a href=\"{$row[4]}\"><img src=\"".base_url()."images/parduotuve.png\" /></a></td>";
echo"</tr>";
}
echo"</table>";
}
echo '<a href="'.base_url().$this->uri->segment(1)."/".'?startrow='. ($startrow+5).'">Sekantis</a>';
$prev = $startrow - 5;
if ($prev >= 0)
echo '<a href="'.base_url().$this->uri->segment(1)."/".'?startrow='.$prev.'"> Buves</a>';
?>
</form>
</body>
</html>
<br>
更多信息后添加
根据您的预期功能,您可以做两件事。
1)如果存在默认排序顺序,则应在价格为空时设置
$sorts = array('prioritetas', 'kaina ASC', 'kaina DESC');
if ((!isset($_POST['price']) || !is_numeric($_POST['price'])) && !in_array($_POST['price'], $sorts)) {
$sort = 'kaina ASC';
} else {
$sort = '$_POST['price']';
}
2)如果没有默认排序,则只在价格不为空时将排序添加到查询中
$sorts = array('prioritetas', 'kaina ASC', 'kaina DESC');
$query = "SELECT * FROM telefonai";
if ((!isset($_POST['price']) || !is_numeric($_POST['price'])) && !in_array($_POST['price'], $sorts)) {
$query .= "order by " . $sort;
}
$query .= " LIMIT $startrow, 5";
我也为你添加了白名单的例子
答案 2 :(得分:0)
改变这个:
$sort = @$_POST['price'];
要:
if(isset($_POST['price'])) {
$sort = $_POST['price'];
} else {
$sort = 'kaina ASC';
}