duanlao6573 2012-06-19 15:09
浏览 60

查询返回没有找到的行

I developed the form in PHP to search a MySQL database, however no matter how I try it still does not retrieve any results at all. And I cannot find any Syntax errors or other similar issues in the code below,

    <?php
    $txtkv=$_POST['txtkv'];
    $cbgen=$_POST['txtgenerator'];
    $cbinsulation=$_POST['txtinsulation'];
    $cbclass=$_POST['txtclass'];
    $cbairinlet=$_POST['txtairInlet'];
    $cbip=$_POST['txtIp'];

    // set database server access variables: 
    $host = "localhost"; 
    $user = "root"; 
    $pass = ""; 
    $db = "nordhavn";

    $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); 
    mysql_select_db($db) or die ("Unable to select database!"); 

    $query="SELECT Scania.GensetType, Scania.EngineType, Scania.Engine60Hz, Scania.Alternator,NordhavnGenset.MaxKw,  NordhavnGenset.MaxKva, Scania.PriceEur
    FROM Scania 
    LEFT JOIN NordhavnGenset ON Scania.Alternator=NordhavnGenset.Alternator 
    LEFT JOIN Generator ON Generator.Alternator=Scania.Alternator
    LEFT JOIN Insulation ON Insulation.Insulation=NordhavnGenset.Insulation
    LEFT JOIN Klasse ON Klasse.Klasse=NordhavnGenset.Class
    LEFT JOIN AirInletFilter ON AirInletFilter.AirInletFilter=NordhavnGenset.AirInletFilter
    LEFT JOIN IP ON IP.IP=NordhavnGenset.Ip
    WHERE (NordhavnGenset.MaxKva='".$txtkv."')   and (Generator.Alternator='".$cbgen."')  and (Insulation.Insulation='".$cbinsulation."')  and (Klasse.Klasse='".$cbclass."')  and (AirInletFilter.AirInletFilter='".$cbairinlet."')  and (IP.IP='".$cbip."')";        
    $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 
    $i = 0;
    if (mysql_num_rows($result) > 0) { 
          echo "<table cellpadding=10 border=1>
                <tr>
                    <td>    Gense Type (Scania.GensetType)  </td>
                <td>    Engine type (Scania.Enginetype) </td>
                <td>    Engine 60Hz  (Scania.Engine60hz)</td>
                <td>    Alternator (Scania.Alternator and Genrator.Alternator)  </td>   <td>    Max Kw  (NordhavnGenset.MaxKw)  </td>
                    <td>    Max Kva  (NordhavnGenset.MaxKva)</td>
                    <td>    Price Euro (Scania.PriceEur)    </td>
                </tr>";    
          while(($row = mysql_fetch_row($result)) !== false) { 
                $i++;
                echo "<tr class=\"d".($i & 1)."\">"; 
                echo "<td>"."<center>".$row[1]."</center>"."</td>";
                echo "<td>"."<center>".$row[2]."</center>"."</td>";
                echo "<td>"."<center>".$row[3]."</center>"."</td>";
                echo "<td>"."<center>".$row[4]."</center>"."</td>"; 
                echo "<td>"."<center>".$row[5]."</center>"."</td>";
                echo "<td>"."<center>".$row[6]."</center>"."</td>";
                echo "<td>"."<center>".$row[7]."</center>"."</td>";
                echo "<td>"."<center>".$row[8]."</center>"."</td>"; 
                echo "<td>"."<center>".$row[9]."</center>"."</td>";
                echo "<td>"."<center>".$row[10]."</center>"."</td>";
                echo "<td>"."<center>".$row[11]."</center>"."</td>";
                echo "</tr>"; 
            } 
                echo "</table>"; 
        }else { 
            echo "No rows found!"; 
        }     
    mysql_free_result($result); 
    mysql_close($connection); 
    ?>
  • 写回答

1条回答 默认 最新

  • douzhang3356 2012-06-19 15:59
    关注

    What are you expecting as a result, you seem to have many conditions in there. Search forms should provide many criterias to the user but only use them if the user provided something.

    For example, instead of using all criterias at once in one big query, do this:

    $criterias = array("1=1");
    if(isset($_POST['txtkv'])){ $criterias[] = 'NordhavnGenset.MaxKva = "'.mysql_real_escape_string($_POST['txtkv']).'"'; }
    if(isset($_POST['cbgen'])){ $criterias[] = 'Generator.Alternator = "'.mysql_real_escape_string($_POST['cbgen']).'"'; }
    if(isset($_POST['cbinsulation'])){ $criterias[] = 'Insulation.Insulation = "'.mysql_real_escape_string($cbinsulation).'"'; }
    if(isset($_POST['cbclass'])){ $criterias[] = 'Klasse.Klasse = "'.mysql_real_escape_string($cbclass).'"'; }
    if(isset($_POST['cbairinlet'])){ $criterias[] = 'AirInletFilter.AirInletFilter = "'.mysql_real_escape_string($cbairinlet).'"'; }
    if(isset($_POST['cbip'])){ $criterias[] = 'IP.IP = "'.mysql_real_escape_string($cbip).'"'; }
    
    $query = "
    SELECT 
        Scania.GensetType, Scania.EngineType, Scania.Engine60Hz, 
        Scania.Alternator,NordhavnGenset.MaxKw, NordhavnGenset.MaxKva, 
        Scania.PriceEur
    
    FROM 
        Scania 
        LEFT JOIN NordhavnGenset ON Scania.Alternator = NordhavnGenset.Alternator 
        LEFT JOIN Generator ON Generator.Alternator = Scania.Alternator
        LEFT JOIN Insulation ON Insulation.Insulation = NordhavnGenset.Insulation
        LEFT JOIN Klasse ON Klasse.Klasse = NordhavnGenset.Class
        LEFT JOIN AirInletFilter ON AirInletFilter.AirInletFilter = NordhavnGenset.AirInletFilter
        LEFT JOIN IP ON IP.IP = NordhavnGenset.Ip
    
    WHERE 
        ".implode(' AND ', $criterias);
    
    $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());
    

    This will create a full query with only the criterias that you need. Notice that at the top, we CREATE the array of criterias and then fill it will all criterias as we go. We also take time to escape them to secure our input which i didn't see in the original request.

    Then, using IMPLODE, we collate all items together in between ANDs to create a list of criterias. The "1=1" is used to prevent an empty WHERE clause in case no criterias are provided but in all cases 1=1 is always true, so it will not filter anything out.

    I hope this helps and i hope it really was your problem...

    Good luck

    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题