Как передать значение select для формирования действия, используя PHP? - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь сделать простой поиск по Википедии, где я могу ввести то, что я хочу найти, и выбрать, где я могу выбрать язык. Я пытаюсь получить значение select для возможности поиска на разных языках, поэтому я просто заменяю строку языка в URL-адресе wikipedia.org

(например, если я выбираю французский в выбранном выпадающий список должен перенаправить меня на fr.wikipedia.org, и если я выберу Engli sh, он перенаправит меня на en.wikipedia.org)

Вот что я пробовал до сих пор:

<form action="https://<?php $_POST["language"] ?>.wikipedia.org/w/index.php">
  <input name="search" type="text" />
  <select name="language">
    <option value="en">English</option>
    <option value="fr">French</option>
  </select>
</form>

Теперь при отправке я получаю этот URL: https://.wikipedia.org/w/index.php?search=cat

Как передать значение select в действие формы, чтобы я мог добавить его в начале URL-адреса?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Причина, по которой ваш текущий скрипт не работает, заключается в том, что PHP обрабатывается при загрузке страницы, а не после отправки формы. При первом обращении go к этой странице $_POST['language'] не устанавливается, поэтому для действия формы устанавливается значение https://.wikipedia.org/w/index.php. Затем, если вы отправите форму (get), вы получите https://.wikipedia.org/w/index.php?search=cat&language=en.

Вместо этого вам нужно будет обработать отправку формы на своей странице, а затем перенаправить в Википедию. По умолчанию, когда вы отправляете form (с методом по умолчанию get ), вы попадаете на страницу типа /index.php?search=cat&language=en. Так что теперь вы можете прочитать эти $_GET параметры, чтобы создать URL для перенаправления.

<?php
    if (isset($_GET) && count($_GET)) {
        $language = $_GET["language"];
        $search = $_GET["search"];
        $action = "https://".$language.".wikipedia.org/w/index.php?search=".$search;
        header('Location: '.$action);
    }
?>

<form>
  <input name="search" type="text"/>
  <select name="language">
    <option value="en">English</option>
    <option value="fr">French</option>
  </select>
</form>

Другой способ - установить <form method="post">, а затем в PHP использовать $_POST, например:

if ($_POST) {
    $language = $_POST["language"];
    $search = $_POST["search"];
    $action = "https://".$language.".wikipedia.org/w/index.php?search=".$search;
    header('Location: '.$action);
}
1 голос
/ 30 апреля 2020

JS сделает это намного проще, чем PHP.

РЕДАКТИРОВАТЬ: Это только для вашего конкретного c использования. Если вы хотите более общий способ сделать это, используя PHP вместо javascript, посмотрите на ответ @ WOUNDEDStevenJones

<input id="srch" type="text" />
  <select id="lang" name="language">
    <option value="en">English</option>
    <option value="fr">French</option>
  </select>
  <button onclick="search()">Search!</button>

  <script>
      function search() {
          var term =document.getElementById("srch").value;
          var lang = document.getElementById("lang").value;
                    var link = "https://"+lang+".wikipedia.org/wiki/"+term;
                    location.replace(link);
      }
  </script>
...