如何使用ajax从mysql数据库中选择月份和年份

时间:2013-09-12 11:01:12

标签: php jquery mysql ajax json

我使用以下脚本检索特定月/年的所有发票。 php从数据库中提取所有年份和日期,将它们组合在一起并将它们放入选择菜单中,得到类似于的结果:

June - 2013
July - 2013
August - 2013
September - 2013

这是choicesummary.php:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Sales Summary</title>
      <script type="text/javascript" src="../js/jquery/jquery.js"></script>
    <script type="text/javascript" src="../js/jqueryui/js/jquery-ui.js"></script>
       <link href="../js/select2/select2.css" rel="stylesheet"/>
        <script type="text/javascript" src="../js/select2/select2.js"></script>
         <script type="text/javascript">
            $(document).ready(function() { $("select").select2(); });
        </script>

        <?php
    include '../connectmysqli.php';
    include '../menu.php';
         echo '<link rel="stylesheet" href="../css/template/template.css" />';
    $salesID = rand().rand();
    $today = date("Y-m-d");

    ?>
    <script type="text/javascript" charset="utf-8">
            $(document).ready(function(){
            $('#selectmonth').on('change', function (){

              // THIS IS WHERE I AM TRYING TO WORK OUT HOW TO RETRIEVE THE JSON AND THEN PLACE THE RESULTS INSIDE THE "summarycontent" DIV.     

                     $.getJSON('select.php', {monthyear: $(this).val()}, function(data){
                        var invoicerow = '';
                        for (var x = 0; x < data.length; x++) {
                            invoicerow += '<p>' + data[x]['invoiceID'] + '">' + data[x]['date'] + ' - ' + data[x]['grandtotal'] + ' - ' + data[x]['customerID'] + '</p>';
                        }
                        $('#summarycontent').html(invoicerow);
                      $("select").select2();
                    });

                    });     
                    });
            </script>
    </head>
    <body>
        <form method="post" action="addsalesubmit.php">
        <p>
          <select id="selectmonth">
            <option>Please Select A Monthly Summary To View</option>
            <?php

    $sql = <<<SQL
    SELECT YEAR(date) AS 'year', MONTHNAME(date) AS 'month'
    FROM `sales`
    GROUP BY YEAR(date), MONTHNAME(date) DESC
    SQL;

    if(!$result = $db->query($sql)){ die('There was an error running the query [' . $db->error . ']');}
    while($row = $result->fetch_assoc()){
    echo '<option value="'.$row['month'].'-'.$row['year'].'">'.$row['month'].' - '.$row['year'].'</option>';
    }
    echo '</select>';
            ?>
            <br />
            <br />
        </form>
    <div id="summarycontent"></div>

    </body>
    </html>

这是ajax用来查找结果并将它们发送回主脚本的select.php:

            <?php include '../connectmysqli.php'; ?>
    <?php
    $monthyear = strtotime($_GET['monthyear']);
    $sql = 'SELECT * FROM sales WHERE date = ' . (int)$monthyear;
    $result = $db->query($sql);

    $json = array();
    while ($row = $result->fetch_assoc()) {
      $json[] = array(
        'invoiceID' => $row['invoiceID'],
        'date' => $row['date'],
        'grandtotal' => $row['grandtotal'],
        'customerID' => $row['customerID']
      );
    }
    echo json_encode($json);

    ?>

我遇到的问题是我不知道如何将诸如'July-2013'之类的文本转换为select.php可以使用的内容。目前,如果我使用chrome开发工具来查看最新情况,我会得到以下结果:

select.php?monthyear=July-2013
/manda/salessummary

所以日期结果还可以,但我不知道如何在另一端使用它来选择那个月/年的日期,因为它的格式错误。

数据库如下:

     id invoiceID   salesID customerID  vehicleID   date    comments    subtotal    vat grandtotal  description1    qty1T   linetotal1T stock1T stock2T description2    qty2T   linetotal2T stock3T description3    qty3T   linetotal3T stock4T description4    qty4T   linetotal4T stock5T description5    qty5T   linetotal5T discount
    68  1     1512428605    82428579    134722464   2013-07-08      22.48   4.50    26.98   Bridestone Pt34 - 175/55/18/W/63 - (99 In Stock) -...   1   22.48   711022407                                                               

编辑&gt;&gt;&gt;&gt;

select.php现在看起来像这样:

                    <?php include '../connectmysqli.php';

    $date_convert = date('Y-m-d', strtotime($_POST['monthyear']));

//或者,使用LIST,以便稍后使用这两个日期部分。

list($ month,$ year)= explode(' - ',$ _POST ['monthyear']);

$ SQL =“SELECT * FROM sales WHERE date =:date”; $ STH = $ db-&gt; prepare($ SQL); $ STH-&gt; bindParam(':date',$ date_convert);

    $json = array();
    while ($row = $result->fetch_assoc()) {
      $json[] = array(
        'invoiceID' => $row['invoiceID'],
        'date' => $row['date'],
        'grandtotal' => $row['grandtotal'],
        'customerID' => $row['customerID']
      );
    }
    echo json_encode($json);

    ?>

3 个答案:

答案 0 :(得分:0)

试试这个。

使用strtotime()

网址:select.php?monthyear=July-2013

$date = mysql_real_escape_string($_POST['monthyear']);

$mysql_date = date('Y-m-d', strtotime($_GET['monthyear']));

$sql = 'SELECT * FROM sales WHERE date = ' . $mysql_date;
  • P.S - 不要只是将参数连接到sql命令。我们不再是90年了。

更好的选择是使用bind_param()

$mysql_date = date('Y-m-d', strtotime($_GET['monthyear']));

$sql = 'SELECT * FROM sales WHERE date = ?';

$sql->bind_param("s", $mysql_date);

答案 1 :(得分:0)

转换数据

$date_convert = date('Y-m-d', strtotime($_POST['monthyear']));

// Or, use LIST which would allow you to use the two date parts later.

list($month, $year) = explode('-', $_POST['monthyear']);

获得结果

$SQL = "SELECT * FROM myTable WHERE date = :date";
$STH = $DBH->prepare($SQL);
$STH->bindParam(':date', $date_convert);

答案 2 :(得分:0)

经过多次游戏后,这终于适用于select.php:

    <?php 
    error_reporting(E_ALL);
    ini_set('display_errors', '1');

            include '../connectmysqli.php';

            list($month, $year) = explode('-', $_GET['monthyear']);

             $date = date_parse($month);
      $month = $date['month'];


    $sql = "SELECT * FROM sales WHERE MONTH(date) = '$month' AND YEAR(date) = '$year'";
    $result = $db->query($sql);

    $json = array();
            while ($row = $result->fetch_assoc()) {
              $json[] = array(
                'invoiceID' => $row['invoiceID'],
                'date' => $row['date'],
                'grandtotal' => $row['grandtotal'],
                'customerID' => $row['customerID']
              );
            }
            echo json_encode($json);

            ?>