2012-03-19 39 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()之前。即使您的魔法引号设置处于打开状态,如果有人将此代码迁移到另一台服务器,该安全网络也不会在那里。