2013-12-18 148 views
-1

我试图搜索2013年约翰杰克逊待付款的报告,但它没有产生结果。为什么这个脚本不会产生结果

这个假设是当我插入name=John Jacksonclass=grade oneyear=2013,假设在设置表的year= 2013设置字段值检查,并从2013年

我支付表减去由约翰所许量查询有这两个表的支付和设置“

Note that I'w mention some of fields 

支付表(用于存储支付信息)

id fname  class  school_fee boarding exam_paper lunch date  year 
1 John Jackson Grade one 100000  300000 30000  1000 2013-12-12 0000-00-00 

设置表(用于存储每年的实际支付服务)

id boarding_setting exampaper_setting fee_setting lunch_setting year  date 
1 200000   30000    200000  180000   2013-12-18 NULL 
    300000   40000    300000  190000   2014-12-12 NULL   

在设置表,我把实际支付一定的服务期为一年,这样,当学生缴纳的例子(school_fee)的fee_setting场设置表会根据发布的年份减去支付表中支付的学费金额。

在这里php脚本加入两个表并从表中查询信息;

<?php include("../Connections/conn.php")?>      
    <?php 
    $fname="fname"; 
    $date="date"; 
    $class="class"; 

    if(isset($_REQUEST['submit'])){ 
    $fname=$_POST['fname']; 
    $date=$_POST['year']; 
    $class=$_POST['class']; 


    $sql2="SELECT SUM(boarding)as boarding,SUM(exam_paper)as 
    exam_paper,SUM(school_fee)as 
    school_fee,SUM(lunch)as lunch,fname,class,date,year 
    FROM payment 
    WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class like 
    '%".$class."%' AND  
    date like '%".$date."%' UNION 
    SELECT(boarding_setting,exampaper_setting,fee_setting,lunch_setting,year,date 
    ) 
    FROM setting WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class 
    like '%".$class."%' AND date like '%".$date."%'"; 

    $q=mysql_query($sql2); 

     } 
    else{ 
    $sql="SELECT * FROM payment"; 
    $q=mysql_query($sql); 
     } 
     ?> 

这我用输入搜索信息

<form method="post"> 
<table width="500" border="0"> 
<tr> 
<td>Student name</td> 
<td><input type="text" name="fname" value="<?php echo $fname;?>" /></td> 

<td>Class</td> 
<td><input type="text" width="10" name="class" value="<?php echo $class;?>" /></td> 


<td>Year</td> 
<td><input type="number" name="year" value="<?php echo $date;?>" /></td> 

<td><input type="submit" name="submit" value="Search" /></td> 

这回声脚本当然

<?php 
while(!empty($q) and $res=mysql_fetch_array($q)){ 
?> 
<tr> 
    <td width="15%"><?php echo $res['fname'];?></td> 
    <td width="8%"><?php echo $res['class'];?></td> 
    <td width="10%"><?php echo $res['boarding_setting']- $res['boarding'];?></td> 
    <td width="10%"><?php echo $res['exampaper_setting']- $res['exam_paper'];?></td> 
    <td width="8%"><?php echo $res['fee_setting']- $res['school_fee'];?></td> 
    <td width="10%"><?php echo $res['lunch_setting']- $res['lunch'];?></td> 
    <td width="10%" style="border-width:medium"><?php echo $res['date'];?></td> 
</tr> 

<?php }?> 
+0

调试它:检查脚本中的每一行**是否符合它的要求 – zerkms

回答

0

不是100%,这甚至会工作的形式。如果我是你,我会开始寻找使用MYSQLI,因为你使用的是不推荐使用的代码。 http://www.php.net/manual/en/mysqli.quickstart.dual-interface.php

<?php include("../Connections/conn.php")?>      
<?php 

$fname=$_POST['fname']; 
$date=$_POST['year']; 
$class=$_POST['class']; 

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



$sql2="SELECT SUM(boarding)as boarding,SUM(exam_paper)as 
exam_paper,SUM(school_fee)as 
school_fee,SUM(lunch)as lunch,SUM(trans_fee) as 
trans_fee,idnumber,fname,class,section,boarding,term,date,year FROM payment 
WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class like 
'%".$class."%' AND  
date like '%".$date."%' UNION 
SELECT(boarding_setting,exampaper_setting,fee_setting,lunch_setting, 
trans_setting,year,date 
) 
FROM setting WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class 
like '%".$class."%' AND date like '%".$date."%'"; 

$q=mysql_query($sql2); 

    } 
else{ 
$sql="SELECT * FROM payment"; 
$q=mysql_query($sql); 
    } 
    ?> 
0

据我所知UNION必须提取两种选择相同的字段数,第一个查询有10场,第二个有7

请问你的脚本产生任何错误?

我同意Binary101010,您使用的是不推荐的代码,它很容易受到SQL注入的影响,至少使用mysql_real_escape_string来自用户的输入。

+0

没有产生任何错误 – msuya

相关问题