2014-04-21 23 views
0

我想在同一頁面上使用2個下拉列表,其中一個從Db中選擇表格,另一個從過濾選定的表格。我認爲這是非常基本的,但我是PHP和SQL的新手。我沒有問題使用提交按組篩選表,但我不知道在$table變量$_POST['tables']值分配給哪裏。下拉列表以選擇一個表格和額外的下拉列表來過濾

這裏是我的代碼的相關部分,:

$table=table_name; 

if(isset($_POST['tables'])) { 

    $table=$_POST['tables']; 

} 

//filtering by group 
    if(true===isset($_POST['value'])) { 
      if($_POST['value'] == 'All') { 
      // query to get all records 
       $query = "SELECT * FROM $table"; 
      } else { 
      // filter groups 
      $value=$_POST['value']; 
      $query = "SELECT * FROM $table WHERE Grupo='$value'"; 
      } 
    } else { 
      // the first time the page is loaded 

      $query = "SELECT * FROM $table ORDER BY Grupo ASC"; 
    } 

    $sql = mysqli_query($con,$query); 
+3

你很容易受到[SQL注入攻擊](http://bobby-tables.com) –

+0

你的問題不是很清楚。根據我的理解,您需要在一個下拉列表中顯示所有表格,另一方面,您要顯示所有列。我是否正確? – Prashant

+0

第一個下拉列表顯示了表格,第二個用於過濾第一個下拉列表中的選定表格 – andoni

回答

1

的index.php

<html> 
<head> 
<script> 
function sortResult(str) 
{ 
    var e = document.getElementById("firstDrop"); 
    var str1 = e.options[e.selectedIndex].value; 
    var e = document.getElementById("secondDrop"); 
    var str = e.options[e.selectedIndex].value; 
if (str=="") 
    { 
    document.getElementById("result").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("result").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","results.php?q="+str+"&t="+str1,true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

<!--database name--> 
<select name="tablename" id="firstDrop"> 
      <option selected='selected' value="yourdatabasename1">DB1</option> 
      <option value="yourdatabasename2">DB2</option> 
</select> 
<!--sort by what--> 
<select name="sortby" id="secondDrop"> 
      <option selected='selected' value="slno">slno</option> 
      <option value="name">name</option> 
      <option value="author">author</option> 
</select> 
<button id="sub" onclick="sortResult()">CLICK</button> 

<br><br> 
<div id="result"><b>Results will be listed here.</b></div> 

</body> 
</html> 

results.php

<?php 
$q = $_GET['q']; 
$t = $_GET['t']; 

$con = mysqli_connect('localhost','yourusername','password','database'); 
if (!$con) 
    { 
    die('Could not connect: ' . mysqli_error($con)); 
    } 

mysqli_select_db($con,"database"); 
$sql="SELECT * FROM ".$t." ORDER BY ".$q; 

$result = mysqli_query($con,$sql); 

echo "<table border='1'> 
<tr> 
<th>Name</th> 
<th>Author</th> 
<th>ID</th> 
</tr>"; 

while($row = mysqli_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" .$row['name']. "</td>"; 
    echo "<td>" .$row['author'] ."</td>"; 
    echo "<td>" .$row['slno']. "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 
echo $t; 
mysqli_close($con); 
?> 

相應地修改。

+0

這是...徹底,但有點難以使用:p –

+0

大聲笑。他是誰想要使用兩個下拉列表! –

+0

感謝它的工作!第一次打開頁面時可以顯示完整的表格嗎? – andoni

-1

正確的查詢syntax--

$query = "SELECT * FROM $table"; 

$query = "SELECT * FROM '".$table."'"; 


$query = "SELECT * FROM $table WHERE Grupo='$value'"; 

$query = "SELECT * FROM '".$table."' WHERE Grupo='".$value."'"; 

$query = "SELECT * FROM '".$table."' ORDER BY Grupo"; 

$query = "SELECT * FROM '".$table."' ORDER BY Grupo"; 
+0

查詢sintax很好,當我從下拉列表中選擇一個表格時數據顯示正確,但是當我選擇來自第二個列表的組,它總是過濾來自默認表的數據。 – andoni

+0

這沒有任何意義。你不會在sql表中引用表名。 –

0

你有一個錯字...

if(isset($_POST['tables'])) { 
    $tabla=$_POST['tables']; 
} 

變化

if(isset($_POST['tables'])) { 
    $table=$_POST['tables']; 
}