2013-12-18 147 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

相關問題