搜索结果未显示在 iframe 中(使用 switch 语句)

Results from search not shown in iframe (using switch statement)

我们正在使用 switch 语句在语言之间切换,但是当我们尝试使用案例 1(dutch/nl 标志)时,结果不再显示。但是,不使用 switch case 一切正常。

这是我们的索引

<html>
<head>
  <title>Welcome to Medispeak</title>
  <link rel=stylesheet href=Medi.css>
</head>

<body>
<header>

  <div class="lang">
    <form method="GET" action="?set=lang">
      <input id="vlag" name="lang" class="nl" type="submit" value="1">
      <input id="vlag" name="lang" class="en" type="submit" value="2">
      <input id="vlag" name="lang" class="du" type="submit" value="3">
      <input id="vlag" name="lang" class="es" type="submit" value="4">
      <input id="vlag" name="lang" class="pt" type="submit" value="5">
      <input id="vlag" name="lang" class="fr" type="submit" value="6">
    </form>
  </div>
</header>
    <h1>Zoeken op Medicijn</h1>
  <form method="post" action="tabel.php" target="Mediframe">
    Voer medicijn in:
    <input type="text" name="zoek">
    <br/>
    <input type="submit" value="zoeken">
    <input type="reset" value="wissen">
  </form>
  <div id="outer">
    <div id="inner">
      <iframe name="Mediframe" width="800" height="600" frameborder=0>
      </iframe>
    </div>
  </div>
</body>

</html>

这是我们的搜索功能:

<html>

  <head>
    <title>Medispeak</title>
    <link rel=stylesheet href=ProjectCSS.css>
  </head>

  <body>

    <?php
    include 'db.php';
    print_r($_REQUEST);

    $zoek = $_REQUEST['zoek'];
    $lang = $_REQUEST['lang'];
    if ( empty ( $lang ) ) { $lang = "1"; } 
    switch ($lang) {
    case "1":
echo 'case1';
      try
      {
        $sQuery= "SELECT Medibijsluiter
        FROM Medispeak
        WHERE Medinaam LIKE ?";

        $oStmt = $db->prepare($sQuery);
        $oStmt->bindValue(1, "%$zoek%", PDO::PARAM_STR);
        $oStmt->execute();
        if($oStmt->rowCount()>0)

        {
            echo '<table border="2">';
            echo '<thead>';
            echo '<td>Medibijsluiter</td>';
            echo '</thead>';
            while($aRow = $oStmt->fetch(PDO::FETCH_ASSOC))
          {
            echo '<tr>';
            echo '<td>'.$aRow['Medibijsluiter'].'</td>';
            echo '</tr>';
          }
          echo '</table>';
       }
       else
       {
        echo 'Helaas,geen gegevens bekend';
       }

        break;
     }
    }

    catch(PDOException $e)
    {
    $sMsg = '<p>
        Regelnummer: '.$e->getLine().'<br />
        Bestand: '.$e->getFile().'<br />
        Foutmelding: '.$e->getMessage().'
        </p>';

         trigger_error($sMsg);
    }
    $db = null;
    ?>
  </body>

</html>

您使用了两种不同的表单,一种用于语言选择,一种用于搜索。因此,当提交第二个表单时,您在第一个表单中选择的任何内容都将被完全忽略。 (此外,第一种形式使用的是 $_GET,而您正在寻找 $_POST 中的语言)

一个快速的解决方法是将您的语言选择元素移动到第二种形式,这样所选的语言就会与搜索短语一起发送。

switch ($_POST['lang']) 更改为 switch ($_GET['lang']) 您混淆了 POST 和 GET 与您的两种形式

你应该使用 $_GET['lang'] 而不是 $_POST['lang']。或者您可以使用 $_REQUEST['zoek']$_REQUEST['lang'].

如果您的表单类型为 GET,则可以使用 $_GET[= 访问表单数据41=] 或 $_REQUEST。如果类型是POST,你应该使用$_POST$_REQUEST.

Read this 了解更多关于 PHP

中的 GET、POST 和 REQUEST

所以更改您的代码

$zoek = $_POST['zoek'];
switch ($_GET['lang']) {

$zoek = $_REQUEST['zoek'];
switch ($_REQUEST['lang']) {

更新代码

<html>
<head>
  <title>Welcome to Medispeak</title>
  <link rel=stylesheet href=Medi.css>
</head>
<body>
<?php
if(!empty($_REQUEST['zoek'])) {
    $zoek = $_REQUEST['zoek'];
    include 'db.php';
    $lang = $_REQUEST['lang'];

    if ( empty ( $lang ) ) { $lang = "1"; } 

    switch ($lang) {
        case "1":
          echo 'case1';
          try
          {
             $sQuery= "SELECT Medibijsluiter FROM Medispeak WHERE Medinaam LIKE ?";
         $oStmt = $db->prepare($sQuery);
         $oStmt->bindValue(1, "%$zoek%", PDO::PARAM_STR);
         $oStmt->execute();
            if($oStmt->rowCount()>0)
            {
                echo '<table border="2"><thead><td>Medibijsluiter</td></thead>';

                while($aRow = $oStmt->fetch(PDO::FETCH_ASSOC))
                {
               echo '<tr><td>'.$aRow['Medibijsluiter'].'</td></tr>';
                }

                echo '</table>';
            } else {
            echo 'Helaas,geen gegevens bekend';
            }

         break;
       }

       catch(PDOException $e) {
        $sMsg = '<p>
            Regelnummer: '.$e->getLine().'<br />
            Bestand: '.$e->getFile().'<br />
            Foutmelding: '.$e->getMessage().'
            </p>';
            trigger_error($sMsg);
        }
    }

    $db = null;
}
?>
<header>
  <div class="lang">
    <form method="GET" action="?set=lang">
      <input id="vlag" name="lang" class="nl" type="submit" value="1">
      <input id="vlag" name="lang" class="en" type="submit" value="2">
      <input id="vlag" name="lang" class="du" type="submit" value="3">
      <input id="vlag" name="lang" class="es" type="submit" value="4">
      <input id="vlag" name="lang" class="pt" type="submit" value="5">
      <input id="vlag" name="lang" class="fr" type="submit" value="6">
    </form>
  </div>
</header>
    <h1>Zoeken op Medicijn</h1>
  <form method="post" action="" target="Mediframe">
    Voer medicijn in:
    <input type="text" name="zoek">
    <br/>
    <input type="submit" value="zoeken">
    <input type="reset" value="wissen">
  </form>
  <div id="outer">
    <div id="inner">
      <iframe name="Mediframe" width="800" height="600" frameborder=0>
      </iframe>
    </div>
  </div>
</body>
</html>

Update this code in index file. tabel.php content also added in this file. So the form will be submitted to the same page and it will not refer tabel.php.

<html>
<head>
    <title>Welcome to Medispeak</title>
    <link rel=stylesheet href=Medi.css>
</head>


<body>
<header>
    <div class="lang">
        <form method="GET" action="?set=lang">
            <input id="vlag" name="lang" class="nl" type="submit" value="1">
        <input id="vlag" name="lang" class="en" type="submit" value="2">
        <input id="vlag" name="lang" class="du" type="submit" value="3">
        <input id="vlag" name="lang" class="es" type="submit" value="4">
        <input id="vlag" name="lang" class="pt" type="submit" value="5">
        <input id="vlag" name="lang" class="fr" type="submit" value="6">
    </form>
</div>
</header>
    <form method="post" action="tabel.php" target="Mediframe">
    <h1>Zoeken op Medicijn</h1>
Voer medicijn in:
   <input type="text" name="zoek">
   <br/>
    <input type="submit" value="zoeken">
<input type="reset" value="wissen">
<input id="vlag"  type="hidden" name="lang" class="nl" value="<?=$_GET["lang"]?>">
</form>
<div id="outer">
<div id="inner">
    <iframe name="Mediframe" width="800" height="600" frameborder=0>
    </iframe>
</div>
</div>
</body>

</html>

tabel.php

<html>

<head>
    <title>Medispeak</title>
    <link rel=stylesheet href=ProjectCSS.css>
</head>

$zoek = $_POST['zoek'];

switch ($_POST['lang']) {
case "1":
    try {
        $sQuery = "SELECT Medibijsluiter
    FROM Medispeak
    WHERE Medinaam LIKE ?";

        $oStmt = $db->prepare($sQuery);
        $oStmt->bindValue(1, "%$zoek%", PDO::PARAM_STR);
        $oStmt->execute();
        if ($oStmt->rowCount() > 0) {
            echo '<table border="2">';
            echo '<thead>';
            echo '<td>Medibijsluiter</td>';
            echo '</thead>';
            while ($aRow = $oStmt->fetch(PDO::FETCH_ASSOC)) {
                echo '<tr>';
                echo '<td>' . $aRow['Medibijsluiter'] . '</td>';
                echo '</tr>';
            }
            echo '</table>';
        } else {
            echo 'Helaas,geen gegevens bekend';
        }

    } catch
    (PDOException $e) {
        $sMsg = '<p>
    Regelnummer: ' . $e->getLine() . '<br />
    Bestand: ' . $e->getFile() . '<br />
    Foutmelding: ' . $e->getMessage() . '
    </p>';

        trigger_error($sMsg);
    }
    $db = null;
    break;
}
?>
</body>
</html>

但你可以做得更干净。您应该在第二种形式中使用 select 输入 :)