调用javascript函数时,无法读取$ _POST数据

时间:2014-03-19 01:43:40

标签: javascript php mysql

我列出了一个表格,其中包含来自MySQL的数据以及要编辑或删除该行的操作。

enter image description here

以下是上图的代码:

<table border="1" class="gridtable">
               <th>Client Name</th>
               <th>Category</th>
               <th>Address</th>
               <th>City</th>
               <th>Contact Person</th>
               <th>Contact Details</th>
               <th>Sales Person</th>
               <th colspan="2"></th>
               <?php
                $a=mysql_query("SELECT `clients`.`client-no`, `clients`.`client-name`, `clients`.`client-category`, `clients`.`client-address`, `clients`.`client-city`, `clients`.`client-contact-person`, `clients`.`client-contact-details`, `sales`.`firstname`, `sales`.`lastname` 
                                FROM `clients`
                                INNER JOIN `sales`
                                ON `clients`.`sales-id`=`sales`.`sales-id`") or die(mysql_error());
                if(mysql_num_rows($a)>0)
                {
                    while($b=mysql_fetch_array($a))
                    {
                        echo"<tr><td>".$b['client-name']."</td><td>".$b['client-category']."</td><td>".$b['client-address']."</td><td>".$b['client-city']."</td><td>".$b['client-contact-person']."</td><td>".$b['client-contact-details']."</td><td>".$b['firstname'].' '.$b['lastname']."</td>"; ?>
                        <td>
                        <form action="#" method="post">
                        <input type="hidden" name="edit_client" value="<?php echo $b['client-no']; ?>" />
                        <input type="image" name="edit_client" value="<?php echo $b['client-no']; ?>" src="images/edit.png" onclick="javascript:editPopup()" title="Edit"/>

                        </form>
                        </td>
                        <td>
                        <form action="../deletefunction.php" method="post">
                        <input type="hidden" name="delete_client" value="<?php echo $b['client-no']; ?>" />
                        <input type="image" name="delete_client" value="<?php echo $b['client-no']; ?>" src="images/delete.png" onclick="return confirm('Are you sure you want to delete this item?')" title="Delete"/>

                        </form>
                        </td>
                        </tr>
                        <?php
                    }
                }
                else
                {
                    ?>
                    <tr><td colspan="6" style="text-align:center; color:#FF0000; font-size:16px;">*No Data Available!*</td></tr>
                    <?php
                }

               ?>
               </table>
              <a href="javascript:addClient()" id="addclient"><img src="images/add.png" class="addicon" style=" display:inline;" /></a>

DELETE函数工作正常但编辑不正常。这是<input type=image name=edit_client />在其onclick上调用的javascipt函数的代码:

function editPopup()
{
    var url = "../editfunction.php";
    var width = 700;
    var height = 600;
    var left = parseInt((screen.availWidth/2) - (width/2));
    var top = parseInt((screen.availHeight/2) - (height/2));
    var windowFeatures = "width=" + width + ",height=" + height +   
        ",status,resizable,left=" + left + ",top=" + top + 
        "screenX=" + left + ",screenY=" + top + ",scrollbars=yes";

    window.open(url, "subWind", windowFeatures, "POS");
}

基本上,它的作用是在监视器中心的新窗口中弹出editfunction.php。该页面应显示UPDATE页面,其中包含来自$_POST[edit_client]的数据。但似乎editfunction.php无法从第一页读取数据,因为它出错Notice: Undefined index: edit_client in C:\xampp\htdocs\isys\editfunction.php on line 12 -yeah。这是它的代码:

<?php

require("dbconnect.php");
echo $_POST['edit_client']."-yeah";

//edit client
if(isset($_POST['edit_client']) && !empty($_POST['edit_client'])) 
{
  echo $_POST['edit_client']."-yeah";
  //do the update here
}

?>

我做错了什么?我怎样才能做到这一点?感谢。

PS:请不要介意使用mysql_并继续关注问题本身。

3 个答案:

答案 0 :(得分:0)

表单未提交。您正在启动活动,但您没有提交表单。你应该做删除按钮,并让图像按钮将表单提交到editfunction.php页面。

答案 1 :(得分:0)

我想我更了解你现在要做的事情,也许GET请求在这里并不是那么糟糕。从编辑客户端提交时,请确保POST

您需要构建传递给window.open的网址,如下所示:

editfunction.php?edit_client=1

其中1是客户的数字ID。这可以通过JavaScript以与提供URL相同的方式轻松提供。

var url = "../editfunction.php?edit_client="+client_id;

如果您需要提供多个变量,请用&符号分隔它们:

editfunction.php?edit_client=1&second_var=2

以后所有这些都可以在$_GET超全球下访问。只需将PHP中的$_POST['edit_client']更改为$_GET['edit_client']即可抓住更改。

原始答案完好无损


您的PHP脚本配置为接受POST请求。

$_POST['edit_client']

在测试它的存在之前调用此变量,因此得到未定义的索引('edit_client'),因为它不在$ _POST数组中。

它不在POST数组中,因为您的代码中没有任何数据将POST任何数据发送到服务器。您使用window.open但会发送GET请求,除非您在网址(editfunction.php?arg1=val1&arg2=val2)中对其进行编码,否则您不会发送任何数据。如果要POST数据,则需要使用AJAX。如果你想使用它,JQuery有一个非常简单的AJAX library

请注意,使用AJAX并不排除使用弹出窗口。例如,您可以从PHP脚本中获取数据作为HTML,并使用JavaScript在弹出窗口中呈现它。

答案 2 :(得分:0)

我以某种方式找到了如何使用onsubmit的{​​{1}}函数实现我想要的工作方式:

<form>

我将此代码放在弹出窗口<form action="../editfunction.php" method="post" target="DoSubmit" onsubmit="DoSubmit = window.open('about:blank', 'DoSubmit', windowFeatures, 'POS');">的头部:

index

谢谢大家的帮助。我非常感谢! :)