【问题标题】:SWITCH / CASE Multiple Submit Buttons with PHP using POST methodSWITCH / CASE 使用 POST 方法使用 PHP 的多个提交按钮
【发布时间】:2023-04-11 04:34:01
【问题描述】:

首先,我是 PHP 和使用表单的菜鸟,但我边走边学! 其次,我知道这已经被报道过很多次了,但我就是无法让它为我工作!这可能只是我忽略的东西......

我有一个包含 1 个搜索字段和 3 个提交按钮的表单。 根据选择的按钮,查询将在数据库中查找 3 种不同搜索之一。这很简单……

http://1karaokedj.com

<input name="searchterm" type="search" placeholder="Enter Search Terms Here"  class="search" />
<input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Artist Search"  />
<input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Title Search"  />
<input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Disc ID Search"  />
<?php if(isset($_SESSION['searchterm'])) {
          if(($_SESSION['searchterm']!="")) {
            switch ($_POST['searchbtn']) {
              case 'Artist Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Artist like '%$searchterm%' limit 100");
                break;
              case 'Title Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Title like '%$searchterm%' limit 100");
                break;
              case 'Disc ID Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Disc like '%$searchterm%' limit 100");
                break;
            }

            if(mysqli_num_rows($searchresults) > 0) {
...
}}}?>

这总是返回找不到记录。 如果我添加一个默认情况,那么它可以工作 print_r($_POST);返回“数组()”

如果问题出在其他地方,这里是完整的代码:

<?php
  include("connect.php");
  require_once 'Mobile_Detect.php';
  $detect = new Mobile_Detect;
  ini_set('session.cookie_lifetime',900);
  ini_set('session.gc_maxlifetime',900);
  session_start();
  if(isset($_POST['searchbtn'])) {
    $_SESSION['searchterm']=$_POST['searchterm'];
    if(($_SESSION['searchterm'])!="") { header("location:index.php"); }
    else { echo "<script> alert('Please enter something to search for') </script>"; }
  }
?>
<html>
  <head>
    <title>1KaraokeDJ.com Search</title>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <div class="container">
      <form method="post">
        <p><code>
          <img src="top1.jpg" /><br>
          <?php if ($detect->isMobile()) { echo("Mobile Device Detected"); } else { echo("Desktop Browser Detected"); } ?>
        </code></p>
        <p>
          <?php if(isset($_SESSION['searchterm'])) { ?>
            <input name="searchterm" type="search" value="<?php echo $_SESSION['searchterm'];?>" class="search" />
          <?php } else { ?>
            <input name="searchterm" type="search" placeholder="Enter Search Terms Here"  class="search" />
          <?php } ?>
        </p>
        <p>
          <input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Artist Search"  />
          <input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Title Search"  />
          <input name="searchbtn" type="submit" id="searchbtn" class="searchbutton" value="Disc ID Search"  />
        </p>
        <hr style="width:100%">
        <?php if(isset($_SESSION['searchterm'])) {
          if(($_SESSION['searchterm']!="")) {
            $searchterm=strtoupper($_SESSION['searchterm']);

            print_r($_POST);

            switch ($_POST['searchbtn']) {
              case 'Artist Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Artist like '%$searchterm%' limit 100");
                break;
              case 'Title Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Title like '%$searchterm%' limit 100");
                break;
              case 'Disc ID Search':
                $searchresults=$db->query("select * from 1KaraokeDJ where Disc like '%$searchterm%' limit 100");
                break;
            }

            if(mysqli_num_rows($searchresults) > 0) {
              while($descri=mysqli_fetch_object($searchresults)) { ?>
        <div class="reslt">
          <h3 id="results">
            <?php
              echo str_ireplace($searchterm, '<span class="highlight">'.$searchterm."</span>", $descri->Artist);
              echo " - ";
              echo str_ireplace($searchterm, '<span class="highlight">'.$searchterm."</span>", $descri->Title);
            ?>
          </h3>
          <p class="Description">
            <?php
              echo str_ireplace($searchterm, '<span class="highlight">'.$searchterm."</span>", $descri->Brand);
              echo " - ";
              echo str_ireplace($searchterm, '<span class="highlight">'.$searchterm."</span>", $descri->Disc);
              echo " - ";
              echo $descri->Track;
            ?>
          <p>
          <hr>
        </div>
        <?php } ?>
        <div class="reslt">
          <h3 id="results"><?php echo mysqli_num_rows($searchresults) ?> Results</h3>
          <?php if(mysqli_num_rows($searchresults) >= 100) { ?>
            <p class="Description highlight">Showing Up To 100 Results<br>Try Refining Your Search</p><hr> 
          <?php } ?>
        </div>
        <?php   } else { ?>
        <div class="reslt">
          <h3 id="results">Nothing Found!</h3>
          <p class="Description highlight">Try Changing Your Search Terms<p><hr>
        </div>
        <?php } } } ?>
      </form>
      <code>This site is in testing... Things may change anytime<br>and many things may not work for a while!</code>
    </div>
  </body>
</html>

【问题讨论】:

  • 尝试移动 session_start();到第一行之前没有任何空格

标签: php forms submit-button


【解决方案1】:

这是因为以下行在提交表单时重定向。 POST 值在重定向时不会保留。因此,$_POST['searchbtn'] 是空的,在switch 语句中它转到default 的情况。

header("location:index.php");

评论头重定向,它应该可以工作。

更新代码:

if(isset($_POST['searchbtn'])) {
    $_SESSION['searchterm']=$_POST['searchterm'];
    if(($_SESSION['searchterm'])!="") { /*header("location:index.php");*/ }
    else { echo "<script> alert('Please enter something to search for') </script>";}
}

【讨论】:

  • 谢谢!做到了。我将在更多帖子中提出更多问题!
猜你喜欢
  • 2013-02-23
  • 2020-04-07
  • 2012-01-23
  • 1970-01-01
  • 2017-05-03
  • 2016-04-06
  • 1970-01-01
  • 2016-02-24
相关资源
最近更新 更多