【问题标题】:How to make search form where user has three columns to search.Using PHP AND SQL AND HTML如何制作用户有三列要搜索的搜索表单。使用 PHP AND SQL AND HTML
【发布时间】:2016-02-14 22:46:27
【问题描述】:

我想知道如何制作一个搜索表单,其中用户有 3 个选项可供搜索

  1. 按年龄搜索(下拉列表 18-25 和 26-40)
  2. 按性别(男性或女性)搜索
  3. 按名称搜索

在我的代码中,当我单击带有空白字段的“提交”时,它会将所有我不知道的数据扔给:

<?php
$output = NULL;

if (isset ( $_POST ['submit'] )) {
    // Connect to database
    $mysqli = new Mysqli ( "localhost", "root", "2222", "matrimonialPortal" );

    $search = $mysqli->real_escape_string ( $_POST ['search'] );

    // Query the databse
    $resultSet = $mysqli->query ( "SELECT * FROM mp_user WHERE name LIKE '%$search%' OR email LIKE '%$search%' OR salutation LIKE '%$search%' OR id LIKE '%$search%'" );

    if ($resultSet->num_rows > 0) {
        while ( $rows = $resultSet->fetch_assoc () ) {
            $name = $rows ['name'];
            $email = $rows ['email'];


            $output .= "::<strong>The Details of your search</strong> ::<br /> Name: $name<br /> Email:$email<br /><br /> ";
        }
    } else {
        $output = "Oops No results Found!!";
    }
}
?>

<!-- The HTML PART -->
<form method="POST">
    <div>
        <p>
            Search By name: <input type="TEXT" name="search" /> <input
                type="SUBMIT" name="submit" value="Search >>" />
        </p>
    </div>

    <div>Search By Age :
        <select name="age">
            <option></option>
            <option value="18-20">18-20</option>
            <option value="20-25">20-25</option>
        </select><input type="SUBMIT" name="submit" value="Search >>" />
    </div>
    <br />
    <div>
        Search By Gender: 
        <select name="salutation">
            <option></option>
            <option value="0">--- Male ---</option>
            <option value="1">--- Female ---</option>
        </select> <input type="SUBMIT" name="submit" value="Search >>" />
    </div>
    <br> <br>
</form>
<?php echo $output; ?>

【问题讨论】:

  • “抛出所有数据”是什么意思,您能澄清一下您的问题吗?
  • 当您提交空白字段时,脚本会返回所有记录,因为您的 MySQL 查询 - 所有变量本质上都是空格,因此不会过滤任何内容。您可以为查询中返回的行添加限制,也可以添加执行不同查询的条件或根本不执行。

标签: php html mysql


【解决方案1】:

看来您是 PHP 新手。这里有一个解决方案。

第一个 HTML 部分。这里使用“action”,表示页面将定位文件并处理数据。例如 action="search_process.php"。但是,如果您正在处理来自同一页面的数据,请使用 $_SERVER['PHP_SELF'];

       <!-- The HTML PART -->
        <form method="POST" action="$_SERVER['PHP_SELF']"> // here it will load the self page
            <div>
                <p>
    Search By name: <input type="text" name="search_name" />
    Search By age: <input type="text" name="search_age" />
    Search By gender: <input type="TEXT" name="search_gender" /> 
<input type="submit" name="submit_name" value="Search >>" />
                </p>
            </div>

现在是 PHP 部分:

    <?php 

           if(isset($_POST['submit_name'])
           {
             //What happens after you submit? We will now take all the values you submit in variables

              $name = (!empty($_POST['search_name']))?mysql_real_escape_string($_POST['search_name']):null; //NOTE: DO NOT JUST USE $name = $_POST['search_name'] as it will give undefined index error (though your data will be processed) and will also be open to SQL injections. To avoid SQL injections user mysql_real_escape_string.
              $age = (!empty($_POST['search_age']))?mysql_real_escape_string($_POST['search_age']):null;
              $gender = (!empty($_POST['search_gender']))?mysql_real_escape_string($_POST['search_gender']):null;

           //Now we will match these values with the data in the database

        $abc = "SELECT * FROM table_name WHERE field_name LIKE '".$name."' or field_gender LIKE '".$gender."' or field_age LIKE '".$age."'"; // USE "or" IF YOU WANT TO GET SEARCH RESULT IF ANY OF THE THREE FIELD MATCHES. IF YOU WANT TO GET SEARCH RESULT ONLY WHEN ALL THE FIELD MATCHES THEN REPLACE "or" with "and"
        $def = mysql_query($abc) or die(mysql_error())// always use "or die(mysql_error())". This will return any error that your script may encounter

   //NOW THAT WE HAVE GOT THE VALUES AND SEARCHED THEM WE WILL NOW SHOW THE RESULT IN A TABLE
        ?>    
        <table cellspacing="0" cellpadding="0" border"0">
          <tr>
            <th>Name</th>
            <th>Age</th>
            <th>Gender</th>
          </tr>
        <?php while($row = mysql_fetch_array($def)) {  // I HAD MISSED OUT A WHILE LOOP HERE. SO I AM EDITING IT HERE. YOU NEED TO USE A WHILE LOOP TO DISPLAY THE DATA THAT YOU GOT AFTER SEARCHING.
          <tr>
            <td><?php echo $row[field_name]; ?></td>
            <td><?php echo $row[field_age]; ?></td>
            <td><?php echo $row[field_gender]; ?></td>
          </tr>
        <?php } ?>
        </table>
    <?php } ?>

您的查询的完美解决方案。一切顺利。

【讨论】:

  • 此解决方案在 mysql_ 中,但您可以根据需要将其转换为 mysqli_。另外,我已经在表格中显示了结果,但您可以以任何您想要的方式显示它。
  • ,你猜对了,我对 php 还很陌生,感谢你提供的代码,它帮助我写了一个好的代码,也学到了一些东西。如果你能,我将不胜感激帮助添加代码以使用存储用户出生日期的“dob”列计算年龄。我尝试了几个我无法制作的代码代码。我想要的是计算年龄并存储它以及何时用户尝试搜索 ie(18 到 25 岁左右的男性)。然后它应该显示相应的注册用户。
  • 嘿,首先很高兴听到你学到了一些东西。现在第二次,我已经编辑了答案中的表格部分,因为我错过了一个必要的 WHILE LOOP。
  • 我也可以帮您计算年龄,但稍后..我现在很着急..如果你用
    而不是
    每当您想执行搜索时。
  • 也请接受答案,如果对您有帮助,请加 1 :)
【解决方案2】:

我不能给你完整的代码,但这里有几个解决方案..

  1. 使用 3 个不同的表单和 3 个不同的提交按钮。

  2. 在 html 表单上使用单选按钮,并在 PHP 端进行检查并根据选择的单选或选择的单选执行操作。

  3. 使用按钮而不是提交,单选按钮,隐藏字段,并在表单提交时将数据传递到不同的 php 页面(这可能很长)。

你有选择。

【讨论】:

    【解决方案3】:

    你可以替换你的代码

    if ($resultSet->num_rows > 0) {
    

    有了这个

    if ($resultSet->num_rows > 0 and trim($search) != "") {
    

    所以如果您的输入框为空,它将不会显示所有结果 希望对你有帮助

    编辑

    这是一个你可以得到想法的例子

    $qry = "SELECT * FROM test WHERE 1=1";
    
    if($purpose!="")
      $qry .= " AND purpose='$purpose'";
    
    if($location!="")
      $qry .= " AND location='$location'";
    
    if($type!="")
      $qry .= " AND type='$type'";
    
    and for age
    
    if ($age!='') {
      $qry .= " AND age between ".str_replace('-',' and ',$age);
    }
    

    【讨论】:

      【解决方案4】:

      当您发布一个空白变量并使用 %$search% 和 'OR' 其他条件进行查询时,sql 会匹配列 Name 中带有空格的所有记录!所以你将不得不使用一些变体;

      If(empty($POST['search']){ ['Query witbout Name parameter']} else{['Query with Name parameter']} 
      

      至于转换 DOB 以匹配年龄范围。您将不得不使用

      选择时间戳

      在这里回答

      calculate age based on date of birth

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 2021-05-10
        • 2011-08-20
        • 1970-01-01
        相关资源
        最近更新 更多