2013-01-17 53 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" } 
     ?>