2012-12-05 2 views
1

다른 사람들을위한 인벤토리 시스템을 만들고 있습니다. 테이블 헤더의 링크를 클릭하여 PN 및 ASC별로 정렬 할 수있게하려고합니다. 그런 다음 DESC가 PN을 다시 클릭하면 그러나 나는 또한 설명으로 주문하고 똑같은 일을하고 싶다. 지금까지 제 코드가 있습니다. 나는 방향 (ASC, DESC)을 쉽게 바꿀 수있는 방법을 알아낼 수 없다.주문 - 같은 링크로 방향을 변경하십시오.

  if (!isset($cd)) 
     { 
      $cd = 0; 
     } 
     if (isset($_SESSION['direction']) && $cd == 1) 
     { 
      if ($_SESSION['direction'] == 'DESC') 
      { 
       $_SESSION['direction'] = 'ASC'; 
       $cd = 0; 
      } elseif ($_SESSION['direction'] == 'ASC') 
      { 
       $_SESSION['direction'] = 'DESC'; 
       $cd = 0; 
      } 
     } else 
     { 
      $_SESSION['direction'] = 'ASC'; 
     } 
     if (isset($_REQUEST['sort'])) 
     { 
      if ($_REQUEST['sort'] == 'pn') 
      { 
       $sql=mysql_query("select * from inventory ORDER BY pn {$_SESSION['direction']}"); 
      } elseif ($_REQUEST['sort'] == 'description') { 
       $sql=mysql_query("select * from inventory ORDER BY description {$_SESSION['direction']}"); 
      } elseif ($_REQUEST['sort'] == 'wholesale') { 
       $sql=mysql_query("select * from inventory ORDER BY wholesale {$_SESSION['direction']}"); 
      } elseif ($_REQUEST['sort'] == 'list') { 
       $sql=mysql_query("select * from inventory ORDER BY list {$_SESSION['direction']}"); 
      } elseif ($_REQUEST['sort'] == 'stock') { 
       $sql=mysql_query("select * from inventory ORDER BY stock {$_SESSION['direction']}"); 
      } elseif ($_REQUEST['sort'] == 'location') { 
       $sql=mysql_query("select * from inventory ORDER BY location {$_SESSION['direction']}"); 
      } 
     } else { 
      $sql=mysql_query("select * from inventory ORDER BY pn {$_SESSION['direction']}"); 
     }  
     echo "<center><table class=\"myTable\"> 
     <th><a href=\"inventory.php?mode=list&sort=pn\">PN</a></th><th><a href=\"inventory.php?mode=list&sort=description\">Description</a></th><th><a href=\"inventory.php?mode=list&sort=wholesale\">Wholesale</th><th><a href=\"inventory.php?mode=list&sort=list\">List</th><th><a href=\"inventory.php?mode=list&sort=stock\">Stock</th><th><a href=\"inventory.php?mode=list&sort=location\">Location</th><th>Links</th>"; 
     while ($result=mysql_fetch_array($sql)) 
     { 
      echo "<tr><td>{$result['pn']}</td><td>{$result['description']}</td><td>{$result['wholesale']}</td><td>{$result['list']}</td><td>{$result['stock']}</td><td>{$result['location']}</td><td>[<a href='inventory.php?mode=edit&id={$result['id']}'>Edit</a>] [<a href='inventory.php?mode=delete&id={$result['id']}'>Delete</a>] [<a href='orders.php?mode=list_c&id={$result['id']}'>View Orders</a>]</tr>"; 
     } 
     echo "</table></center>"; 
+2

내 개는 많은 코드 냄새가 여기에있다 나에게 말한다. Woff! – moonwave99

+1

냄새? 더 많은 냄새처럼 ... –

+0

세션에서 방향은 왜입니까? 귀하의 링크가 어떻게 생겼는지 –

답변

1

OMG.

$sort_column = 'description'; // the default 
$sort_dir = 'DESC'; // the default 

$columns = array('pn', 'description', 'wholesale', 'name', 'list', 'stock', 'location'); 

if (isset($_GET['dir']) && in_array($_GET['dir'], array('ASC', 'DESC'))) { 
    $sort_dir = $_GET['dir']; 
} 
if (isset($_GET['sort']) && in_array($_GET['sort'], $columns)) 
    $sort_column = $_GET['sort']; 
} 

$sql = "select * from inventory ORDER BY {$sort_column} {$sort_dir}"; 

$result = mysql_query($sql); 

?> 

<center><table class="myTable"> 
    <th><a href="inventory.php?mode=list&sort=pn<?php if($sort_column == 'pn' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">PN</a></th> 
    <th><a href="inventory.php?mode=list&sort=description<?php if($sort_column == 'description' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Description</a></th> 
    <th><a href="inventory.php?mode=list&sort=wholesale<?php if($sort_column == 'wholesale' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Wholesale</th> 
    <th><a href="inventory.php?mode=list&sort=list<?php if($sort_column == 'list' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">List</th> 
    <th><a href="inventory.php?mode=list&sort=stock<?php if($sort_column == 'stock' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Stock</th> 
    <th><a href="inventory.php?mode=list&sort=location<?php if($sort_column == 'location' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Location</th><th>Links</th> 

<?php while ($result=mysql_fetch_array($sql)) { ?> 
    <tr> 
     <td><?=$result['pn']?></td> 
     <td><?=$result['description']?></td> 
     <td><?=$result['wholesale']?></td> 
     <td><?=$result['list']?></td> 
     <td><?=$result['stock']?></td> 
     <td><?=$result['location']?></td> 
     <td>[<a href="inventory.php?mode=edit&id=<?=$result['id']?>">Edit</a>] [<a href="inventory.php?mode=delete&id=<?=$result['id']?>">Delete</a>] [<a href="orders.php?mode=list_c&id=<?=$result['id']?>">View Orders</a>]</td> 
    </tr> 
<?php } ?> 

</table></center> 

그러나 당신은 mysql_* 기능을 사용 PDO 또는 적어도 mysqli_*

1

세션을 정렬 순서로 사용하지 않습니다.

그냥 쿼리 문자열에 방향을 추가하고 phl에서 허용 된 사이트 목록을 확인하십시오. 화이트리스트에 없으면 기본값을 사용하십시오. SQL 주입 문제를 방지하기 위해

<th><a href="inventory.php?mode=list&sort=pn&sort_direction=<?php echo ($sort_order === 'ASC') ? 'DESC' : 'ASC'; ?>">PN</a></th> 

그리고 당신은 정말 PDO/mysqli과 준비된 문으로 전환해야합니다

는 귀하의 링크에서는 다음 다른 값 같은 것을 사용할 수 있습니다.

+0

감사합니다. Prepared statements에 대한 연구를 할 것입니다 ... 그것은 내가 곧 조사 할 것이 었습니다. 그리고 무엇입니까? ($ sort_order === 'ASC')에서? 'DESC': 'ASC'; ... 나는 결코 그것을 본 적이 없다 .. – alexander7567

+1

@ alexander7567 이것은 삼항 연산자이며, if/else 문에 대한 속칭이므로 기본적으로 : if ($ sort_order === ' ASC ') {echo'DESC '; } else {echo 'ASC'; }' – jeroen

+0

정말 대단합니다! 감사! – alexander7567

0

내가 조언을 모두 가져다로 혼합 배울 안 : 당신은 무엇을이 훨씬 단축 코드에서

봐 하나! 여기에 새 코드가 있습니다. 감사!

  if (isset($_REQUEST['direction'])) 
     { 
      $direction = $_REQUEST['direction']; 
     } else 
     { 
      $direction = 'ASC'; 
     } 
     if (isset($_REQUEST['sort'])) 
     { 
      $sort = $_REQUEST['sort']; 
     } else 
     { 
      $sort = 'pn'; 
     } 
     $sql=mysql_query("select * from inventory ORDER BY {$sort} {$direction}"); 
     echo "<center><table class=\"myTable\">"; 
      if ($direction == 'DESC') 
      { 
       echo "<th><a href=\"inventory.php?mode=list&sort=pn&direction=ASC\">PN</a></th> 
         <th><a href=\"inventory.php?mode=list&sort=description&direction=ASC\">Description</a></th> 
         <th><a href=\"inventory.php?mode=list&sort=wholesale&direction=ASC\">Wholesale</th> 
         <th><a href=\"inventory.php?mode=list&sort=list&direction=ASC\">List</th> 
         <th><a href=\"inventory.php?mode=list&sort=stock&direction=ASC\">Stock</th> 
         <th><a href=\"inventory.php?mode=list&sort=location&direction=ASC\">Location</th> 
         <th>Links</th>"; 

      } else 
      { 
       echo "<th><a href=\"inventory.php?mode=list&sort=pn&direction=DESC\">PN</a></th> 
         <th><a href=\"inventory.php?mode=list&sort=description&direction=DESC\">Description</a></th> 
         <th><a href=\"inventory.php?mode=list&sort=wholesale&direction=DESC\">Wholesale</th> 
         <th><a href=\"inventory.php?mode=list&sort=list&direction=DESC\">List</th> 
         <th><a href=\"inventory.php?mode=list&sort=stock&direction=DESC\">Stock</th> 
         <th><a href=\"inventory.php?mode=list&sort=location&direction=DESC\">Location</th> 
         <th>Links</th>"; 
      } 
+0

이제 mysqli를 배우십시오! 추신 : 나는 아직도 무엇을 알고 싶다? 의미 ... – alexander7567

+0

이것을 ternal 연산자라고합니다. 'if ($ sort_order === 'ASC') echo 'DESC';에 대한 속기입니다. else echo 'ASC';'. 더 많은 것을 알아 내기 위해'php ternal operator '에 대한 Google ... – shadyyx

0
$_SESSION['sort'] = isset($_REQUEST['sort']) ? $_REQUEST['sort'] : 'DESC'; 
    $sort = $_SESSION['sort']; 

    if (isset($sort) && $sort == 'DESC') 
    { 
     $columns->name = "<a href='?sort=ASC&pageno=$pageno'> $columns->name </a>"; 
     echo $columns->name; 
    } 
    else 
    { 
     $columns->name = "<a href='?sort=DESC&pageno=$pageno'> $columns->name </a>"; 
     echo $columns->name; 

    } 


// [email protected] 
관련 문제