【问题标题】:Using if to echo statements based on radio button AND drop down list choices PHP使用 if 来回显基于单选按钮和下拉列表选择 PHP 的语句
【发布时间】:2012-10-27 08:16:07
【问题描述】:

我已经在整个互联网上寻找这个特定问题的答案,但似乎找不到答案。基本上,我有一组单选按钮和一个下拉列表,您可以从中选择选项。

<form method="get" action="phpindex.php">
    <select name="season">
        <option value="">- Season -</option>
        <option value="spring">Spring</option>
        <option value="summer">Summer</option>
        <option value="fall">Fall</option>
        <option value="winter">Winter</option>
    </select>
    <br /><br />
    <input type="radio" name="beer" value="heavy"/>Heavy
    <br />
    <input type="radio" name="beer" value="light"/>Light
    <br />
    <input type="submit" OnClick="show_alert"/>
</form>

根据您的选择组合,您会在单击提交按钮时获得要回应的特定声明。例如,如果您选择春天作为季节,并选择浓啤酒,则应根据这些选择回应声明。问题是,回声功能不起作用,我认为这是因为单选按钮和下拉列表的组合。这是我的 PHP 和前面提到的 echo 函数不起作用。

<?php

$beer = $_GET["beer"];
$season = $_GET["season"];
$spring = $_GET["sp"];
$summer = $_GET["summer"];
$fall = $_GET["fall"];
$winter = $_GET["winter"];
$heavy = $_GET["heavy"];
$light = $_GET["light"];


if ( in_array("spring", $season) && in_array("heavy", $beer)  ) {
echo "$state Bud"; } 
if ( in_array("spring", $season) && in_array("light", $beer) ) {
echo "$state Abita"; }
if ( in_array("summer", $season) && in_array("heavy", $beer) ) {
echo "$state Yuengling"; }
if ( in_array("summer", $season) && in_array("light", $beer) ) {
echo "$state Coors"; }
if ( in_array("fall", $season) && in_array("heavy", $beer) ) {
echo "$state PBR"; }
if ( in_array("fall", $season) && in_array("light", $beer) ) {
echo "$state Miller"; }
if ( in_array("winter", $season) && in_array("heavy", $beer) ) {
echo "$state Natty"; }
if ( in_array("summer", $season) && in_array("light", $beer) ) {
echo "$state Kona"; }

$state = "Well, it looks like it's $season, and you want a $beer beer, so try this brew out:";


?>

任何帮助将不胜感激!

【问题讨论】:

  • in_array() 用于检查 array 是否包含值。不过,$_GET 参数不是数组。一个简单的== 就足够了。

标签: php drop-down-menu radiobuttonlist


【解决方案1】:

您想将该字符串保存到 if 语句上方的 $state。

$state = .......

if....
if....

【讨论】:

    【解决方案2】:

    这里有一些错误

    首先,你需要的是:

    $beer = $_GET["beer"];
    $season = $_GET["season"];
    

    Fall、spring 等是值,而不是 GET 参数。 之后,您检查 GET 的值以将啤酒 anme 存储在 var 中;

    if ($beer == 'heavy' && $season == 'spring') $brand= "Bud";
     if ($beer == 'light' && $season == 'spring') $brand= "Abita";
     //ad so on....
    
    $state = "Well, it looks like it's $season, and you want a $beer beer, so try this brew out: $brand";
    echo $state;
    

    你不能回显 $state,因为 $state 是在你的回显调用之后定义的。 相反,只需将 brew 放入一个 var 中,然后在所有 if 之后将其附加到您的状态字符串中。

    干杯。

    【讨论】:

      【解决方案3】:

      首先你必须先有 $state = '...' 然后是你的 if 语句

      $_GET 是一个数组,因此您可以使用 in_array,但 $_GET['beer'] 或 $_GET['season'] 不是一个数组。

      所以 $beer 和 $season 在您的情况下不是数组。您可以轻松地将语句更改为:

      $state = "Well, it looks like it's $season, and you want a $beer beer, so try this brew out:";
      if ( $season == "spring" && $beer == "heavy"  ) {
          echo "$state Bud"; 
      } 
      ....
      

      等等……

      因为我想你只是期待一个复制粘贴,所以你去吧:

      <?php
      
      $beer = $_GET["beer"];
      $season = $_GET["season"];
      $spring = $_GET["sp"];
      $summer = $_GET["summer"];
      $fall = $_GET["fall"];
      $winter = $_GET["winter"];
      $heavy = $_GET["heavy"];
      $light = $_GET["light"];
      
      $state = "Well, it looks like it's $season, and you want a $beer beer, so try this brew out:";
      
      if ( $season == "spring" && $beer == "heavy" ) {
          echo "$state Bud"; 
      } 
      if ( $season == "spring" && $beer == "light" ) {
          echo "$state Abita"; 
      }
      if ( $season == "summer" && $beer == "heavy" ) {
          echo "$state Yuengling"; 
      }
      if ( $season == "summer" && $beer == "light" ) {
          echo "$state Coors"; 
      }
      if ( $season == "fall" && $beer == "heavy" ) {
          echo "$state PBR";
      }
      if ( $season == "fall" && $beer == "light" ) {
          echo "$state Miller"; 
      }
      if ( $season == "winter" && $beer == "heavy" ) {
          echo "$state Natty"; 
      }
      if ( $season == "summer" && $beer == "light" ) {
          echo "$state Kona"; 
      }
      

      【讨论】:

      • 啊,比我想象的要简单得多!我是新手,所以仍在学习绳索。非常感谢!
      • 哈哈,我不介意自己进行更改,但是谢谢!没有意识到需要做的改变有多么微小。
      【解决方案4】:

      $_GET以这种方式使用的元素只能是简单的数据类型,不能是数组,因为查询字符串的每个段(例如q=v)都被定义为表示单个值v——键为@987654324 @ 在$_GET 数组中。

      如下所述,当"array[]" 用于input 标记的name 属性时,有一个例外,在这种特定情况下,在$_GET/$_POST 中创建一个数组.

      在您的情况下,您希望直接将值作为字符串进行测试:

      if ($season == "spring" &amp;&amp; $beer == "heavy")

      例如。

      【讨论】:

      • &lt;input name="array[]" /&gt; 这样的元素会在$_GET$_POST 超全局中生成数组。
      • @LinusKleen 哦,对了,谢谢,你每天都能学到新东西。虽然这是一个晦涩难懂的特性(或者,至少,经过 6 年的半常规 PHP 开发,我从未接触过它!)而且我可能不会急于使用它。
      • 强烈反对。编辑了我的答案以反映我现在理解的事物状态。
      猜你喜欢
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多