2011-02-07 49 views
0

我是一个新手,我正在学习PHP,所以任何帮助将不胜感激。Php关联数组删除点击值

我已经一整天疲于应付这个 我有一个代表用户上次行动的阵列,它只是记录 日 - 时间 - (和它的序列化和发送到MySQL数据库)“动作类型”

而且我得到数组是这样的:

---- ---- EDITED

 
Array ([0] => Array ([Date] => 2011-02-06 [Time] => 06:48 PM [Entry] => Email sent 0 test) [1] => Array ([Date] => 2011-02-06 [Time] => 06:48 PM [Entry] => Email sent 1 test) [2] => Array ([Date] => 2011-02-06 [Time] => 06:48 PM [Entry] => Email sent 2 test)) 

我的问题是,我想添加的每个行中的小按钮/链接(当数组被显示时d),使用户可以删除这一点特别行动

 
foreach ($actionhistory as $row) { 
    foreach ($row as $key => $value) { 
    echo " foo delete record - $value"; 
    } 
    echo '
'; }

问: 现在用户看到这个在他的浏览器:

 
2011-02-0606:48 PM Email sent 0 test 
2011-02-0606:48 PM Email sent 1 test 
2011-02-0606:48 PME mail sent 2 test 

我希望每个日期前添加一个链接。所以当用户点击该链接时 - 外部页面将被加载,并且该特定“记录”需要从列表中移除。

E.G.用户想要删除条目

 
[2] => Array ([Date] => 2011-02-06 [Time] => 06:48 PM [Entry] => Email sent 2 test) 

他将点击该条目旁边的链接....这就是我遇到问题的地方。 如何删除该条目但保留其余条目?

+0

问题是什么? – AndreKR

+0

你正在获得的阵列满足你吗?不应该是'Array([0] => Array([Date] => 2011-02-06,[Time] => 06:08 PM,[Entry] => Email sent 0 test),[1] = > Array([Date],[Time],[Entry]))'而不是? – Pierre

+0

我想 - 我只是在了解这些东西...那么如何动态创建这种数组(我有3个变量)? – Peter

回答

1

为什么所有这些变量?而你的阵列是错误地构建的。

$actionhistory[] = array(
    "Date" => date("Y-m-d"), 
    "Time" => date("h:i A"), 
    "Entry" => "Email sent ".$row." test" //This is actually user action 
); 

你想通过行动历史的JavaScript中的特定行发送到PHP脚本,它会从数据库中删除此行,也许还可以动态地从表中删除行是什么。你需要添加另一个元素到你的数组中,这是数据库中唯一的ID,除非你有一个唯一的键/ date/time/action - 这看起来很愚蠢!然后使用JS库如jQuery,用一个简单的交互上的删除按钮你行这样的:

<?php 
while ($data = $query->fetch()){ 
    echo '<tr><td....</td> 
    <td><input type="button" value="delete" onclick=" 
     $.post(\'myScript.php?id='.$data['id'].'\',function(d){ 
     if (d == 1){ 
      $(this).parents("tr").eq(0).remove(); 
     } 
     });" /></td</tr>'; 
} 
?> 

然后myScript.php应该照顾$ _ POST [“身份证”],删除相应的行,如果成功则回显1,因此该行被删除。 [已编辑,$ _POST,而不是$ _GET!]

+0

其实这是被序列化,然后发送到数据库。然后(在其他页面 - colorbox弹出窗口中)我获取该值,将其反序列化,然后将其显示给用户。这一切都发生在弹出窗口中,所以这就是为什么我需要将它传递给外部文件。外部文件将连接到数据库反序列化它,而不是删除由用户传递给它的值。比它将序列化它,上传到数据库,当它完成后,用户“弹出”窗口将刷新 - 并且“行动”将会消失...我知道有jquery这样做,但我只是不知道Jquery :) ...几乎不知道PHP :) – Peter

+0

对不起,我不再做弹出式刷新...你应该亲手使用jQuery或Mootools,一个简单的JS库,并发现不刷新的乐趣......我不知道为什么要多次序列化和反序列化,但是你可以做的只是在你的表中有一个链接,这个链接调用同一页面,但是你的序列化行在开始时会被删除你的脚本......不确定我很清楚,对不起 - 但你也不是! – Nabab

+0

简单 - 我这样做是因为我不知道如何使用Jquery ......这就是为什么如此多的序列化/反序列化......如果我知道如何使用它 - 你打赌我会使用它: ) – Peter

0

我理解它的方式是,您需要将数组传递给另一个负责删除它的文件。所有的行在MySQL中都应该有一个唯一的标识符,所以你只需要在查询字符串中包含要删除的行的ID到删除文件。

如果我误解了你,你想发送数组本身到另一个文件,你可以序列化数组,urlencode并通过查询字符串传递它。

另一种方法是将所有数组放在$ _SESSION中,并通过链接中的查询字符串传递索引。

我希望我帮助(并理解问题)

0

非常感谢 - 我通过添加一个唯一的ID对它进行了排序,因此只需将id传递给外部文件,然后删除数组中的值。感谢NAAB提示!

当我在这里粘贴代码 - 系统缩短它的最重要的部分,但如果有人需要我的解决方案,只是问我会送它...