2014-11-25 5 views
0

У меня есть небольшая строка кода, которая будет получить сумму столбцаПолучить сумму столбца по дате

<?php 

class ManageServices{ 

function getTotalSumByDateRange() 
{ 
    $query = $this->link->query("SELECT SUM(amount) as sum_of_date_range FROM services ");  

    $rowcount = $query->rowCount(); 

    $result = $query->fetchAll(); 
    return $result; 
} 
} 

?> 

//search.php

<?php 
include_once('../../classes/class.ManageServices.php'); 
$init = new ManageServices(); 
$sum_of_date_range = $init->getTotalSumByDateRange();  
?> 

// search1

<?php 

if(isset($_POST['submit'])) 
{ 
include_once('../../classes/class.ManageServices.php'); 
$init = new ManageServices(); 
$date_from =$_POST['to_date']; 
$date_to =$_POST['from_date']; 

if(empty($_POST['to_date']) && empty($_POST['from_date'])) 
{ 
    $error = "No search query"; 
} 
elseif(empty($_POST['to_date']) && !empty($_POST['from_date'])) 
{ 
    $error ="Please specify your start date search"; 
} 
elseif(!empty($_POST['to_date']) && empty($_POST['from_date'])) 
{ 
    $error ="Please specify your end date search"; 
} 
else 
{ 
    $total_by_date_range = 0; 
    $total_by_date_range = $init->getSumByDateRange($date_from, $date_to); 
} 
} 

?> 

// HTML

<?php 
include_once('../../libs/search/search_sales_by_date.php'); 
include_once('../../libs/search1/total_sales.php'); 
?> 

<!Doctype html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<title>search by dates</title> 
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css"> 
<script src="//code.jquery.com/jquery-1.10.2.js"></script> 
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script> 
<link rel="stylesheet" href="/resources/demos/style.css"> 
<script> 
$(function() { 
$(".datepicker").datepicker(); 
}); 
</script> 

</head> 
<body> 
<div> 
<?php 
if(isset($error)) 
{ 
    echo $error; 
} 
?> 
</div> 
<h3>Search Sales</h3> 
<p>From</p> 
<form method="POST" action="search_sales_by_dates.php"> 
<p>Date: <input type="text" class="datepicker" name="from_date" id="field1"></p> 
<p>To</p> 
<p>Date: <input type="text" class="datepicker" name="to_date" id="field2"></p><br /> 
<input type="submit" value="search" name="submit" id="submitdata"> 
</form> 
<div id ="fillmein1"> 
<?php foreach($sum_of_date_range as $sum): ?> 
    <td>Total Sales<span class="glyphicon glyphicon-usd" aria-hidden="true"></span><?php echo  number_format($sum['total_sum'],2); ?></td> 
<?php endforeach; ?> 
</div> 
<input type="hidden" value ="$total_by_date_range['sum_of_date_range'] ">//this is the problem 
</body> 
</html> 

и в моей таблице у меня есть «id», «amount», date_of_service'. «Вышеуказанный запрос будет вычислять все значения« количество »и отображать в html, однако я хочу добавить еще один запрос, который получит только сумма базы столбцов «сумма» в диапазоне дат ввода из html-формы. Все идеи по этому поводу? Обновление .. Я думаю, что я почти там, после того, как обновил search1.php, search.php и html, теперь проблема заключается в том, что я хочу показать $ total_by_date_range в том же виде. Но когда я отправляю форму, она не показывает ошибка, но не будет показывать $ total_by_date_range.anyway, диапазон показывает $ sum_of_date результат на той же странице

ответ

1

Прежде всего, необходимо добавить еще одну функцию:

class ManageServices { 
    function getTotalSumByDateRange() { 
    $query = $this->link->query("SELECT SUM(amount) as sum_of_date_range FROM services ");  
    $rowcount = $query->rowCount(); 
    $result = $query->fetchAll(); 
    return $result; 
    } 
    function getSumByDateRange($date_from, $date_to) { 
    $query = $this->link->query("SELECT SUM(amount) as sum_of_date_range FROM services where 
    date_of_service between '".$date_from."' and '".$date_to."'");  
    $rowcount = $query->rowCount(); 
    $result = $query->fetch(); 
    return $result; 
    } 
} 

search.php

HTML

<?php 
include_once('../../libs/search/search_sales_by_date.php'); 
?> 

<div> 
<?php foreach($sum_of_date_range as $sum):?> 
    <td><span class="glyphicon glyphicon-usd" aria-hidden="true"></span><?php echo number_format($sum['sum_of_date_range'],2); ?></td> 
<?php endforeach;?> 
<?php 
    echo "Total by date range: ".$total_by_date_range; 
?> 
</div> 

Вы можете попробовать что-то вроде этого.

+0

Я пробовал свой код, и я получил уведомление «Уведомление: неопределенная переменная: total_by_date_range в C: \ wamp \ www \ php_oop \ forms \ search \ search_sales_by_dates.php в строке 59" ... и я изменил search.php на ? « getSumByDateRange ($ date_from, $ date_to); } еще { $ error = "Ваш поисковый запрос h недействителен "; } } ?> И до сих пор получил уведомление. – rai

+0

Попробуйте объявить эту переменную перед ее использованием. – JuanSedano

+0

Я попытался объявить $ total_by_date_range = 0 в поисковом php, предупреждение было упущено, но оно дало мне результат нуля. Также я попробовал var_dump ($ total_by_date_range), он дал результат 0f 'Int 0', var_export ($ total_by_date_range) это дает мне результат «0»; – rai

0

Во-первых, если дата и дата окончания не указаны, отображается вся сумма. Но если они существуют, вы фильтруете свой запрос для отображения суммы в диапазоне дат.

Это мое решение.

function getTotalSumByDateRange($fromDate = "", $toDate = "") 
{ 
    $sql = "SELECT SUM(amount) as sum_of_date_range FROM services ";  

    if (!empty($fromDate) && !empty($toDate) { 
     $sql .= "WHERE date_of_service BETWEEN '". $fromDate . "' AND '" . $toDate . "'"; 
    } 

    $query = $this->link->query($sql); 

    $rowcount = $query->rowCount(); 

    $result = $query->fetchAll(); 
    return $result; 
} 
0

Теперь working.I переписать мою search.php

<?php 
if(isset($_REQUEST['submit'])) 
{ 
include_once('../../classes/class.ManageServices.php'); 
$init = new ManageServices(); 
$date_to =$_REQUEST['to_date']; 
$date_from =$_REQUEST['from_date']; 

if(empty($date_from) && empty($date_to)) 
{ 
    $error = "No search query"; 

} 
elseif(empty($date_from) && !empty($date_to)) 
{ 
    $error = "Specify your end date search"; 
} 
elseif(!empty($date_from) && empty($date_to)) 
{ 
    $error ="Specify your start date search"; 
} 
else 
{ 
    if($date_from < $date_to) 
    { 
    $total_by_date_range = $init->getSumByDateRange($date_from, $date_to); 
    foreach ($total_by_date_range as $key) 
    { 
    $success ="Your Total amount of sales from ". $date_from . ' ' . "To" . ' ' .$date_to . ' ' ."is". ' ' ."P" .number_format($key['sum_of_date_range'],2); 
    } 
    } 
    else 
    { 
     $error = "You bitch, Start date should not greater than the end date on your search query"; 
    } 
} 
} 
else 
{ 
$error = "Because you are an idiot, the script contains some bugs that is why it can't run on the browser!"; 
} 

?> 

и я также изменил формат даты Jquery DatePicker, похож на формат, используемый MySQL, я обнаружил, что, имея другую дату формат в html (метод $ _ GET), а формат, используемый mysql, приведет к ошибке в запросе.

Смежные вопросы