Заявка - извежда всички елементи, които не са между две дати

lfc321

Registered
Имам проблем със заявка, която би трябвало да ми изведе всички редове от таблицата, които не са между зададен от потребителя период.

В инпут формата съм сложил две полета, в които чрез Джкери календар се попълват две дати (начална и крайна дата). Това което искам е когато потребителя натисне субмит бутона заявката да му изведе всички редове от таблица, които по никакъв начин не се засичат с зададения период.

Формата:

Код:
<!DOCTYPE html>
<head>
    <title>Ha</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="jquery-ui.css">
    <script src="jquery.min.js" type="text/javascript" ></script>
    <script src="jquery-ui.js"></script>
<script>
$(function() {
$( "#datepicker" ).datepicker();
});
$(function() {
$( "#datepicker1" ).datepicker();
});
</script>
</head>
<body>
	<form method="POST" action="cars.php">
		<fieldset>
                    <legend>Rent A Car</legend>
			<div class='ddate'><p>Дата на наемане:<input type="text" id="datepicker" name="d1"></p></div>
                        <div class='ddate'><p>Дата на връщане:<input type="text" id="datepicker1" name="d2"></p></div>
                        <input type="submit" value="Провери" name="submit"/>
                </fieldset>	
	</form>
</body>
</html>


Ето и заявката:

Код:
<?php
//Connection
include "connect.php";
    $d1 = $_POST['d1'];
    $d2 = $_POST['d2'];
//Query
    $sql = "SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id WHERE rent_date < '%d1%' OR return_date > '%d2%'";
    $result = mysqli_query($con, $sql);
    echo mysqli_error($con);
    while ($row= mysqli_fetch_array($result)){
        $brand = $row['brand'];
        $model = $row['model'];
        $reg_num = $row['reg_num'];
        $horse_powers = $row['horse_powers'];
        $color = $row['color'];
        
        echo $brand;
       
    }
?>


Заявката си работи до "WHERE" клаузата. Изкарва ми всички налични редове в таблицата и не се влияе от зададените параметри във формата. Знам, че най-вероятно грешката ми е тук :
Код:
rent_date < '%d1%' OR return_date > '%d2%'"
но не знам как да го запиша.
 
Мне... сега забелязах че съм пропуснал $ при променливите д1 и д2 ама пак не става продължава да не ми зачита зададените критерии
 
$sql = "SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id WHERE rent_date < '{$d1}' OR return_date > '{$d2}'";

А по този начин?
 
Не, същия ефект има.

Тъй като ДжейКери клаендара изпраща дата така "12/09/2014", а в таблицата го промених, за да е съшия формат (м-д-г) и го записва по същия начин, но с "тире" : "12-09-2014". Може ли заради това да не обработва правилно заявката ?
 
lfc321 каза:
Не, същия ефект има.

Тъй като ДжейКери клаендара изпраща дата така "12/09/2014", а в таблицата го промених, за да е съшия формат (м-д-г) и го записва по същия начин, но с "тире" : "12-09-2014". Може ли заради това да не обработва правилно заявката ?
Да. Трябва да са в един формат.
PHP:
if('29-10-2014' > '29-10-2013'){
	echo "Da";
}
 
Пак не става. И в таблицата и от формата са един формат "12/09/14 " обаче продължава да не ми приема критериите. Явно самата заявка трябва да се запише по друг начин.
 
lfc321 каза:
Пак не става. И в таблицата и от формата са един формат "12/09/14 " обаче продължава да не ми приема критериите. Явно самата заявка трябва да се запише по друг начин.

WHERE cars.rent_date < '$d1' OR cars.return_date > '$d2'";

И това OR вероятно ще трябва да премине към AND но не съм сигурен това с проба грешка го тествай.
 
Направи си типа на полето да е DATE и всичко ще е 6 :)
PHP:
SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id WHERE  

(clients_cars.rent_date  BETWEEN '$d1' AND '$d2')
OR 
( clients_cars.return_date  BETWEEN '$d1' AND '$d2')

:idea:
 
joTunkiq каза:
Направи си типа на полето да е DATE и всичко ще е 6 :)
PHP:
SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id WHERE  

(clients_cars.rent_date  BETWEEN '$d1' AND '$d2')
OR 
( clients_cars.return_date  BETWEEN '$d1' AND '$d2')

:idea:

Така не ми изкарва абсолютно нищо. Празна заявка нз защо...
 
Ами поправи ли си типа на полето да ти е Date и си погледни заявката, няма как да знам в коя таблица какви колони имаш. :?:
 
Не съм навътре в нещата, но предлагам да пробваш:
1. Направи извадка по критерий < от начална дата

Ако нямаш успех дълбай във формата на датите

Ако имаш успех:
2. Направи извадка по критерий: > от крайна дата

Ако си добил успех за 1 се очаква да имащ успех и за 2

Накрая направи сложна заявка по критерий < от начална дата AND!!! > крайна дата

/Трябва начална дата да е < от крайна дата, иначе извадката ще обхваща 100%/

Ако съм писал глупости, моля за извинение!
 
трябва да са в един формат и полето в базата и датата която подаваш.. -> timestamp - при мен е така и работи.

PHP:
$timestamp = strtotime(($_REQUEST['starttime']));
$btime = strtotime("+$event_length minutes", $timestamp);
$before_time = date('Y-m-d H:i:s', $btime);
$zresult = $linkmysqli->query("Select * from events where date_end > '$starttime' and date_start < '$before_time'");
 

Back
Горе