2013-01-17 156 views
0

我有以下的PHP代碼。我想根據我在url上給出的查詢來篩選結果。 例如,如果我給HTTP:/www.example.com/ AFF = SomeUser的,顯示我只包含用戶SomeUser的。這裏是我的代碼PHP篩選器mysql結果

<?php 
require_once('visitors_connections.php');//the file with connection code and functions 

if ($_GET['start'] == "") $start = 0; 
else $start = $_GET['start']; 
$limit = 15; 

$additionalQuery = "SQL_CALC_FOUND_ROWS "; 

mysql_select_db($database_visitors, $visitors); 
$query_visitors = "(SELECT ".$additionalQuery." * FROM visitors_table WHERE"; 





if ($_POST['day']!="") { 
$query_visitors .= " visitor_day = '".$_POST['day']."'"; 
} else { 
$query_visitors .= " visitor_day = ".date("d").""; 

if ($_POST['month']!="") { 
$query_visitors .= " AND visitor_month = '".$_POST['month']."'"; 
} else { 
$query_visitors .= " AND visitor_month = ".date("m").""; 
} 

if ($_POST['year']!="") { 
$query_visitors .= " AND visitor_year = '".$_POST['year']."'"; 
} else { 
$query_visitors .= " AND visitor_year = ".date("Y").""; 
}} 
$query_visitors .= " LIMIT $start,$limit)"; 
$insert_visitors = mysql_query($query_visitors, $visitors) or die(mysql_error()); 
$row_visitors = mysql_fetch_assoc($insert_visitors); 
$totalRows_visitors = mysql_num_rows($insert_visitors); 

$nbItems = mysql_result(mysql_query("Select FOUND_ROWS() AS nbr"),0,"nbr"); 
if ($nbItems>($start+$limit)) $final = $start+$limit; 
else $final = $nbItems; 

echo '<table style="width:100%; border:1px dashed #CCC" cellpadding="3"> 
     <form id="form1" name="form1" method="post" action="display_visits.php"> 
     <tr> 
     <td>day 
     <select name="day" id="day"> 
      <option value="" selected="selected"></option> 
      <option value="01">01</option> 
      <option value="02">02</option> 
      <option value="03">03</option> 
      <option value="04">04</option> 
      <option value="05">05</option> 
      <option value="06">06</option> 
      <option value="07">07</option> 
      <option value="08">08</option> 
      <option value="09">09</option> 
      <option value="10">10</option> 
      <option value="11">11</option> 
      <option value="12">12</option> 
      <option value="13">13</option> 
      <option value="14">14</option> 
      <option value="15">15</option> 
      <option value="16">16</option> 
      <option value="17">17</option> 
      <option value="18">18</option> 
      <option value="19">19</option> 
      <option value="20">20</option> 
      <option value="21">21</option> 
      <option value="22">22</option> 
      <option value="23">23</option> 
      <option value="24">24</option> 
      <option value="25">25</option> 
      <option value="26">26</option> 
      <option value="27">27</option> 
      <option value="28">28</option> 
      <option value="29">29</option> 
      <option value="30">30</option> 
      <option value="31">31</option> 
     </select></td> 
     <td>Month 
     <select name="month" id="month"> 
      <option value="" selected="selected"></option> 
      <option value="1">1</option> 
      <option value="2">2</option> 
      <option value="3">3</option> 
      <option value="4">4</option> 
      <option value="5">5</option> 
      <option value="6">6</option> 
      <option value="7">7</option> 
      <option value="8">8</option> 
      <option value="9">9</option> 
      <option value="10">10</option> 
      <option value="11">11</option> 
      <option value="12">12</option> 
     </select></td> 
     <td>Year 
     <select name="year" id="year"> 
      <option value="" selected="selected"></option> 
      <option value="2013">2013</option> 
     </select></td> 
     <td><input type="submit" name="Submit" value="Submit" /></td> 
     <td></td> 
     </tr>'; 

echo '<tr> 
     <td style="width:15%;border-bottom:1px solid #CCC">IP</td> 
     <td style="width:15%;border-bottom:1px solid #CCC">Browser</td> 
     <td style="width:15%;border-bottom:1px solid #CCC">Time</td> 
     <td style="width:30%;border-bottom:1px solid #CCC">Refferer</td> 
     <td style="width:25%;border-bottom:1px solid #CCC">Page</td> 
     <td style="width:25%;border-bottom:1px solid #CCC">Affiliate</td> 
     </tr>'; 

do { 

echo '<tr onmouseout="this.style.backgroundColor=\'\'" 
     onmouseover="this.style.backgroundColor=\'#EAFFEA\'"> 
     <td>'.$row_visitors['visitor_ip'].'</td> 
     <td>'.$row_visitors['visitor_browser'].'</td> 
     <td>'.$row_visitors['visitor_hour'].':'.$row_visitors['visitor_minute'].'</td> 
     <td>'.$row_visitors['visitor_refferer'].'</td> 
     <td>'.$row_visitors['visitor_page'].'</td> 
     <td>'.$row_visitors['visitor_affiliate'].'</td> 
     </tr>'; 
} while ($row_visitors = mysql_fetch_assoc($insert_visitors)); 
paginate($start,$limit,$nbItems,"display_visits.php",""); 
?> 
+3

[你的代碼是脆弱的](http://xkcd.com/327/) –

+0

^^很好,告訴他什麼以及如何解決它。 – 2013-01-17 20:42:13

+2

[**請不要在新代碼**中使用'mysql_ *'函數](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – PeeHaa

回答

1

在PHP放置在URL中的值:

http:/www.example.com/?aff=someuser 

放入一個超全局$_GET。這是一個數組,您可以通過搶出aff值:

$_GET['aff'] 

在你的情況,你可以用它來更新您的查詢:

if ($_GET['aff']!="") { 
    $aff = $_GET['aff']; 
    $aff = sanitise($aff); 
    $query_visitors .= " AND user = '".$aff."'"; 
} 

請注意,你將不得不santise值,mysql_real_escape_string通常用於執行此操作。

最後,mysql_ *方法被deprectaed,你真的不應該使用它們。見here for information

+0

試過,但我得到這你有你的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在第1行'='admin'visitor_day = 18 AND visitor_month = 01 AND visitor_year = 2013 LIMIT'附近使用正確的語法。 –

+1

您的實際查詢是什麼。你是否錯過了某處的「AND」?某處是否有額外的「AND」? – showdev

+0

@StauroulaXalkia您需要在用戶檢查和訪客日檢查之間使用「AND」。 – Jim

0

試試這個數據:

 <?php 
     $url = "http:/www.example.com/?aff=someuser"; 
     parse_str(parse_url($url, PHP_URL_QUERY), $parts); 
     var_dump($parts); // u will get array(1) { ["aff"]=> string(8) "someuser" } 
     ?>