【发布时间】:2015-05-27 12:10:53
【问题描述】:
我正在开发一个网站,允许用户在公共数据库上进行查询,我希望允许用户查看他在当前会话期间所做的查询并删除他想要的其中一个。
这里是创建$_SESSION['history']的代码:
$_SESSION['history'][] = array(
'Database' => $_SESSION['db'],
'Choice' => $_SESSION['radio'],
'Query' => $_SESSION['query'],
'Résult' => ($asResults),
'Date' => date("d-m-Y"),
'Hour' => date("H:i:s")
);
这里是显示 $_SESSION['history'] 数组的代码:
<?php
function displayHistory($arQueryArray)
{
if (isset($_SESSION['history']))
{
echo '<table id="history" class="display">';
$iQueryNumber = 0;
echo '<thead><tr>';
echo '<th>n°</th>';
foreach (array_keys($_SESSION['history'][0]) as $field)
{
if ($field != 'Résult' and $field != 'Choice')
{
echo '<th>', $field, '</th>';
}
}
echo '<th></th><th></th>';
echo '</tr></thead>';
echo '<tbody>';
foreach ($_SESSION['history'] as $query)
{
echo '<tr>';
echo '<td>', ($iQueryNumber + 1), '</td>';
foreach ($query as $field => $value)
{
if ($field != 'Résult' and $field != 'Choice' and $field != 'Requête')
{
echo '<td>', $value, '</td>';
}
else if ($field == 'Query')
{
echo '<td>' . $arQueryArray[$query['Choice']] . " " . $query['Query'] . '</td>';
}
}
?>
<td>
<input type="button" class="del_btn" value="X" title="Delete this query" onclick="delQueryInHistory(<?php echo $iQueryNumber; ?>, this);"/>
</td>
<?php
echo '</tr>';
$iQueryNumber += 1;
}
echo '</tbody></table>';
}
else
{
echo "<p>No query</p>";
}
}
?>
这里是javascript:
var XHR = null;
function getXMLHTTP()
{
var xhr = null;
if(window.XMLHttpRequest)
{ // Firefox
xhr = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{ // Internet Explorer
try
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e1)
{
xhr = null;
}
}
}
else
{ // XMLHttpRequest not supported
alert("YOur browser doesn't support XMLHTTPRequest...");
}
return xhr;
}
//Query suppression function
function delQueryInHistory(queryId, self)
{
XHR = getXMLHTTP();
XHR.open("GET", "controleur/delQueryInHistory.php?queryId=" + queryId, true);
XHR.onreadystatechange = function()
{
if (XHR.readyState == 4)
{
self.parentNode.parentNode.parentNode.removeChild(self.parentNode.parentNode);
}
}
XHR.send();
}
这里是调用的php
<?php
session_start();
if(empty($_GET['queryId']) or !is_numeric($_GET['queryId']) or !isset($_GET['queryId']))
{
exit;
}
else
{
unset($_SESSION['history'][intval($_GET['queryId'])]);
}
?>
问题是它根本不运行,我不明白为什么,因为我没有提出任何错误!即使我使用损坏的php文件...我已经验证了php文件的路径是OK的!
对不起我的英语,谢谢..
** 最后更新:** 抱歉,我忘了说什么特别没有运行:该行已正确删除,但 $_SESSION['history'][queryId] 未删除!但是XmlHttp 对象已创建!谢谢。
【问题讨论】:
-
哪位不起作用?页面不加载,XHR 不触发,XHR 触发但不删除行,XHR 触发但会话值不改变?
-
我已经修改了我的帖子,谢谢!
-
您的
if..else可能处于错误状态。在你的 PHP 输出中你可以调试的东西,例如而不仅仅是exit;ing,返回每个测试条件的输入和结果,以便您可以调试它。然后在控制台中查看 XHR 返回的内容(如果未在 Console中勾选 log xhr's,它将位于 Network 选项卡中> 选项卡),这样您就可以准确地看到正在发生的事情 -
谢谢保罗 S!问题不在 if..else 中,但您的提示帮助我解决了我的问题(unset() 不能标准化整数键,我不太明白为什么,但是当我修复它时,一切没问题)谢谢!
标签: javascript php ajax session