如何使我的 HTML 表单查询同时适用于所有表单元素


How to make my HTML form query to work for all of the form elements together?

我有一个HTML表单。在那里,我有四种不同类型的字段连接到数据库表,并且应该根据他们将在HTML表单字段中选择的内容向用户提供结果。

我有开始日期和结束日期字段。

<div class='ddate'><p>Start Date:<input type="date" id="datepicker" name="d1" ></p></div>
                        <div class='ddate'><p>End Date:<input type="date" id="datepicker1" name="d2"></p></div>
日期

字段将表中介于用户给出的开始日期和结束日期之间的所有行提取到 HTML 字段中。

我有并选择字段。

<select name='md' multiple="yes" size="10">
                <optgroup label="Оpel">
                    <option value="Astra" name='Ast'>Astra</option>
                                </optgroup>
                                <optgroup label="Nissan">        
                    <option value="Pulsar" name='Puls'>Pulsar</option>
                    <option value="Almera" name='Alm'>Almera</option>
                </optgroup>
                <optgroup label="Honda">
                    <option value="Civic" name='Civ'>Civic</option>
                                 </optgroup>     
                                 <optgroup label="Audi">
                    <option value="Q7" name='Q'>Q7</option>                 
                </optgroup>
                <optgroup label="BMW">
                    <option value="M3" name='M'>M3</option>
                    </optgroup>
                                <optgroup label="Renault">
                                        <option value="Megane" name='Meg'>Megane</option>
                    </optgroup>
                                <optgroup label="Mercedes">
                                        <option value="G-Class" name='G'>G-Class</option>
                                        </optgroup>
                        </select></br></br> 

在这里,用户选择一个模型,查询将返回具有所选模型类型的所有行。

颜色的另一个选择字段。

<select name='col' size='5'>
                            <option value='white' name='wh'>Бял</option>
                            <option value='black' name='bl'>Черен</option>
                            <option value='yellow' name='ye'>Жълт</option>
                            <option value='brown' name='br'>Кафяв</option>
                            <option value='grey' name='gr'>Сив</option>
                        </select></br></br>

和两个用于马力的输入字段。

<input type='text' name='hp1'/></br>
                        ДО:<input type='text' name='hp2'/></br></br>
这是我

的形式,这是我的PHP。

这里重要的是我的查询。

$sql = "SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color,clients.first_name, clients.last_name FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id INNER JOIN clients ON clients_cars.clients_id=clients.id WHERE cars.id"
            . " IN (SELECT DISTINCT clients_cars.cars_id FROM clients_cars WHERE (rent_date between '$d1' AND '$d2') OR (return_date between '$d1' AND '$d2') OR ((return_date>'$d2')AND(rent_date<'$d1')) OR ((horse_powers > '$hp1') AND (horse_powers < '$hp2')) OR cars.model LIKE '$md' OR cars.color LIKE '$col') "; 

这是我的查询。它的工作很好。当我添加开始和结束日期时,如果我只使用其中一个字段,它会带我去掉添加日期与 html 表单中任何其他字段相同的所有行。

当我使用多个时(例如,我选择颜色:黑色和 120-150 之间的马力(。当我这样做时,它会带我取出所有黑色汽车和所有 120-150 马力之间的汽车,查询不关心 120-150 马力之间的汽车颜色和黑色汽车的马力。

我的观点是,我希望所有的领域都能互相关心。如果有一辆HP为120-150的黑色汽车,那么只有这辆车不是所有的黑色汽车和所有120-150 HP的汽车。

你在 Sql 中混淆了 "AND" 和 "OR" 语句。这应该会神奇:

SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color,clients.first_name, clients.last_name 
FROM cars 
INNER JOIN clients_cars 
ON cars.id=clients_cars.cars_id 
INNER JOIN clients
ON clients_cars.clients_id=clients.id 
    WHERE cars.id 
     IN 
    (SELECT DISTINCT clients_cars.cars_id 
    FROM clients_cars 
    WHERE (rent_date between '$d1' AND '$d2')
    AND ((return_date>'$d2')AND(rent_date<'$d1'))
    AND ((horse_powers > '$hp1') AND (horse_powers < '$hp2')) 
    AND cars.model LIKE '$md' 
    AND cars.color LIKE '$col'
 )