Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Otakar 02. 05. 2016, 13:49:36

Název: Filter v PHP nezobrazuje data
Přispěvatel: Otakar 02. 05. 2016, 13:49:36
Zdarec.

Chcel by som filtrovat/zoradit data v tabulke ale bohuzial neviem kde je chyba pretoze mi to nechce zoradovat tak ako chcem. Prve zoradenie je v pohode ale ak chcem napriklad podla ID alebo description nikdy mi to nezoraduje ako ma.
Pointa je jednoducha odoslam formular a podla toho co som vybral upravujem select.
Kód: [Vybrat]
    <?php
 if (isset(
$_GET['sortby'])) {
 if (($_GET['sortby']) == "ASC" ){
      
$sortbys "ASC";
     }
 else{
      
$sortbys "DESC";  
 };
     }
 else{
  $sortbys "ASC";
 
 
 };
 if (isset($_GET['orderby'])) {
     
$orderbys htmlspecialchars($_GET['orderby']);
   
 try{
 $query $dbh->prepare("SELECT * FROM code ORDER BY '.$orderbys.' '.$sortbys.' ");
     
$query->execute();
     
$result $query->fetchAll();
     }
 catch(PDOException $e)
    {
    echo 
$dbh "<br>" $e->getMessage();
    }
$dbh null;
 }
 else
     {
try{
$query $dbh->prepare("SELECT * FROM code ORDER BY id '.$sortbys.'");
    
$query->execute();
    
$result $query->fetchAll();
  }
 catch(PDOException $e)
    {
    echo 
$dbh "<br>" $e->getMessage();
    }
$dbh null;
    }


   echo 
    
"<table class='table table-responsive'>
    <tr>
    <th>ID</th>
    <th>Title</th>
    <th>Description</th>
    <th>Name</th>
    <th>Code</th>
    
    </tr>"
    
;

    foreach(
$result as $row)
    {
  echo 
"<tr>";
  echo 
"<td>" $row['id'] . "</td>";
  echo 
"<td>" $row['title'] . "</td>";
  echo 
"<td>" $row['description'] . "</td>";
  echo 
"<td>" $row['name'] . "</td>";  
  echo 
"<td>" $row['code'] . "</td>";
 
}

  echo 
"</tr>";
  echo 
"</table>";
?>
 
Název: Re:Filter v PHP nezobrazuje data
Přispěvatel: Mirek 03. 05. 2016, 09:16:00
Proč v tom dotazu máš '.
Název: Re:Filter v PHP nezobrazuje data
Přispěvatel: Kit 03. 05. 2016, 09:59:47
Je to tím, že název sloupce máš mezi apostrofy a tečkami. Databáze tomu nerozumí.

Ta funkce htmlspecialchars() je tam chybně. Před SQL injection neochrání.
Název: Re:Filter v PHP nezobrazuje data
Přispěvatel: Ronon Dex 03. 05. 2016, 13:40:45
Kód: [Vybrat]
<?php
// Don't expose the table fields to public but map parameter value to field name
$sortingOn = array('aaa' => 'field_aaa''zzz' => 'field_zzz');

// Default direction is ascending
$direction = (isset($_GET['sortby']) && $_GET['sortby'] == 'DESC') ? 'DESC' 'ASC';

// Map parameter to field, sort by id if not specified the valid one
$sortParam = isset($_GET['orderby']) ? $_GET['orderby'] : null;
$sortField = isset($sortingOn[$sortParam]) ? $sortingOn[$sortParam] : 'id';

try {
  
// $query = $dbh->prepare("SELECT * FROM code ORDER BY $sortField $direction");
  // ... or ...
  
$query $dbh->prepare('SELECT * FROM code ORDER BY ' $sortField '  ' $direction);
}
Název: Re:Filter v PHP nezobrazuje data
Přispěvatel: Kit 03. 05. 2016, 14:10:11
... nebo použít PDO::quote

PDO::quote() bohužel výsledek zabalí do apostrofů, takže se pro tento účel nedá použít.