2013-06-28 135 views
0

我有一个名为在杆状,经验,公司该表的几个字段当前表等搜索多个字段

我想要有三个选择框一个呈现搜索来自post字段的帖子,第二个显示experience和第三个显示来自单个当前表格的company

我希望如果用户从任何一个选择字段中进行选择,或者从所有选择字段中搜索相应的数据并显示仅与搜索相关的结果。

为此,我编写了代码,但其无法正常工作,请帮助我找到我出错的地方,我无法理解。

它只显示在后栏输入的数据,但不在其他栏中输入。

我的代码放在这里

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name=""> 
<table> 

<tr> 
<?php 
$ss=mysql_query("select * from current"); 

?> 
<td><select name="post"><?php while($rr=mysql_fetch_array($ss)) 
{?><option value="<?php echo $rr['post'];?>"><?php echo $rr['post'];?></option><?php } ?></select></td> 
<?php 
$s11=mysql_query("select * from current"); 

?> 
<td><select name="experience"><?php while($r11=mysql_fetch_array($s11)) 
{?><option value="<?php echo $r11['experience'];?>"><?php echo $r11['experience'];?></option><?php } ?> </select></td> 
<td> 
<?php 
$sss=mysql_query("select * from current"); 

?> 
<select name="company"><?php while($rrr=mysql_fetch_array($sss)) 
{?><option value="<?php echo $rrr['cname'];?>"><?php echo $rrr['cname'];?></option><?php } ?></select></td> 
<td><input type="submit" name="search" value="Search" /></td> 
</tr> 

</table> 
    </form> 

我的搜索代码放在这里

<?php 
include('Admin/config.php'); 
    error_reporting(E_ERROR | E_WARNING | E_PARSE); 
    if(isset($_REQUEST['search'])) 
    { 
$post = $_REQUEST['post']; 
$ex = $_REQUEST['experience']; 
$company = $_REQUEST['company']; 
$query = "select * from current where post like '%$post%' or experience like '%$ex%' or cname like '%$company%' "; 
$res1 = mysql_query($query); 
while($rows = mysql_fetch_array($res1)) 
{ 
?> 
<tr> 
    <td><?php echo $rows['date'];?></td> 
    <td><?php echo $rows['post'];?></td> 
    <td><?php echo $rows['qualification'];?></td> 
    <td><?php echo $rows['experience'];?></td> 
    <td><?php echo $rows['nop'];?></td> 
    <td><?php echo $rows['noj'];?></td> 
    <td><?php echo $rows['cname'];?></td> 
    <td><?php echo $rows['jloc'];?></td> 


    </tr><?php 

    }} 

    else 
    { 


    $s=mysql_query("SELECT * FROM current ORDER BY date DESC"); 



    while($rows=mysql_fetch_array($s)) 
    { 
    ?> 
    <tr> 
    <td><?php echo $rows['date'];?></td> 
    <td><?php echo $rows['post'];?></td> 
    <td><?php echo $rows['qualification'];?></td> 
    <td><?php echo $rows['experience'];?></td> 
    <td><?php echo $rows['nop'];?></td> 
    <td><?php echo $rows['noj'];?></td> 
    <td><?php echo $rows['cname'];?></td> 
    <td><?php echo $rows['jloc'];?></td> 


    </tr> 
    <?php 
    }} 
    ?> 
    </table> 
+0

请尝试的var_dump'$ query'向我们展示了输出 – jbrtrnd

+0

你可以张贴的一些示例你得到的结果是什么以及你期望得到什么? – Prix

+1

您的代码对SQL注入攻击广泛开放,您不会对用户输入进行任何验证或消毒。你至少应该在输入上使用mysql_real_escape_string(),并且最好使用预处理语句和附加验证。另外,mysql_ *方法已被弃用。改用mysqli或PDO。 http://xkcd.com/327/ – GordonM

回答

1
<?php 
include('Admin/config.php'); 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 
$ss=mysql_query("select `post`,`experience`,`cname` from current"); 
$filter = array(); 
while($rr = mysql_fetch_assoc($ss)) { 
    foreach ($rr as $key => $val) { 
     $filter[$key][] = $val; 
    } 
} 
$request = array('post' => '', 'experience' => '', 'cname' => ''); 
if (isset($_REQUEST['search'])) 
{ 
    $request = array(
     'post' => $_REQUEST['post'], 
     'experience' => $_REQUEST['experience'], 
     'cname' => $_REQUEST['cname'], 
    ); 
} 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name=""> 
    <table> 
     <tr> 

      <?php 
      foreach ($filter as $name => $value) { 
       ?> 
       <td> 
        <select name="<?=$name?>"> 
         <? 
         foreach ($value as $key => $val) { 
          ?> 
          <option value="<?=$val?>"<?= $val === $request[$name] ? ' selected' : ''?>><?=$val?></option> 
         <? 
         } 
         ?> 
        </select> 
       </td> 
      <? 
      } 
      ?> 
      <td><input type="submit" name="search" value="Search" /></td> 
     </tr> 
    </table> 
</form> 
<table> 
    <?php 
    if(isset($_REQUEST['search'])) 
    { 
     $where = ''; 
     foreach ($request as $key => $val) { 
      if ($where !== '') { 
       $where .= ' OR '; 
      } 
      $where .= "`".$key."` like '%".$val."%' "; 
     } 
     $query = "select * from current where ".$where; 
    } 
    else 
    { 
     $query = "select * from current ORDER BY date DESC"; 
    } 
    $res1 = mysql_query($query); 
    while($rows=mysql_fetch_array($res1)) 
    { 
     ?> 
     <tr> 
      <td><?php echo $rows['date'];?></td> 
      <td><?php echo $rows['post'];?></td> 
      <td><?php echo $rows['qualification'];?></td> 
      <td><?php echo $rows['experience'];?></td> 
      <td><?php echo $rows['nop'];?></td> 
      <td><?php echo $rows['noj'];?></td> 
      <td><?php echo $rows['cname'];?></td> 
      <td><?php echo $rows['jloc'];?></td> 
     </tr> 
    <?php 
    } 
    ?> 
</table> 
+0

谢谢你的代码工作正常@ bbldzr –

+0

如果我想要三个条件的相关搜索,就好像选择了一个字段,然后再显示结果,如果选择了两个字段然后显示与那些结果相关的结果,我该怎么办?领域例如。如果我在第一选择岗位即经理(民事),并在第二个文本领域经验1 - 4年,那么结果应该是只有1 - 4年的经理(民事)。但在上面的代码中显示经理(民事)5-6年,另一个结果设计工程师1-4年。如果我想显示这样的结果,我该怎么办,否则显示匹配未找到。它对我的重要性,请尽可能尽快回复 –