如何让我的PHP脚本验证在我的HTML表单上输入的内容,以便它只显示在该表单上输入的内容?

时间:2015-07-30 14:38:06

标签: php html mysql html5 phpmyadmin

首先,请允许我说我是数据库和PHP的新手。我有一个html表单,我试图用来过滤我的PHP结果。我不能为我的生活弄清楚如何设置它,以便表单可以过滤每个可能的输入,更不用说没有任何重复的条目。我认为在这里遇到的困难是有这么多标准可以过滤。我的表单包含,复选框,要排序的下拉列表,只需要搜索标题列的文本字段,以及在特定日期范围之间搜索的另一组文本字段。我正在失去它试图解决这个问题。请帮帮我。

这是我的HTML代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>Anime Database Search</title>
  <link href="vignette.css" rel="stylesheet" type="text/css">
  <link href="body.css" rel="stylesheet" type="text/css">
</head>

<body>
  <div id="banner">
    <p class="vignette"><img id="banner" src="Banners/SAO Banner.jpg" alt="Sword Art Online Banner" height="200px" width="100%"/></p>
  </div> <!-- end banner -->

  <div id="wrapper">
  <header>
    <hgroup>
       <h2>Anime Database Search</h2>
    </hgroup>
  </header>

  <form id="search" action="database.php" method="GET">

  <b>Title:</b>
  <br>
  <input type="text" name="search_box" value="" />

  <br>
  <br>

  <b>Release Date:</b>
    <br>
  <input type="us-date1" name="mindate"> to <input type="us-date2" name="maxdate">

  <br>
  <br>

  <b>Licensing Type:</b>
  <br>
    <select name="license">
      <option selected value="title">Licensing</option>
      <option value="dubbed">Dubbed Titles Only</option>
      <option value="subbed">Subbed Titles Only</option>
    </select> <!-- end license -->

  <br>
  <br>

    <b>Genres:</b> <div id="genres">
        <div id="left">
          <input type="checkbox" name="action">Action</input><br>
          <input type="checkbox" name="action">Adventure</input><br>
          <input type="checkbox" name="action">Comedy</input><br>
          <input type="checkbox" name="action">Drama</input><br>
          <input type="checkbox" name="action">Fantasy</input><br>
          <input type="checkbox" name="action">Horror</input><br>
          <input type="checkbox" name="action">Magic</input><br>
          <input type="checkbox" name="action">Mecha</input><br>
        </div> <!-- end left -->
        <div id="right">
          <input type="checkbox" name="action">Mystery</input><br>
          <input type="checkbox" name="action">Psychological</input><br>
          <input type="checkbox" name="action">Romance</input><br>
          <input type="checkbox" name="action">Science Fiction</input><br>
          <input type="checkbox" name="action">Slice of Life</input><br>
          <input type="checkbox" name="action">Supernatural</input><br>
          <input type="checkbox" name="action">Thriller</input><br>
        </div> <!-- end right -->
    </div> <!-- end genres -->

  <br>
  <br>

    <div id="Sort_By">
    <b>Sort By:</b>
    <br>
    <select name="Sort" required>
      <option value="">Select One</option>
      <option selected value="rating">Rating</option>
      <option value="alphabetical">Alphabetical</option>
      <option value="released">Release Date</option>
    </select> <!-- end Sort -->
    </div> <!-- end Sort_by -->

  <br>

    <div id="search_buttons">
      <input type="submit" name="submit" value="Search">
      <input type="reset" value="Reset">
    </div> <!-- end search_button -->

  </form> <!-- end search -->
  </div> <!-- end wrapper -->
</body>
</html>

这是我的PHP代码:

<?php

// Include DB Connection File
include "connection.php";
?>

<!-- Stylesheet for Table -->
<style>
  <?php
    include "php_results.css"
  ?>
</style>

<?php

$query = "SELECT * FROM my_anime_combined";

$fetch = mysql_query($query) or die($dberror1);
?>

<head>
  <title>Results</title>
</head>
<button onclick="history.go(-1);">Return To Search </button>
<table width="100%" cellpadding="5" border="1">

  <tr>
    <td id="results"><strong>Title</strong></td>
    <td id="results"><strong>Genre</strong></td>
    <td id="results"><strong>Season</strong></td>
    <td id="results"><strong>Episodes</strong></td>
    <td id="results"><strong>Released</strong></td>
    <td id="results"><strong>Media Type</strong></td>
    <td id="results"><strong>Sub/Dub</strong></td>
    <td id="results"><strong>Status</strong></td>
    <td id="results"><strong>Rating</strong><br><p>(5 stars)</p></td>
  </tr>
<?php
  while($row = mysql_fetch_assoc($fetch)){ ?>
  <tr>
      <td id="title"><?php echo $row['Title']; ?></td>
      <td id="genre"><?php echo nl2br($row['Genre']); ?></td>
      <td id="results"><?php echo $row['Season']; ?></td>
      <td id="results"><?php echo $row['Episodes']; ?></td>
      <td id="results"><?php echo $row['Released']; ?></td>
      <td id="results"><?php echo $row['Type']; ?></td>
      <td id="results"><?php echo $row['Licensing']; ?></td>
      <td id="results"><?php echo $row['Status']; ?></td>
      <td id="results"><?php echo $row['Rating']; ?></td>
  </tr>
  <?php
  } //end $fetch
  ?>
</table>

1 个答案:

答案 0 :(得分:1)

您的复选框缺少值,其名称也应为数组。

编辑。这仅仅是出于指导原因,您需要在用户输入后对每个全局进行清理。谢谢你提醒这个@Brian Showalter

input type="checkbox" name="action[]" value="action">Action</input><br />
<input type="checkbox" name="action[]" value="adventure">Adventure</input><br />
<input type="checkbox" name="action[]" value="comedy">Comedy</input><br />

在你的位置我会做动态的mysql查询,根据用户的选择而改变并抛出他想要的数据。

$stmt = 'Select * FROM my_table WHERE ';

if(count($_POST['action']) > 1){
         foreach($_POST['action'] as $action) {
             $stmt.= 'genre =' . $action . ' OR genre=';
          }

     $stmt = trim($stmt, ' OR genre=');

} elseif(count($_POST['action']) == 1) {
         foreach($_POST['action'] as $action){
             $stmt.= 'genre=' . $action;
         }
}else {
$stmt = trim($trim, ' WHERE ');
}

.edit:例如你可以在上面添加,这实际上取决于你将如何构造你的SQL语句。以上只会选择所有记录。

$stmt -- now you have here full statement will all action filters.

接下来,您可以添加标题和许可证:

$stmt.=' AND title=' . ' $_POST['title'] . ' AND license =' .           $_POST['license'];`

你必须尝试构建一个有效的查询,只需要var_dump或print_r来查看你得到的内容。

将其余条件粘贴到$ stmt并执行它。其余的相当简单。

上面的代码将循环遍历所有类型字段并粘贴到您的SQL QUERY上,您不必再担心该字段了。

通过胶水,我的意思是为你的$ stmt添加其余的条件。

以下是基于日期选择的基本示例:

SELECT * FROM `la_schedule` WHERE `start_date` > '2012-11-18';