我想用以下形式创建一个页面:两个输入(开始和结束日期)和两种要生成的报告类型。一种报告是使用一个文件生成的,另一种报告是使用另一个文件生成的。要生成这些报告之一,您必须完成两个日期。输入两个日期后,单击生成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
答案 0 :(得分:0)
只需从$_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 ?;