2016-03-21 90 views
0

我創建了一個詳細頁面,我可以通過填充值過濾人員,我的表格如何不顯示地址和簡歷信息。這兩個是在單獨的表中,所以我有他們自己的值地址表和cv(pdf文件)表。代碼未顯示來自其他表的記錄

<?php 

if(isset($_POST['search'])) 
{ 
$valueToSearch = $_POST['valueToSearch']; 
// search in all table columns 
// using concat mysql function 
$query = "SELECT person_id, person_firstname, person_lastname, 
      person_email, person_phonenumber, 
      address_street,address_housenumber, 
      address_city,address_state,address_zipcode,cv_path 
     FROM person 
     inner join address on address.address_id = person.person_address 
     inner join cv on cv.cv_id = person.person_cv 
      WHERE CONCAT(`person_firstname`, `person_lastname`, `address_street`, `address_housenumber`, `address_zipcode`, `address_city`, `address_state`, `person_email`, `person_phonenumber`) 
      LIKE '%".$valueToSearch."%'"; 
$search_result = filterTable($query); 

} 
else { 
$query = "SELECT * FROM `person`"; 
$search_result = filterTable($query); 
} 

// function to connect and execute the query 
function filterTable($query) 
{ 
$connect = mysqli_connect("localhost", "root", "usbw", "persons"); 
$filter_Result = mysqli_query($connect, $query); 
return $filter_Result; 
} 

?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>PHP HTML TABLE DATA SEARCH</title> 
    <style> 
     table,tr,th,td 
     { 
      border: 1px solid black; 
     } 
    </style> 
</head> 
<body> 

    <form action="testing.php" method="post"> 
     <input type="text" name="valueToSearch" placeholder="Value To Search"><br><br> 
     <input type="submit" name="search" value="Filter"><br><br> 

     <table> 
      <tr> 
       <th>Voornaam</th> 
       <th>Achternaam</th> 
       <th>Straat</th> 
       <th>Huisnummer</th> 
       <th>Postcode</th> 
       <th>Stad</th> 
       <th>Provincie</th> 
       <th>Email</th> 
       <th>Mobiel</th> 
       <th>cv</th> 
       <th>delete</th> 
      </tr>; 

    <!-- populate table from mysql database --> 
      <?php while($row = mysqli_fetch_array($search_result)):?> 
      <tr> 
       <td><?php echo $row['person_firstname'];?></td> 
       <td><?php echo $row['person_lastname'];?></td> 
       <td><?php echo $row['address_street'];?></td> 
       <td><?php echo $row['address_housenumber'];?></td> 
       <td><?php echo $row['address_zipcode'];?></td> 
       <td><?php echo $row['address_city'];?></td> 
       <td><?php echo $row['address_state'];?></td> 
       <td><?php echo $row['person_email'];?></td> 
       <td><?php echo $row['person_phonenumber'];?></td> 
       <td><?php echo "<a href='http://localhost:8080/website/" . $row['cv_path'] . "'>cv file</a>";?></td> 
       <td><?php echo "<a href='delete.php?person_id=" . $row['person_id'] . "'>delete</a>";?></td> 

      </tr> 
      <?php endwhile;?> 
     </table> 
    </form> 

</body> 
</html> 

這一切奇怪的是,當我去的網頁它顯示了我的錯誤:注意:未定義指數:address_street在d:\上線XX服務器\ ROOT \網站\ testing.php(用於所有地址和cv fiels)。但是當我過濾一些東西時,它會顯示所有的東西,就像地址和簡歷顯示一樣。

UPDATE:

1

UPDATE2: Delete.php:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "usbw"; 
$dbname = "persons"; 

// CREATE A CONNECTION WITH THE DATABASE 
// CONNECTIE MAKEN MET DATABASE 
$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

// GET ID FROM person_id 
// PAK ID VAN person_id 
$id=$_GET['person_id']; 

// CREATE PREPARE STATMENT FOR DELETING RECORDS FROM person_id 
// MAAK EEN STATEMENT OM WAARDES TE VERWIJDEREN VAN person_id 
$stmt = $conn->prepare('DELETE FROM person WHERE person_id = ?'); 
$stmt->bind_param('s', $id);           

// EXECUTE STATEMENT AND IF RESULT IS FALSE SHOW ERROR 
// VOER STATEMENT UIT EN ALS VALS IS GEEF ERROR AAN 
$result = $stmt->execute();  
if ($result === FALSE) { 
    die("Error: " . $stmt->error); 
} 
// AFTER CLICKING DELETE GO TO LINK 
// NA HET DRUKKEN VAN DELETE GA NAAR LINK 
header("Location: http://localhost:8080/Website/admin.php"); 

// CLOSE CONNECTION AND STATEMENT 
// SLUIT CONNECTIE EN STATEMENT 
$stmt->close(); 
$conn->close(); 
?> 
+0

你的連接條款在哪裏? –

+0

哎呀!等待一分鐘我有其他選擇代碼 – GLRotterdam

回答

2

此行爲可能造成的,因爲當你進入頁面,你是不是提交$_POST["search"],因此進入腳​​本else分支僅選擇表person中的數據,所有證據不是包含列street_address

然後你試圖打印出來,這是未定義的索引問題發生的地方。


編輯:隨着話題的進行,OP撞到了另外一個問題 - 當他從人的刪除記錄,但在表cvaddress剩餘的記錄。

事實上,你需要執行三個總共的sql查詢DELETE。不是一個。

首先,你要確定cv表和address表記錄並將其刪除,然後刪除該人的記錄:

DELETE FROM address WHERE address_id='$addressIDForPerson' 

哪裏$addressIDForPersonperson表中記錄person_address列的值你正試圖刪除。

第二步將從cv表中刪除記錄表,再次通過person表中列的值確定。

DELETE FROM cv WHERE cv_id='$cvIDForPerson' 

其中$ cvIDForPerson是cv表,您正試圖刪除記錄person_cv列的值。

最後,你刪除recordf ROM人

DELETE FROM person WHERE person_id=`$personID` 

哪裏$personID標識您要刪除的人。

+0

因此,如果我把'$查詢=「選擇*從人內部聯接地址內聯接簡歷」;'它應該工作? – GLRotterdam

+0

@GLRotterdam我不知道你的餐桌'人物'和'地址'是怎樣的。你需要做的是獲得所有你顯示的數據,即使在'else'分支。 TL; DR:你需要加入它,但是沒有你的桌子的知識,我不能告訴你究竟如何。 – FanaticD

+0

我試圖解釋,因爲我有更多的問題,你可以看到更多的:它顯示數據很多次,但在我的數據庫中只有一個記錄。 我有三張名爲person,address和cv的表address_id被鏈接到我的person_address並且cv_id被鏈接到了我的person_cv,所以每個表都與eachother有關係。我怎麼看我有一個更多的問題,當按下刪除它只會刪除人員記錄,而不是地址和cv記錄... – GLRotterdam

0

在您的查詢:

SELECT * 
FROM `person` 
LEFT JOIN `address` 
LEFT JOIN `cv` 
WHERE CONCAT(`person_firstname`, `person_lastname`, `address_street`, `address_housenumber`, `address_zipcode`, `address_city`, `address_state`, `person_email`, `person_phonenumber`) LIKE '%".$valueToSearch."%'"; 

我沒有看到任何ON子句的聯接。

你應該把這些條款。

+0

然後看看@GLRotterdam的答案... –