我正在使用此问题jQuery Ajax POST example with PHP来了解如何在表单提交之前处理数据。
我有一个没有GUI的应用程序,我围绕它构建了一个数据库和一个webapp。 此应用程序使用fopen()打开xml文件。 我正在使用$ GET方法从数据库中的列获取xml文件及其路径。
<?php
$sql = pg_query($conn, "select link, identification from tbl_xml where date='$today';"));
?>
<form id="xmlform" name="xmlform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="GET">
<?php
while ($row = pg_fetch_row($sql)) {
echo "<button type='submit' name='xml' value='$row[0]' class='btn-as-link'>$row[1]</button>"
}
?>
</form>
我们在 index.php 。
[...]
ELSE IF( isset($_GET['xml'] )){
include_once("showXml.php");
}
[...]
showXml.php :
$url = filter_var($_GET['xml'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH);
[...]
// $url contains a really long path and the file. Each folder of the path creates exception on how to open the xml file, but in the end i simply open like this:
// Opening the file
$myfile = fopen("$xml", "r");
$xml = fread($myfile,filesize("$xml"));
$dom = new DOMDocument;
$dom->preserveWhiteSpace = TRUE;
// IF the file has XML format we will arrange it, if not we will print it raw
IF ( $dom->loadXML($xml) ) {
$dom->formatOutput = TRUE;
$xml_out = $dom->saveXML();
echo "<pre><code class='language-markup'>";
echo htmlspecialchars($xml_out);
echo "</code></pre>";
} ELSE {
$xml = str_replace('\'','\''.PHP_EOL,$xml);
echo "<pre><code class='language-markup'>";
echo htmlspecialchars($xml);
echo "</code></pre>";
}
fclose($myfile);
我想使用$ GET方法,因为webapp有一个时钟,每隔X分钟页面刷新一次。如果我使用$ POST,我会看到那个窗口告诉我“重新发送数据”。我不希望这样。
我面临的问题是路径在URL中是否可见,并且因为webapp将很快收到更新,它也将在其他服务器中打开XML文件,我正在寻找一种方法来维护{ {1}}但是将表单从使用$ GET方法转换为jquery / ajax或者以任何其他方式将showXml.php转换为xml_file_path。
我从其他问题中添加了代码,我可以阅读“Hooray,它有效!”在控制台上。
我的变量echo "<button type='submit' name='xml' value='$row[0]' class='btn-as-link'>$row[1]</button>"
位于$xml
内。
form.php的
form.php
从这里开始,我不清楚如何触发:
if (isset($_POST['xml']){
$xml = isset($_POST['xml']) ? $_POST['xml'] : null;
}
ELSE IF( isset($_GET['xml'] )){
include_once("showXml.php");
}
的,打开变量index.php
而不是$xml
方法,而不是$GET
内使用的$POST
答案 0 :(得分:1)
我不是100%确信我已经掌握了这个问题,但是如果你想使用ajax发送请求(使用GET),也许以下内容可能提供一些指导。
使用ajax时,标准按钮不是使用提交按钮,而是工作正常 - xml文件的详细信息保存在按钮data-value
属性中,并作为ajax网址的一部分发送。
使用回调函数处理您需要的响应 - 这只会弹出一个包含响应数据的警报。
<?php
$sql = pg_query( $conn, "select `link`, `identification` from `tbl_xml` where `date`='$today';"));
$bttns = array();
while( $row = pg_fetch_row( $sql ) )$bttns[]="<input type='button' data-value='{$row[0]}' value='{$row[1]}' />";
echo "<!-- render basic form with all buttons -->
<form name='xmlform'>
" . implode( PHP_EOL, $bttns ) . "
</form>";
?>
<script>
var url='showxml.php';
var evtcallback=function(xml){
alert(xml)
};
function ajax( url, callback, payload ){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function(){
if( this.status==200 && this.readyState==4 )callback.call( this, this.response );
};
xhr.open('GET', url + '?xml='+payload, true );
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send(null);
}
var col=Array.prototype.slice.call( document.forms.xmlform.querySelectorAll('input[type="button"]') );
col.forEach(function( bttn ){
bttn.addEventListener('click', function(event){
ajax.call( url, evtcallback, this.dataset.value );
}.bind( bttn ),false );
});
</script>
答案 1 :(得分:0)
不是最好的方式,但它正在发挥作用。
我将表单转换为$_POST
。将$_POST['xml']
的值分配给$_SESSION['xml']
并使用此值打开文件。文件打开后清空$_SESSION['xml']
。网址很干净。