【问题标题】:Php if Else in form actionphp if else in form action
【发布时间】:2017-03-13 16:51:55
【问题描述】:

我正在尝试制作一个在线音乐会门票系统,这是我的问题..

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

这是有问题的网页的完整代码。

【问题讨论】:

  • “不起作用”具体是什么意思?你有错误吗?你忘记echo你的变量了吗?
  • 没有足够的代码用于表单并且缺少闭包。加上这些变量的位置和分配的位置。
  • echo $action; 将解决您的问题。
  • @JayBlanchard 我认为你午餐吃得很饱。
  • 你是从网络服务器运行这个吗?你是怎么打开文件的?

标签: php forms if-statement


【解决方案1】:

注意:这不是答案,你不应该接受这个作为答案,我在这里发布而不是在评论部分发布,因为它太长了。

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 提供特殊字符,因此在form 中添加echo 后,您将遇到此问题,因为一旦您在我们的form action 中添加echo,您会在不知不觉中为操作赋予特殊字符,因为您从未设置变量$action 的值,因此变量$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,
  1. 人们应该可以购买不同类型的票,他们可以选择从1到30的票数,
  2. 比你想根据TicketType运行不同的文件,在一种情况下你想运行seat.php,在一种情况下你想运行index.php,
  3. 为了实现您的目标,您创建了一个表单,使用 if 语句在表单中设置您的操作值,我可以看到您在表单中使用变量 $action 进行操作,您通过你的 if 语句。

如果到目前为止我对任何事情都有误,请不要继续阅读,这将是浪费时间。

基本上是为了实现你的目标,你正在使用form, array and some logic

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

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

所以快速阅读要点,你会惊讶于为你解决问题是多么容易,你也会意识到为什么其他人不可能为你解决问题,目前。

从这里开始

我将问题分为四个部分

  1. 关于form 的一些重要说明。
  2. $Ticket_Type 不等于 $TicketType - 你甚至不能在这里使用 $TiccketType
  3. Select option 只传递来自value 标签的value -- 两部分解决方案
  4. 你的逻辑在错误的地方,

1.关于表单的一些要点。

  1. 当你使用form时,你必须告诉php,你正在提交表单,如果你只想使用php,你必须使用提交按钮(前几天我已经在评论中提到了这一点),

  2. 第二个你需要知道的是,当你点击form 中的submit button 时会发生什么,表单将运行action file 并且还会从中传递数据。打开表单标签 &lt;form&gt; 到关闭表单标签 &lt;/form&gt; 到该文件

  3. 但是在这些打开和关闭form 标签之外的任何数据,form 将不会传递该数据,所以重点是它只传递在开头form 和关闭@ 内的数据987654358@ 标签。

看下面的代码更好理解,也请运行这段代码,让你更好理解,

关于代码的几点说明

  1. 在下面的代码中,我们有两个input fieldlocationnamelocation输入字段在form标签之外,name输入字段在form标签内。
  2. 我们的form actionseat.php,对于form 文件的nameform.php 在这个例子中。
  3. 因为我们的actionseat.php,所以如果您点击submit button,它会将数据传递给seat.php,并运行该文件。
  4. seat php中,我们只是使用echo来显示两个值,

请参阅下面的form.phpseat.php 代码,

form.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>

seat.php

<?php
$name = $_POST['name'];

echo $name.'<br>';

$location = $_POST['location'];

echo $location;

现在运行form.php 并在位置和名称框中输入一些内容,然后单击提交按钮,如果这样做,它只会显示value for name,但对于location value 它会显示未定义的索引位置错误。

原因是,因为您的表单从未将 location 的值传递给 seat.php1, becauselocationis out ofform` 开始和结束标记,

现在把这个位置字段放在表单标签内

现在将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.phpnamelocation 输入一些内容,然后单击提交按钮,这一次它将显示两个值,因为这一次两个值都在form tag 内所以两个值都通过了。

注意——如果你能理解第一个结果和第二个结果之间的区别,你就能明白,为什么你需要在开始和结束form标签内有你的select标签,你不能让他们在外面,

  1. $Ticket_Type 不等于 $TicketType - 你甚至不能在这里使用 $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 ' &lt;select name="Ticket_Type"&gt;'这一行,你给select命名Ticket_Type而不是if statement你使用变量$TicketType,我假设你正在检查$TicketType的值,这个问题可以通过在if语句中将变量名$TicketType改成$Ticket_Type来解决。

你也必须在同一个地方纠正这个问题

所以即使在应用上述修复后,您的代码也无法工作,因为您在此代码中有第二个问题

现在来到第二个问题,您在 if statement 中提出的问题,在您的 if statement 中检查 $TicketType 值,但您没有变量 $TicketType 的值,因为当您使用form php 不要设置它设置index 的变量,所以首先你必须设置$TicketType 的值,而不仅仅是你可以使用if statement,

应用这两个修复后,您的代码应如下所示

注意 –(我将 select 的名称更改为 TicketType )

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";
}

3。选择选项,仅从值标签传递值

你犯的第三个错误和这个你不会注意到这段代码的错误,但是如果你不学习,你将来很可能会犯这个错误,所以也要纠正这个错误,

注意这段代码

$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>';

在这里你有数组,而不是你从你的数组创建selectoption,这很好,但是你在这里犯了一个基本错误,表单只会传递value标签的值 所以来到你的代码中的这一行

echo "&lt;option value=\"$key\"&gt;$value&lt;/option&gt;";

现在也将变量$key 更改为变量$value,因为当您单击提交按钮时,表单再次只传递来自值的值。

echo "&lt;option value=\"$key\"&gt;$value&lt;/option&gt;";echo "&lt;option value=\"$value\"&gt;$value&lt;/option&gt;";

它不会改变结果,因为这段代码,因为你的数组键和值是相同的,但你应该知道你为未来传递了什么值。

要理解我在这里想说什么,从下面运行这两个代码,你就会明白我想说什么。

form.php

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

seat.php

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

现在再次在浏览器中运行该文件,并选择选项并单击提交,然后查看结果,并尝试了解发生了什么。

4 你的逻辑在错误的地方

查看此代码

if($Ticket_Type == 'VIP'){
    $action = "index.php";
}else if ($Ticket_Type == 'VVIP') {
    $action = "seats.php";
}

您在这里尝试做什么,在您的脑海中,您将运行不同的不同文件是有道理的, 根据票证类型,但实际上它没有任何意义,因为当您单击submit button 时,只有form 会将值传递给action file

这个很难解释

好的,听你在这段代码中有这个变量$TicketType,它只有在你点击提交按钮后才会被设置,而action file它永远不会在这个文件中设置,所以你不能有这些行这个文件。 (这就是为什么在添加回声后显示禁止访问)

好吧,假设您将这一行移动到不同的文件中,但您尝试对这些行做的仍然是愚蠢的,只是不要使用这些愚蠢的行,也不要尝试运行不同的不同文件,运行单个文件,意味着给单个action,让我们说表单中的动作是book.php

所以我们的文件名为book.php

所以你的book.php 的启动shell 应该是这样的

if(!empty($_POST['Ticket_Type'])){

    // what you are basically saying that if TicketType is not empty run this code, 
// if it is empty run the else statement so the user will know that he did not select any ticket, 
//now we are going to add some more code In here

}else 'Hey you did not select any ticket';

在中间添加代码后,我们的代码将如下所示

if(!empty($_POST['Ticket_Type'])){

    $Ticket_Type = $_POST['Ticket_Type']; // set the value

    if($Ticket_Type == 'VIP'){ // 
//    Copy and paste the index.php file code here
}else if ($Ticket_Type == 'VVIP') {
    //copy and paste the seat.php file code here
    echo $action;
}// if you have another Ticket_Type just add another else if here, 
//Note: you can add as many else if you like, 

}else 'Hey you did not select any ticket';

所以只需运行单个文件操作

我还活着,在输入所有这些之后,如果您有任何困惑,请告诉我。

【讨论】:

    【解决方案2】:

    您没有回显变量以显示输出:

    <?php 
    if($tickettype == 'VIP'){
        $action = "seats.php"; 
    }else if($tickettype == 'VVIP'){
        $action ="seats1.php";
    }
    ?>
    <form action= "<?php echo $action; ?>" method="post">
    

    注意&lt;?php echo $action; ?&gt;

    【讨论】:

    • 它说禁止访问
    • 该消息是在表单提交后发送的吗?
    • 是的,先生,这就是提交后的信息
    • 那是因为服务器无权显示页面seat.php或seat1.php尝试将这些文件的文件权限更改为777再试一次。
    • 我该如何改变?
    【解决方案3】:

    你的问题在这里:

    $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 语句的条件是

    if($TicketType == 'VIP'){
        $action = "index.php";
    }else if ($TicketType == 'VVIP') {
        $action = "seats.php";
    }
    

    $TicketType 是一个数组,你不能用字符串检查它,所以你的 $action 变量没有设置。你必须提供索引来检查。

    【讨论】:

    • 我也使用了你的第一个建议,它说禁止访问?
    • 我认为 $action 变量未设置,因为 $TicketType 是一个数组,而您的条件检查是字符串“VIP”。我的建议是将索引放入 $TicketType
    • Vidya 你说的不正确,但我不怪你,因为我自己在这里弄糊涂了,它不是数组,它应该是来自所选选项的 $Ticket_Type 值
    【解决方案4】:

    我有一个类似的问题,我的错误是“找不到对象! 在此服务器上找不到请求的 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解释了原因,但由于他/她的回答很长......也许这对其他人有帮助!

    【讨论】:

      【解决方案5】:

      考虑一下:

      <?php
      if(!empty($_POST['tickettype'])){
        
        if($tickettype == "VIP"){
          ?>
      <script type="text/javascript">
      window.location = "./seats.php";
      </script>      
      <?php  
      }else if ($tickettype == "VVIP") {
      ?>
      <script type="text/javascript">
      window.location = "./seats1.php";
      </script>      
      <?php
              
      }   
      }else 'Hey you did not select any ticket';
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多