2016-02-12 94 views
1

我想用2选择选项()和()来过滤我的数据库我想要的是当用户加载页面时,他们可以看到数据库结果组织在表中,当他们选择选择(下拉列表)表格被过滤,他们可以选择一个选择(下拉列表)或两者以获得最佳结果。那么如何调整我的代码以按照我的要求工作?我使用oracle hr数据库,但我不断收到此错误:未定义的索引,可以告诉我为什么?使用选择过滤数据库

的index.php

<html> 
<head> 
</head> 
<body> 
<form action="emp.php" method="post" name="Form2" id="Form2"> 
<select id="officecode" name="officecode"> 
    <option value="">Select an officeCode:</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
</select> 
<select id="reportsTo" name="reportsTo" > 
    <option value="">reports To:</option> 
    <option value="1143">1143</option> 
    <option value="1102">1102</option> 
    <option value="1108">1108</option> 
    <option value="1056">1056</option> 
</select> 
</form> 
<br> 
<div id="result"><b> 
<?php include "emp.php"; ?> 
</b></div> 
<script> 
$(document).ready(function(){ 
    var office = $("#officecode"); 
    var report = $("#reportsTo"); 
    the_office.change(function(){ 
     var the_selected_office = $(this).val(); 
     self.location = "emp.php?off="+the_selected_office+"&rep="; 
    }); 
    the_report.change(function(){ 
     var the_selected_report = $(this).val(); 
     self.location = "emp.php?off=&rep="+the_selected_report+"; 
    }); 
}); 
</script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
</body> 
</html> 

emp.php

<?php 
$office = $_POST["off"]; 
$report = $_POST["rep"]; 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "classicmodels"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql="SELECT * FROM employees WHERE reportsTo= '".$office."' AND reportsTo= '".$report."' "; 
$result = $conn->query($sql); 

echo "<table> 
<tr> 
    <th>Firstname</th> 
    <th>Lastname</th> 
    <th>Employee Number</th> 
    <th>Extension</th> 
</tr>"; 
while($row = $result->fetch_assoc()) { 
    echo "<tr>"; 
    echo "<td>" . $row['firstName'] . "</td>"; 
    echo "<td>" . $row['lastName'] . "</td>"; 
    echo "<td>" . $row['employeeNumber'] . "</td>"; 
    echo "<td>" . $row['extension'] . "</td>"; 
    echo "</tr>"; 
} 
?> 
+0

你告诉它在同一时间发现与上级不同的价值观的员工,这是身体上不可能:)。因此,它可能是要在查询中使用不同的列来匹配$ office和$ report的值或....使用OR语句而不是AND? – Filip

+0

¿员工表如何? – Cuchu

+0

@Filip我的员工表具有以下属性:employeeNumber lastName firstName extension officeCode email jobTitle,所以我不认为查询是问题,我认为由于某种原因它不能识别$ office和$ report值,因为当我回声价值我得到了同样的错误:未定义的索引,谢谢你的时间 – Glory

回答

1

试试这个代码:两点,我的评论数据库连接和SQL(我的)需要加入到其他表,因为你的数据或概念是错误的。在这种情况下,POST是空的,而不是相同的POST和GET,测试代码并查看。

的index.php

<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<script> 

$(document).ready(function(){ 

    var office = $("#officecode"); 
    var report = $("#reportsTo"); 

    $("#officecode").change(function(){ 
     var the_selected_office = $(this).val(); 
     self.location = "index.php?off="+the_selected_office+"&rep="; 
    }); 

    $("#reportsTo").change(function(){ 
     var the_selected_report = $(this).val(); 
     self.location = "index.php?off=&rep="+the_selected_report+""; 
    }); 


}); 

</script> 

</head> 
<body> 
<select id="officecode" name="officecode"> 
    <option value="">Select an officeCode:</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
</select> 

<select id="reportsTo" name="reportsTo" > 
    <option value="">reports To:</option> 
    <option value="1143">1143</option> 
    <option value="1102">1102</option> 
    <option value="1108">1108</option> 
    <option value="1056">1056</option> 
</select> 
<br> 
<div id="result"><b> 
<?php include "emp.php"; ?> 
</b></div> 
</body> 
</html> 

emp.php

<?php 

    print_r("<pre>"); 
    print_r($_GET); 
    print_r($_POST); 
    print_r("</pre>"); 

    /*if(isset($_GET["off"]) || isset($_GET["rep"])) {*/ 

    $office = $_GET["off"]; 
    $report = $_GET["rep"]; 

    $where = array(); 
    if(!empty($office)) { 
     $where[] = "officeCode = {$office}"; 
    } 

    if(!empty($report)) { 
     $where[] = "reportsTo = {$report}"; 
    } 


$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "classicmodels"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 



if($where) { 
    $w = implode(" OR ", $where); 
} else { 
    $w = 1; 
} 

$sql="SELECT * FROM employees WHERE {$w}"; 
print_r("<pre>"); 
print_r($sql); 
print_r("</pre>"); 
$result = $conn->query($sql); 

echo "<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
<th>Employee Number</th> 
<th>Extension</th> 

</tr>"; 
while($row = $result->fetch_assoc()) { 
    echo "<tr>"; 
    echo "<td>" . $row['firstName'] . "</td>"; 
    echo "<td>" . $row['lastName'] . "</td>"; 
    echo "<td>" . $row['employeeNumber'] . "</td>"; 
    echo "<td>" . $row['extension'] . "</td>"; 

    echo "</tr>"; 
} 

/*}*/ 
?> 

Empty filter OfficeCode = 3

+0

它是一样的没有结果表是空的它不能识别传递的值 – Glory

+0

我在我的桌面上测试..编辑mi回答 – Cuchu

+0

但是reportsTo不存在于表中,系统中是否存在其他表?或者什么是报告在表中? – Cuchu