2012-03-19 31 views
0

這是我的網頁。從不同的表中搜索php

enter image description here

我顯示與該網頁的學生姓名學生學費的細節。我有一個使用學生姓名作爲關鍵字的搜索部分。詳細信息從費用表中提取,學生姓名在費用表中保存爲ID。學生姓名保存在名爲tbl_students的另一個表中。我已使用以下查詢進行搜索。

$search = $_REQUEST['Submit']; 
    $keyword = $_REQUEST['keyword']; 


    if($keyword != '' ) 
    $fn = " and varStudentName LIKE '%$keyword%' "; 

$mainarr['query'] = "SELECT * FROM `tbl_students` where 1=1 ".$fn." order by intstudentId DESC"; 

搜索作品找遍顯示,但不顯示精細即學生的名字等細節,如原因和金額。我想這是因爲他們在收費表中。

我需要所有的細節應顯示,當我搜索使用學生的名字。我怎樣才能做到這一點?

+0

您需要加入學生和學費表,然後從該加入中選擇.... – 2012-03-19 05:31:01

+0

「where 1 = 1」where 1 does not equal 1? – 2012-03-19 05:31:38

+0

@dagon看起來好像只是在那裏,所以$ fn可以在開始時粘貼一個「和」,而不必檢查WHERE子句中是否還有其他術語。目前只有一個,但它看起來像這個代碼可能已從一個更詳細的腳本複製,可能會堆積在多個條件。 – octern 2012-03-19 19:49:22

回答

0

總之,你是對的,你的查詢是在不同的表上,你試圖顯示的數據。在這裏做的最好的事情可能是SQL Join語句。此處的文檔http://www.w3schools.com/sql/sql_join.asp解釋了您嘗試使用客戶和訂單的上下文而不是學生和費用完全相同的加入聲明。

0

使用student_id數據

$keyword= mysql_real_escape_string($_post['keyword']) 
select * from student st 
inner join fees f on st.studentId =f.studentId 
where st.studentname like '%keyword%' 
order by studentId desc ; 
0

加入了學生和費用表時沒有提供關於其他表足夠的信息,任何人都可以提出一個合適的左連接,但是,否則確保淨化你的查詢。

這是不好:$keyword = $_REQUEST['keyword'];

之所以說它不好是因爲有人可以在瀏覽器中輸入:

http://yourwebpage/?keyword=%';+drop+table+tbl_students

並通過這樣做,他們可以刪除所有數據。

正如您所看到的,這可能是一個開放漏洞,因爲它似乎允許遠程訪問者完全訪問您的MySQL服務器。出於安全原因,您需要清理輸入。例如,像這樣:

$keyword = mysql_real_escape_string($_REQUEST['keyword']);

$keyword = mysql_escape_string($_REQUEST['keyword'];)

請在發佈您的mysql_query()之前。即使您的魔法引號設置處於打開狀態,如果有人將此代碼遷移到另一臺服務器,該安全網絡也不會在那裏。