【问题标题】:Filtering Multiple Drop Down Menu Options Using PHP [closed]使用 PHP 过滤多个下拉菜单选项 [关闭]
【发布时间】:2016-07-29 22:01:12
【问题描述】:

编辑:我现在尝试再次编写我的 PHP 代码,它现在可以工作了,但除了每次按下提交时它会打印所有课程而不是过滤器周围的课程。此外,过滤时我似乎无法将两个表连接在一起。教练的名字来自不同的餐桌教练,我想接听这个。这是我的 PHP 代码。

<?php
include('connect-db.php');

if($_POST){
  if($_POST['Days'] == 'Monday') {
      $query = "SELECT * FROM lesson WHERE Day='Monday'";
  }elseif($_POST['Days'] == 'Tuesday') {
      $query = "SELECT * FROM lesson WHERE Day='Tuesday'";
  }elseif($_POST['Days'] == 'Wednesday') {
      $query = "SELECT * FROM lesson WHERE Day='Wednesday'";
  }elseif($_POST['Days'] == 'Thursday') {
      $query = "SELECT * FROM lesson WHERE Day='Thursday'";
  }elseif($_POST['Days'] == 'Friday') {
      $query = "SELECT * FROM lesson WHERE Day='Friday'";
  }elseif($_POST['Days'] == 'Saturday') {
      $query = "SELECT * FROM lesson WHERE Day='Saturday'";
  }elseif($_POST['Days'] == 'Sunday') {
      $query = "SELECT * FROM lesson WHERE Day='Sunday'";
  }elseif($_POST['Days'] == 'All') {
      $query = "SELECT * FROM lesson";
  }

  if($_POST['Instructors'] == 'Trevor') {
      $query = "SELECT * FROM lesson INNER JOIN instructor 
      ON lesson.Instructor_ID = instructor.Instructor_ID WHERE Forename='Trevor'";
  }elseif($_POST['Instructors'] == 'Laura') {
      $query = "SELECT * FROM lesson INNER JOIN instructor 
      ON lesson.Instructor_ID = instructor.Instructor_ID WHERE Forename='Laura'";
  }elseif($_POST['Instructors'] == 'Rachel') {
      $query = "SELECT * FROM lesson INNER JOIN instructor 
      ON lesson.Instructor_ID = instructor.Instructor_ID WHERE Forename='Rachel'";
  }elseif($_POST['Instructors'] == 'Ryan') {
      $query = "SELECT * FROM lesson INNER JOIN instructor 
      ON lesson.Instructor_ID = instructor.Instructor_ID WHERE Forename='Ryan'";
  }elseif($_POST['Instructors'] == 'Steve') {
      $query = "SELECT * FROM lesson INNER JOIN instructor 
      ON lesson.Instructor_ID = instructor.Instructor_ID WHERE Forename='Steve'";
  }elseif($_POST['Instructors'] == 'All') {
      $query = "SELECT * FROM lesson INNER JOIN instructor 
      ON lesson.Instructor_ID = instructor.Instructor_ID";
  }

  if($_POST['TypeLessons'] == 'Keeping Fit') {
      $query = "SELECT * FROM lesson WHERE Type_of_Lesson='Keeping Fit'";
  }elseif($_POST['TypeLessons'] == 'How to Swim') {
      $query = "SELECT * FROM lesson WHERE Day='How to Swim'";
  }elseif($_POST['TypeLessons'] == 'Relaxing Sessions') {
      $query = "SELECT * FROM lesson WHERE Day='Relaxing Sessions'";
  }elseif($_POST['TypeLessons'] == 'Being Sporty') {
      $query = "SELECT * FROM lesson WHERE Day='Being Sporty'";
  }elseif($_POST['TypeLessons'] == 'All') {
      $query = "SELECT * FROM lesson";
  }

  $result = mysql_query($query);

  if(!$result) {
  echo 'Could not get data: ' . mysql_error();
  }

 while($row = mysql_fetch_array($result)) {
  echo "Lesson ID: {$row["Lesson_ID"]} <br> " .
       "Name: {$row["Name"]} <br> " .
       "Day: {$row["Day"]} <br> " .
       "Start Date: {$row["Start_Date"]} <br> " .
       "Start Time: {$row["Start_Time"]} <br> " .
       "End Time: {$row["End_Time"]} <br> " .
       "Instructor: {$row["Forename"]} <br> " .
       "Type of Lesson: {$row["Type_of_Lesson"]} <br> " .
       "Number of Places: {$row["No_of_Places"]} <br> <br> ";
}

}
?> 

我一直在尝试过滤多个下拉菜单选项,以便在用户单击“搜索课程”时出现查询。但由于某种原因,我不断收到相同的错误消息:注意:未定义的索引:天。 即使 php 代码应该会捡起它,但它似乎不是,我无法弄清楚。这是我下面的代码,注意我还没有选择完所有的 PHP。 另外,一旦我在选择 PHP 时选择了这些选项,我如何也打印出这些查询。非常感谢。

<form action="tester_filter.php" method="post">
<select name="Days">
<option value="All" selected="selected">All days</option>
<option value="Monday">Monday</option>
<option value="Tuesday">Tuesday</option>
<option value="Wednesday">Wednesday</option>
<option value="Thursday">Thursday</option>
<option value="Friday">Friday</option>
<option value="Saturday">Saturday</option>
<option value="Sunday">Sunday</option>
</select>
<select name="Instructors">
<option value="All" selected="selected">All instructors</option>
<option value="Trevor">Trevor</option>
<option value="Laura">Laura</option>
<option value="Rachel">Rachel</option>
<option value="Ryan">Ryan</option>
<option value="Steve">Steve</option>
</select>
<select name="TypeLessons">
<option value="All" selected="selected">All types</option>
<option value="Keeping Fit">Keeping Fit</option>
<option value="How to Swim">How to Swim</option>
<option value="Relaxing Sessions">Relaxing Sessions</option>
<option value="Being Sporty">Being Sporty</option>
</select>
<input type="submit" value="search lessons" name="submit" />
</form>

【问题讨论】:

  • 向我们展示tester_filter.php的所有代码,这样我们就可以做出正确的答案,除非php标签就是其中的所有内容??
  • 现在就这些了,因为我试图获取“Days”,我不确定如何打印出这些查询。我在网上看了一下,有些用的是AJAX,我不懂。

标签: php sql filtering


【解决方案1】:
<?php
if($_POST){
  if($_POST['Days'] == 'Monday') {
      $query = "SELECT * FROM lesson WHERE Day='Monday'";
  }elseif($_POST['Days'] == 'Tuesday') {
      $query = "SELECT * FROM lesson WHERE Day='Tuesday'";
  }
}
?> 

试试这个

【讨论】:

  • 谢谢,这似乎已经摆脱了未定义索引错误消息。但是,一旦创建了这些查询,我如何从数据库中打印出详细信息?谢谢。
【解决方案2】:

使用以下代码修复通知错误。

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
  if($_POST['Days'] == 'Monday') {
    $query = "SELECT * FROM lesson WHERE Day='Monday'";
  }
  elseif($_POST['Days'] == 'Tuesday') {
    $query = "SELECT * FROM lesson WHERE Day='Tuesday'";
  }
}

或者你也可以通过下面的代码检查

if(!empty($_POST)) {
     // process, validate or save to DB  $_POST values,
}

【讨论】:

    【解决方案3】:

    假设您的 PHP 脚本位于 tester_filter.php 中,就像表单所暗示的那样(您实际上并没有在那里声明它),我不确定您期望得到什么, Days 正在获取,但是您只是将一个名为 Query 的变量设置为一个字符串,而没有对其进行任何操作。

    在每个 if 语句中,做一个调试

    if($_POST['Days'] == 'Monday') {
    //A check we're having the variable pass through 
    echo "this should say monday";
    $query = "SELECT * FROM lesson WHERE Day='Monday'";
    }
    

    如果您尝试检查您的选择是否正确(看起来不错),然后选择 monday 并查看是否输出了 echo,那么您看起来不错。

    你不能只分配一个没有连接到数据库的Query,你需要一个连接字符串,例如:

    //Connection variables
    $servername = "localhost";
    $username = "root";
    $password = "password";
    $database = "database";
    //Connect to MySQL
    $conn = new mysqli($servername, $username, $password, $database);
    
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    else{ 
        echo "Connected successfully";
    }
    

    一旦你有了这个基础,你就可以开始查询数据库了,使用你对 $Query 所做的事情。

    我可能解释的太多了,所以我会留下尽可能多的有用链接,因为我认为你需要帮助你。

    Connect to a MySQL Database from PHP

    Pulling data from a MySQL Database, Querying the Database through PHP

    List of MySQLi functions and what they do

    Another list of MySQLi functions and what they do

    Another guide on how to select information from a MySQL Database

    祝你好运,如果您有任何问题,请发表评论。

    【讨论】:

    • 谢谢你,终于搞定了!这些链接很有帮助!
    • 很高兴能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多