Php,如果其他形式的行动

时间:2017-03-13 16:51:56

标签: php forms if-statement

我试图建立一个在线音乐会门票系统,这是我的问题..

<?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>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Lucida Sans Unicode" size="2"><b>Ticket Type:&nbsp;&nbsp;</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>&nbsp;&nbsp;Quantity:&nbsp;&nbsp;</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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>

说明有问题的网页的完整代码。

4 个答案:

答案 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
  1. 人们应该可以购买不同类型的机票,他们可以选择从1到30的票数,
  2. 您希望根据TicketType运行不同的文件,在一种情况下您要运行seat.php,在一种情况下您要运行index.php,
  3. 为了实现您的目标,您创建了一个表单,使用if语句在表单中设置您的操作值,因为我可以看到您在表单中使用变量So these are my assumption, what you want to do, 进行操作,并设置此通过你的if语句获得价值。
  4. 如果到目前为止我对任何事情都不对,请不要进一步阅读,这将浪费时间。

    基本上是为了实现目标,您正在使用$action

    在你的情况下,你似乎知道数组和逻辑,但你缺乏关于表单的基本知识,这就是你的代码无法正常工作的原因。

    说实话。在我看来,你对形式一无所知。这就是为什么不可能给你解决方案(至少对我而言)。但我很确定,如果你完全阅读这篇文章,你将能够自己解决问题,

    所以快速阅读这些要点,你会惊讶地发现为你解决问题是多么容易,你也会意识到为什么别人无法为你解决问题,目前。

    现在从这里开始

    我将问题分为四部分

    1. 关于form, array and some logic
    2. 的一些重要说明
    3. form不等于$Ticket_Type - 你甚至不能在这里使用$ TiccketType
    4. $TicketType仅传递Select option代码中的value - 两部分解决方案
    5. 你的逻辑错在哪里,
    6. <强> 1。关于表格的一些重点。

      1. 当您使用value时,您必须告诉form您正在提交表单,如果您只想使用php,则必须使用提交按钮(我已在其他日子的评论中提到这一点),

      2. 第二,您需要知道,当您点击php中的submit button时发生的情况,表单将运行form并且还会传递数据。打开表单标记action file以关闭表单<form>到该文件

      3. 但是,这些打开和关闭</form>标记之外的任何数据form都不会传递该数据,所以重点是它只传递开头{{1}内的数据1}}并关闭form标记。

      4. 请查看下面的代码以便更好地理解它,并且还请运行此代码,以便您更好地理解它,

        关于代码

        的几点
        1. 在下面的代码中,我们有两个form forminput fieldlocation输入字段不在name标记和{{1}输入字段位于location标记内。
        2. ,我们的formnameform文件的form action为此示例的seat.php
        3. 由于nameform,因此如果您点击form.php,它会将数据传递给action,并会运行该文件。
        4. seat.php中,我们只是使用submit button来显示两个值,
        5. 请参阅以下代码seat.phpseat 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, becauseis out oflocation输入一些内容,然后点击提交按钮,这次它会显示两个值,因为这两个值都是在<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标记。 }标签,你不能把它们放在一边,

          1. location不等于form tag - ,你甚至不能在这里使用$ TicketType,因为它等于你想要来自select选项的数组
          2. 对于第二个错误,请注意代码的这一部分

            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,因为当您单击提交按钮时,再次表单只传递值的值。

            optionvalue

            它不会改变输出,对于这个代码,就像你的数组键和值是相同的,但你应该知道你将来传递的值。

            要了解我在这里要说的内容,请从下面运行这两个代码,您将了解我想说的内容。

            <强> 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解释了其原因,但是由于他/她的回复很长……也许这会对别人有所帮助!