下拉菜单和错误的一些错误

时间:2014-05-04 17:36:10

标签: php sql drop-down-menu

我想创建下拉菜单,我可以按价格对产品进行排序。现在我正在尝试这个版本,也许这不是最好的主意,但如果你有更好的请展示。

    <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>

没有点击,只是打开了页面

a busy cat

单击排序后

a busy cat

还有排序不工作表分页,但我会稍后尝试修复

需要更正代码,我想修复此错误。知道如何修复此错误吗?

3 个答案:

答案 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';
}