jpk

jslywgbw  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(369)

我想用表单做一个页面:两个输入(开始和结束日期)和两种要生成的报告。一种类型的报告使用一个文件生成,另一种类型的报告使用另一个文件生成。要生成其中一个报告,必须同时完成这两个日期。输入两个日期后,单击生成xml文件的按钮并将其作为xml文件自动下载到磁盘。
xml是使用php生成的,php从mysql数据库中提取数据。
不幸的是,我在创建这个表单时遇到了一个问题,在输入两个日期之后,这个表单将生成并保存一个xml文件,其中包含数据库中在给定时间段中包含的那些行。
我还希望能够在这个xml文件中插入三个日期:第一次输入的日期、第二次输入的日期和xml文件的创建日期。这些日期的位置在php中存储为:filecreateddate、startdate和enddate。
我的php文件:

<?php

/**create XML file */ 
$mysqli = new mysqli("localhost", "XXX", "XXX", "XXX");

/* check connection */
if ($mysqli->connect_errno) {

    echo "Connect failed ".$mysqli->connect_error;

    exit();
}

$query = "SELECT id, firma, ulica, nr, data_wystawienia, data_sprzedazy FROM FA";

$booksArray = array();

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {

        array_push($booksArray, $row);
    }

    if(count($booksArray)){

        createXMLfile($booksArray);

    }

    /* free result set */
    $result->free();
}

/* close connection */
$mysqli->close();

function createXMLfile($booksArray){

    $filePath = 'jpk.xml';

    $dom     = new DOMDocument('1.0', 'utf-8'); 

    $root      = $dom->createElement('JPK');

    $naglowek = $dom->createElement('Naglowek');
    $root->appendChild($naglowek);

    $naglowek->appendChild( $dom->createElement('KodFormularza', 'JPK_FA') );
    $naglowek->appendChild( $dom->createElement('WariantFormularza', '1') );
    $naglowek->appendChild( $dom->createElement('CelZlozenia', '1') );
    $naglowek->appendChild( $dom->createElement('DataWytworzeniaJPK', filecreateddate) );
    $naglowek->appendChild( $dom->createElement('DataOd', startdate) );
    $naglowek->appendChild( $dom->createElement('DataDo', enddate) );

    for($i=0; $i<count($booksArray); $i++){ 

        $bookid                     =  $booksArray[$i]['id'];  

        $bookNazwaKontrahenta       =  $booksArray[$i]['firma']; 
        $bookAdresKontrahenta       =  $booksArray[$i]['ulica']; 
        $bookDowodSprzedazy         =  $booksArray[$i]['nr']; 
        $bookDataWystawienia        =  $booksArray[$i]['data_wystawienia']; 
        $bookDataSprzedazy          =  $booksArray[$i]['data_sprzedazy'];   

        $book = $dom->createElement('FA');

        $book->setAttribute('id', $bookid);
        $book->appendChild($NazwaKontrahenta     = $dom->createElement('firma', $bookNazwaKontrahenta));
        $book->appendChild($AdresKontrahenta     = $dom->createElement('ulica', $bookAdresKontrahenta)); 
        $book->appendChild($DowodSprzedazy       = $dom->createElement('nr', $bookDowodSprzedazy)); 
        $book->appendChild($DataWystawienia      = $dom->createElement('data_wystawienia', $bookDataWystawienia)); 
        $book->appendChild($DataSprzedazy        = $dom->createElement('data_sprzedazy', $bookDataSprzedazy));

        $root->appendChild($book);

    }

    $dom->appendChild($root); 

    $dom->save($filePath); 

}
?>

带按钮的窗体必须如下所示:click

jogvjijk

jogvjijk1#

只需从 $_POST 或者 $_GET 然后数组将它们作为sql中的参数和xml中的节点值传递。web表单数组的类型取决于html表单 method 你不用贴的。假设采用以下形式,请考虑以下php:
html格式

<form action="/action_page.php" method="post">
  Start Date: <input type="text" name="start_date"><br>
  End Date: <input type="text" name="end_date"><br>
  <input type="submit" value="Submit">
</form>

PHP

if (!empty($_POST["start_date"]) && !empty($_POST["end_date"]) ) {

   $start_date = $_POST["start_date"];
   $end_date = $_POST["end_date"];
   $file_created_date = date("Y-m-d");

   $mysqli = new mysqli("localhost", "XXX", "XXX", "XXX");
   $booksArray = array();

   // PREPARED STATEMENT
   $query = "SELECT id, firma, ulica, nr, data_wystawienia, data_sprzedazy 
             FROM FA
             WHERE mydate BETWEEN ? AND ?";

   // BIND PARAMS
   $stmt = $mysqli->prepare($query);
   $stmt->bind_param('ss', $start_date, $end_date);

   // RUN QUERY
   if ($stmt->execute()) {
      $result = $stmt->get_result();
      while ($row = $result->fetch_assoc()) {
         array_push($booksArray, $row);
      }

      if(count($booksArray)){
         createXMLfile($booksArray);
      } 

      $result->free();
   }

   $mysqli->close();    
}

一定要通过在变量前面加前缀来更新函数 $ :

...
$naglowek->appendChild( $dom->createElement('DataWytworzeniaJPK', $file_created_date) );
$naglowek->appendChild( $dom->createElement('DataOd', $start_date) );
$naglowek->appendChild( $dom->createElement('DataDo', $end_date) );
...

请确保为实际日期字段更新上面的sql(即,替换mydate):

SELECT id, firma, ulica, nr, data_wystawienia, data_sprzedazy 
FROM FA
WHERE mydate BETWEEN ? AND ?;

相关问题