SQLite语句不会采用多个值

时间:2015-11-28 17:45:41

标签: php html sql sqlite

我已经查看了很多问题,请原谅我,如果有一个问题可能有所帮助,但我无法弄清楚这一点。

所以我有一个简单的HTML表单,它将用户输入分为三类:多人游戏,平台游戏和流派。这是html代码

    <form method="post" action="gamebuddy.php">

<div class="players">
    Please select one (or both) of the following: <br>

        <input type="checkbox" name="players[]" value="No">Single Player<br>
        <input type="checkbox" name="players[]" value="Yes">Multiplayers<br>
</div>

<div class="platform">
    Please select your game system(s): <br>

        <input type="checkbox" name="platform[]" value="XBOX">Xbox<br>
        <input type="checkbox" name="platform[]" value="PS3">PS3<br>
        <input type="checkbox" name="platform[]" value="PC">PC<br>
        <input type="checkbox" name="platform[]" value="Wii">Wii<br>
</div>


<div class="genre">
    Please select the genre(s) of game you would like: <br>
        <input type="checkbox" name="genre[]" value="Action" >Action<br>
        <input type="checkbox" name="genre[]" value="Casual">Casual<br>
        <input type="checkbox" name="genre[]" value="Roleplaying">Role-Playing<br>
        <input type="checkbox" name="genre[]" value="Shooter">Shooter<br>
        <input type="checkbox" name="genre[]" value="Sports">Sports<br>
</div>

<div class="submit">

        <input type="submit">

</div>

然后我有一个用户单击提交时使用的PHP文件。理想情况下,它将表单输入作为变量,并使用SQLite语句根据用户的选择查找用户可以玩的游戏。

这是PHP代码:

    <div class="displaygames">
        Based on your choices, these games seem suitable for you: <br>


<?php

if(!empty($_POST['players'])) {
    foreach($_POST['players'] as $players) {
            echo $players; //echoes the value set in the HTML form for each checked checkbox.
                         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                         //in your case, it would echo whatever $row['Report ID'] is equivalent to.
    }
}



if(!empty($_POST['platform'])) {
    foreach($_POST['platform'] as $platform) {
            echo $platform; //echoes the value set in the HTML form for each checked checkbox.
                         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                         //in your case, it would echo whatever $row['Report ID'] is equivalent to.
    }
}



if(!empty($_POST['genre'])) {
    foreach($_POST['genre'] as $genre) {
            echo $genre; //echoes the value set in the HTML form for each checked checkbox.

    }
}

                //This is to connect to the database
  $db = new SQLite3('gamebuddy.db');
                //Statement that uses variables to create list
$results = $db->query("SELECT * FROM games where multiplayer = '$players' and platform = '$platform' and genre is '$genre'");



                //Displays List
while ($row = $results->fetchArray()) {
        echo '<ul>';
        echo $row['game'];

        echo '</ul>';
}





?>

因此,如果您为每个类别添加一个答案,一切正常(例如,用户单击“否”为多人游戏,“PS3”为平台,“动作”为流派)。但是如果用户选择“动作”和“角色扮演”,由于某种原因它只需要用户选择的最后一个,在这个例子中是“角色扮演”。

所以我的问题是如何在有多个输入时让声明显示所有游戏。

感谢您的帮助,我将回答您可能遇到的任何问题,当然如果有帮助,请将答案标记为已解决。谢谢!

1 个答案:

答案 0 :(得分:0)

如果你有例如$ player中的数组,你可以使用implode函数和&#34; IN&#34; SQL中的语句:

import javax.swing.*;
import java.awt.*;

public class DieIntGUI extends JFrame {

    public DieIntGUI(String title) {
        super(title);
        setSize(700, 700);
        getContentPane().setBackground(Color.white);
        setLayout(new BorderLayout());
        initComponents();
        add(panel);
        add(errorMessages, BorderLayout.SOUTH);
        setLocationRelativeTo(null);

   }

    public static void main(String[] args) {
        DieIntGUI frame = new DieIntGUI("Dice Game");
        frame.setVisible(true);
    }

    private void initComponents() {
        panel = new JPanel();
        errorMessages = new JLabel("T");
        playerWins = new JLabel("F");
        computerWins = new JLabel("S");

        drawComponents();
    }


    private void drawComponents() {

        GridBagConstraints gbc = new GridBagConstraints();

        panel.setLayout(new GridBagLayout());
        panel.setSize(700, 700);

        panel.setBackground(Color.white);

        gbc.gridx = 2;
        gbc.gridy = 17;

        panel.add(playerWins, gbc);

    }

    private JPanel panel;
    private JLabel errorMessages;
    public JLabel playerWins, computerWins;


}