2011-04-22 193 views
1

嗨,大家好我在使用html <form>操作属性时试图调用函数时遇到困难。如何使用html <form> action属性调用php函数?

$cm = new customer_module(); 
$rm = new room_module(); 

$c_array = $cm->getByStatus('CHECKED-IN'); 

foreach($c_array as $row) 
{ 
    $temp = $row['room_no']; 
    $r_array = $rm->getByRoomNumber($temp); 
    $rray = $r_array[0]; 
    echo( 
    $cm->checkOutCustomer($row['last_name'],$row['first_name']). 
    "<tr>". 
    "<td>".$row['room_no'].  "</td>". 
    "<td>".$rray['type'].  "</td>". 
    "<td>".$row['last_name']. "</td>". 
    "<td>".$row['first_name']. "</td>". 
    "<td>".$row['phone_no']. "</td>". 
    "<form action="$cm->checkOutCustomer($row['last_name'],$row['first_name']);">". 
    "<td>"."<Button>Check Out</button>"."</td>". 
    "</form>". 
    //"<td>"."<input type='button' name='checkingOut' value='Check Out' />"."</td>". 
    "</tr>"); 
} 

正如你所看到的,我试图运行action属性代码$cm->checkOutCustomer($row['last_name'],$row['first_name'])

我的回声后,代码运行良好的第一行,但当我粘贴它的行动似乎有一个语法问题与$cm

请告诉我是什么问题,并非常感谢!

+0

如果我们知道什么“$ cm-> checkOutCustomer($ row ['last_name'],$ row ['first_name'])”,那么我们可以帮助您更好。 – Flipper 2011-04-22 05:16:21

+0

基本上我的页面会显示一个当前所有客户的登记表。我想为表中显示的每个客户创建一个“结帐”按钮。我希望能够点击该客户旁边的“签出”来修改他们的状态以签出。基本上我的checkOutCustomer函数会搜索客户的姓氏和名字,然后将他们的状态从“签入”改为“”。 – Sam 2011-04-22 05:22:22

回答

0

PHP由服务器评估。

HTML由客户端解释。

从来没有两个人见面。

有两种选择:

  1. 移动你的功能到一个单独的页面。将表单的操作设置为该页面。这需要一些重定向,以便将用户返回到包含所有表格行的页面。

  2. 将您的功能移至单独的页面。使用JavaScript取消表单的提交,然后使用AJAX将数据发送到单独的页面。这种吸引力,因为你将不得不处理跨浏览器事件和AJAX,所以我会建议一个库,如jQuery

0

这条线是错误的。

"<form action="$cm->checkOutCustomer($row['last_name'],$row['first_name']);">". 

这应该起作用。

"<form action=" . $cm->checkOutCustomer($row['last_name'],$row['first_name']) . ">" . 

看起来像复制和粘贴错误是全部。

3

如果你希望checkOutCustomer方法应该在表单提交时执行,那么它不是正确的实现方式。您需要在action属性中指定一个url。表单将被提交到这个URL,您可以在这里访问表单字段作为$ _POST或$ _GET超级全局元素(取决于方法),然后处理它们。

但如果这种方法checkOutCustomer返回要设置为形式的行动属性的网址,然后

,而不是

"<form action="$cm->checkOutCustomer($row['last_name'],$row['first_name']);">". 

尝试

"<form action=" . $cm->checkOutCustomer($row['last_name'],$row['first_name']) . ">". 
1

我不不明白为什么@ sdleihssirhc的答案在正确的时候被拒绝了,而错误的答案却被抬高了。 PHP被评估为服务器端 - HTML由浏览器处理。这意味着您的代码正在检查列出的每个用户。不是你想要的?没想到。

action的属性是NOT有关的提交执行服务器侧功能。你想将它设置为一个PHP文件并让该PHP文件进行处理。尝试再次浏览HTML表单的基础知识,因为您似乎并不理解。

也尝试创建一个Customer类,只需添加一个$customer->checkout()方法,只需搜索活动客户记录(即未检出)并显示其中的信息即可。然后做一些类似$customer = new Customer($roomNo, $info ...)然后$customer->checkIn()

这对维护系统的任何人都更有意义。无论如何,从我所看到的,你正在尝试创建一个酒店管理系统。 PHP并不是最适合当前工作的语言,不要给出任何“我认识的语言”的废话 - 学习适合于该任务的东西,因为缺乏知识不是挑选糟糕语言的借口为了手头的工作。

-

不会任何从小事或指针除了工作代码 - 你必须学习,而不是让别人做,只是复制/粘贴。

+0

是什么让你认为OP试图在浏览器中打开PHP源代码?对我来说,在他的问题中,事实上非常明显,情况并非如此。虽然sdleihssirhc的答案中的信息是正确的,但这不是问题的“正确”答案。如果你回头看看代码,问题是用于将action属性插入到echo语句中的语法。 – AndrewR 2011-04-22 17:46:01

+0

Wow:S你明白'action'属性指定了一个页面来发送数据,对吧?如果你将'action'设置为'myFunc()',那么'myFunc()'在页面加载时执行,这个动作设置为'myFunc()'的返回值,你搞砸了所有的东西。你们把正确答案投下来...... – ShotgunToothpaste 2011-04-29 05:50:13