我试图建立一个在线音乐会门票系统,这是我的问题..
<?php
if($tickettype == 'VIP'){
$action = "seats.php";
}else if($tickettype == 'VVIP'){
$action ="seats1.php";
}
?>
<form action= "<?php $action; ?>" method="post">
它不起作用。提前谢谢!
表示有问题的特定文件的完整代码。
<html>
<head>
<title>Ariana Grande Concert</title>
</head>
<body>
<br>
<table>
<tr>
<td><img src="ariana2.jpg" height="300" width="260"></td>
<td></td><td></td><td></td>
<td>
<h2>ARIANA GRANDE THE HONEYMOON TOUR</h2><br>
<font face="Lucida Sans Unicode"> March 11, 2017<br>
Grand Ballroom, Solaire Resort & Casino<br>
Due to peoples demand, Ariana Grande is back in the Philippines<br>
Ariana Grande Live in the Philippines on <b> March 11, 2017!</b></font>
<br><br><br><br><br><br><br><br>
</td>
</tr>
</table>
<br><br>
<hr>
<br>
<center>
<table cellspacing="10" cellpadding="10" bgcolor="gray">
<tr>
<td><font face=""><b>TICKET PRICES:</b></font></td>
<td><b>VVIP:</b> <u>Php 25,000.00</u></td>
<td><b>VIP:</b> <u>Php 20,000.00</u></td>
<td><b>Upper Box A:</b> <u>Php 15,000.00</u></td>
<td><b>Upper Box B:</b> <u>Php 15,000.00</u></td>
<td><b>Lower Box A:</b> <u>Php 10,000.00</u></td>
<td><b>Lower Box B:</b> <u>Php 10,000.00</u></td>
<td><b>General Ad:</b> <u>Php 5,000.00</u></td>
</tr>
</table>
</center>
<br><br>
<font face="Lucida Sans Unicode" size="2"><b>Ticket Type: </b></font>
<?php
$TicketType = array('VIP' =>'VIP', 'VVIP' =>'VVIP', 'Upper Box A'=>'Upper Box A', 'Upper Box B'=>'Upper Box B', 'Lower Box A'=>'Lower Box A', 'Lower Box B'=>'Lower Box B', 'General Admission'=>'General Admission') ;
echo ' <select name="Ticket_Type">';
foreach ($TicketType as $key => $value) {
echo "<option value=\"$key\">$value</option>";
}
echo '</select>';
if($TicketType == 'VIP'){
$action = "index.php";
}else if ($TicketType == 'VVIP') {
$action = "seats.php";
}
echo '<font face="Lucida Sans Unicode" size="2"><b> Quantity: </b></font>';
$Quantity = range (1, 30);
echo '<select name="Quantity">';
foreach ($Quantity as $value) {
echo "<option value=\"$value\">$value</option>\n";
}
echo '</select>';
?>
<form action="<?php echo $action; ?>" method="post">
<br><br><br>
<button class="btnExample" type="submit" value="Submit"/>Next</button>
<style>
.btnExample {
color: #0000;
background: white;
font-weight: bold;
border: 1px solid #0000;
border-radius: 10px 10px 10px;
}
</style>
</form>
</body>
</html>
说明有问题的网页的完整代码。
答案 0 :(得分:4)
您没有回显变量以显示输出:
<?php
if($tickettype == 'VIP'){
$action = "seats.php";
}else if($tickettype == 'VVIP'){
$action ="seats1.php";
}
?>
<form action= "<?php echo $action; ?>" method="post">
注意<?php echo $action; ?>
答案 1 :(得分:0)
你的问题在这里:
$TicketType = array('VIP' =>'VIP', 'VVIP' =>'VVIP', 'Upper Box A'=>'Upper Box A', 'Upper Box B'=>'Upper Box B', 'Lower Box A'=>'Lower Box A', 'Lower Box B'=>'Lower Box B', 'General Admission'=>'General Admission') ;
你的判断条件是
if($TicketType == 'VIP'){
$action = "index.php";
}else if ($TicketType == 'VVIP') {
$action = "seats.php";
}
$ TicketType是一个数组,你不能用字符串检查它,因此你的$ action变量没有设置。你必须提供检查索引。
答案 2 :(得分:0)
注意:这不是答案,你不应该接受这个答案,我在这里发帖而不是在评论部分发帖,因为它很长。 < / p>
Note - You can solve your problem by your self, but for other it is impossible, as your code is just not making any sense at the moment, but I am pretty sure it will if you are able to read and understood what I am trying to say here in the solution.
首先,
访问被拒绝的问题 -
注意 - 您不必修复此问题,它会自行修复,但您应该知道为什么会出现此问题,所以将来如果遇到问题,您将知道该怎么做正确。
拒绝访问的原因是,您不允许为form action
提供特殊字符,因此在echo
中添加form
之后您将遇到此问题,因为只要在我们的echo
中添加form action
,您就会在不知不觉中为操作赋予特殊字符,因为您从未为变量$action
设置值,因此变量{{1}的值等于$action
。因此,在添加error message
后,您将显示该错误消息。
在做任何事情之前在浏览器中运行你的文件并检查源代码,
并查看echo
中的值,这将是一些像这样的事情
form action
注意你在这里有多少个尖括号冒号,你甚至不允许使用一个尖括号,因此浏览器认为你试图做一些恶意的事情,这就是为什么它阻止了你的访问。
如果您不知道如何检查源代码,只需键入如何查看源代码并提供您的浏览器名称(只需点击一下就不要问我)
因此,您的代码基本上会生成错误消息,并在添加<br /><b>Notice</b>: Undefined variable: action in <b>C:\in here you are going to have file path\form.php</b> on line <b>1</b><br />
后显示该操作,以及浏览器阻止访问的原因
那么为什么在添加回声之前它没有做同样的事情,因为在echo
中,如果你不使用php
你没有显示任何东西,所以在添加回声之前,你的echo
,只需从表单操作中删除action was empty
并再次检查源代码,您就会明白我想说的内容。
再次,您无需修复它,它会自行解决,请记住这一点。
现在解决方案从这里开始
首先,我必须正确对待我的假设,即你要做的事情,
echo
So these are my assumption, what you want to do,
进行操作,并设置此通过你的if语句获得价值。如果到目前为止我对任何事情都不对,请不要进一步阅读,这将浪费时间。
基本上是为了实现目标,您正在使用$action
,
在你的情况下,你似乎知道数组和逻辑,但你缺乏关于表单的基本知识,这就是你的代码无法正常工作的原因。
说实话。在我看来,你对形式一无所知。这就是为什么不可能给你解决方案(至少对我而言)。但我很确定,如果你完全阅读这篇文章,你将能够自己解决问题,
所以快速阅读这些要点,你会惊讶地发现为你解决问题是多么容易,你也会意识到为什么别人无法为你解决问题,目前。
现在从这里开始
我将问题分为四部分
form, array and some logic
。form
不等于$Ticket_Type
- 你甚至不能在这里使用$ TiccketType $TicketType
仅传递Select option
代码中的value
- 两部分解决方案<强> 1。关于表格的一些重点。
当您使用value
时,您必须告诉form
您正在提交表单,如果您只想使用php
,则必须使用提交按钮(我已在其他日子的评论中提到这一点),
第二,您需要知道,当您点击php
中的submit button
时发生的情况,表单将运行form
并且还会传递数据。打开表单标记action file
以关闭表单<form>
到该文件
但是,这些打开和关闭</form>
标记之外的任何数据form
都不会传递该数据,所以重点是它只传递开头{{1}内的数据1}}并关闭form
标记。
请查看下面的代码以便更好地理解它,并且还请运行此代码,以便您更好地理解它,
关于代码
的几点form
form
和input field
,location
输入字段不在name
标记和{{1}输入字段位于location
标记内。form
为name
,form
文件的form action
为此示例的seat.php
。name
为form
,因此如果您点击form.php
,它会将数据传递给action
,并会运行该文件。seat.php
中,我们只是使用submit button
来显示两个值, 请参阅以下代码seat.php
和seat php
,
<强> form.php的 强>
echo
<强> seat.php 强>
form.php
现在去运行seat.php
并在位置和名称框中输入一些内容,然后点击提交按钮,如果这样做,它只显示Location<input type="text" name="location"/><br><br>//out side of the form tag
<form action="seat.php" method="post">
Name <input type="text" name="name"/><br><br>
Location <input type="text" name="location"/><br><br>
<input type="submit" value="Hot Air">
</form>
但是{ {1}}它将显示未定义的索引位置错误。
原因是,因为您的表单从未将<?php
$name = $_POST['name'];
echo $name.'<br>';
$location = $_POST['location'];
echo $location;
的值传递给form.php
位置value for name
表单`开始和结束标记, 强>
现在将此位置字段放在表单标记
中现在将location value
放在开始和结束表单标记
完成后,我们的代码应如下所示
location
现在再次运行seat.php1, because
为is out of
和location
输入一些内容,然后点击提交按钮,这次它会显示两个值,因为这两个值都是在<form action="seat.php" method="post">
Name <input type="text" name="name"/><br><br>
Location <input type="text" name="location"/><br><br>//Now location is inside of the form
<input type="submit" value="Hot Air">
</form>
内,所以两个值都被传递。
注意 - 如果您能理解第一个结果与第二个结果之间的区别,您将能够理解为什么需要在开始和结束时form.php
标记name
标记。 }标签,你不能把它们放在一边,
location
不等于form tag
- ,你甚至不能在这里使用$ TicketType,因为它等于你想要来自select选项的数组 强> 对于第二个错误,请注意代码的这一部分
select
在此处,如果您阅读此行form
,则为$Ticket_Type
$TicketType
提供名称,而在echo ' <select name="Ticket_Type">';
foreach ($TicketType as $key => $value) {
echo "<option value=\"$key\">$value</option>";
}
echo '</select>';
if($TicketType == 'VIP'){
$action = "index.php";
}else if ($TicketType == 'VVIP') {
$action = "seats.php";
}
中使用变量echo ' <select name="Ticket_Type">'
,我是假设您正在检查$ TicketType的值,您可以通过将变量名select
更改为Ticket_Type
来解决此问题。在if语句中。
你必须在同一个地方纠正这个
因此,即使应用上述修复程序后,您的代码也无法正常工作,因此您在此代码中遇到第二个问题
现在出现第二个问题,您在if statement
,$TicketType
中的$TicketType
检查$Ticket_Type
值,但是您没有变量值{{} 1}}因为当你使用if statement
php时不设置变量它会设置if statement
所以首先你必须设置$TicketType
的值,而不是只能使用$TicketType
1}}
应用这两个修补程序后,您的代码应如下所示
注意 - (我将form
的名称更改为TicketType)
index
第3。选择选项,仅从值标记传递值
你做的第三个错误,这个你不会注意到这个代码,但如果你不学习,你将来可能会犯这个错误,所以也要纠正这个错误,
请注意此代码
$TicketType
在这里你有数组,而不是从你的数组中创建if statement,
select
,这很好,但你在这里犯了一个基本的错误,form只传递{{ {1}}标记
所以来你的代码中的这一行
echo ' <select name="Ticket_Type">';
foreach ($TicketType as $key => $value) {
echo "<option value=\"$key\">$value</option>";
}
echo '</select>';
$Ticket_Type = $_POST['Ticket_Type']; // Now you set the value for variable
// as your value is set, now you can type your if statement below.
if($Ticket_Type == 'VIP'){
$action = "index.php";
}else if ($Ticket_Type == 'VVIP') {
$action = "seats.php";
}
现在也将变量更改为$TicketType = array('VIP' =>'VIP', 'VVIP' =>'VVIP', 'Upper Box A'=>'Upper Box A', 'Upper Box B'=>'Upper Box B', 'Lower Box A'=>'Lower Box A', 'Lower Box B'=>'Lower Box B', 'General Admission'=>'General Admission') ;
echo ' <select name="Ticket_Type">';
foreach ($TicketType as $key => $value) {
echo "<option value=\"$key\">$value</option>";
}
echo '</select>';
到变量select
,因为当您单击提交按钮时,再次表单只传递值的值。
option
至value
它不会改变输出,对于这个代码,就像你的数组键和值是相同的,但你应该知道你将来传递的值。
要了解我在这里要说的内容,请从下面运行这两个代码,您将了解我想说的内容。
<强> form.php的 强>
echo "<option value=\"$key\">$value</option>";
<强> seat.php 强>
$key
在浏览器中运行此文件,然后选择该选项,然后点击$value
,它会显示echo "<option value=\"$key\">$value</option>";
,具体取决于您选择的选项,而不是echo "<option value=\"$value\">$value</option>";
,表单只提交值标记的值
现在将值标记值更改为One和2,然后再次运行代码,
<form action="seat.php" method="post">
<select name="Ticket_Type">
<option value="key1">First</option>
<option value="key2">Second</option>
</select>
<input type="submit" value="Hot Air">
</form>
现在再次在浏览器中运行该文件,然后选择该选项并单击提交,并查看结果,并尝试了解发生的情况。
4您的逻辑位于错误的位置
请参阅此代码
<?php
$value = $_POST['Ticket_Type'];
echo $value;
你在这里尝试做什么,在你的脑海里有意义,你将运行不同的不同文件,
根据票证类型,但实际上它没有任何意义,因为当您点击submit button
时,只有key1 or key2
会将值传递给first or second
,
这个很难解释
好吧,听听你在这段代码中有这个变量<form action="seat.php" method="post">
<select name="Ticket_Type">;
<option value="One">First</option>
<option value="Two">Second</option>
</select>
<input type="submit" value="Hot Air">
</form>
,它只在你点击提交按钮后才被设置,而if($Ticket_Type == 'VIP'){
$action = "index.php";
}else if ($Ticket_Type == 'VVIP') {
$action = "seats.php";
}
它永远不会在这个文件中被设置,所以你不能在这个文件中有这些行。 (这就是为什么在添加回声后显示为禁止访问的原因)
好的,我们假设您将此行移至不同的文件,但您仍尝试使用这些行仍然是愚蠢的,只是不要使用这些愚蠢的行,并且不要尝试运行不同的不同文件,运行单个文件,意味着提供单个submit button
,并允许表单中的操作为form
所以我们的文件名是action file
,
因此$TicketType
的启动shell应该如下所示
action file
在中间添加代码后,我们的代码将如下所示
action
所以只需运行单个文件操作
我还活着,打完所有这些后,如果你有任何困惑让我知道。
答案 3 :(得分:0)
我遇到了类似的问题,我的错误显示为“找不到对象! 在此服务器上找不到请求的URL。引荐来源网址上的链接...”
要摆脱aria_suhail_123的答案,您只需删除html中$ action变量周围的所有php代码,如下所示:
<?php
if($tickettype == 'VIP'){
$action = "seats.php";
}else if($tickettype == 'VVIP'){
$action ="seats1.php";
}
?>
<form action= $action method="post">
aria_suhail_123解释了其原因,但是由于他/她的回复很长……也许这会对别人有所帮助!