как отправить данные на другую страницу с помощью тега формы?

#php #html #mysql #database #forms

#php #HTML #mysql #База данных #формы

Вопрос:

Я много пытался перенести все данные моей базы данных на другую страницу PHP и в тег form, но у меня не получилось этого сделать Я легко отображаю все данные в теге option, но я не могу отправить их в тег action в теге form вот код.

 <?php require "pages/header.php" ?>
<?php
//sesssion_start();

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "apple";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
#include "navbar.php";
$sql = "SELECT * FROM `table_3`";
$result = $conn->query($sql);

?>
    <link rel="canonical" href="https://getbootstrap.com/docs/4.3/examples/sign-in/">

<!-- Bootstrap core CSS -->
<link href="https://getbootstrap.com/docs/4.3/dist/css/bootstrap.min.css" rel="stylesheet"
    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

        <link href="https://getbootstrap.com/docs/4.3/examples/sign-in/signin.css" rel="stylesheet">
<select id="role"  name="role" class="form-signin" class="form-control">
        <?php
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
       #echo $row['model'];
       #echo "<option value="'.$row["model"].'">";

       #echo "<option value='".$row["model"]."' href='".$row["model"]."'>";
      # echo "<a href='".$row["model"]."'>";
       #echo $row['model'];
       #echo "</a>";
      # echo "</option>";?>
      <form action="repaired.php?<?php $row['model'] ?> enctype=multipart/formdata">
      <select id="role"  name="role" class="form-signin" class="form-control">
      <option value='<?php $row['model'] ?>' href='<?php $row['model'] ?>'>
      </option>
      </select> 
      </form>
      <?php

    }
} else {
    echo "0 results";
}
#$conn->close();
?>
        </select>
  

Комментарии:

1. Во-первых, вы используете form внутри вашего тега select, что совершенно неправильно, во-вторых, нет способа отправить вашу форму, поэтому вы не можете опубликовать свои данные на другой странице php

2. Итак, вы пытаетесь передать данные с текущей страницы на repaired.php ? Вы получаете какую-то ошибку, когда пытаетесь это сделать? Кроме того, посмотрите комментарий @MuhammadShareyar — Ваша разметка повсюду. Ваш <link> должен быть в вашей <head> части, и <select> элемент ПЕРЕД вашим while циклом тоже очень неуместен

Ответ №1:

Мне не совсем ясно, в чем конкретно заключается ваша проблема. Кажется, вы пытаетесь передать данные с текущей страницы (кодом которой вы поделились) repaired.php .

Поскольку опубликованный вами код (извините меня за прямоту) представляет собой беспорядок, я попытаюсь добавить к нему некоторую структуру (я, очевидно, не собираюсь его очень тщательно очищать, хотя, это будет ваша работа).

Во-первых, все ваши <link> теги должны быть где-то внутри вашей <head> части… Я бы предположил, что на вашем веб-сайте это было бы в header.php

pages/header.php

 <!doctype html>
<html>
  <head>
    <title>Your App</title>

    <!-- Place your <link> elements here -->
    <link rel="canonical" href="https://getbootstrap.com/docs/4.3/examples/sign-in/">

    <link href="https://getbootstrap.com/docs/4.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <link href="https://getbootstrap.com/docs/4.3/examples/sign-in/signin.css" rel="stylesheet">
  </head>
  <body>
    <!-- Body part begins here
         Place for header elements and navigation here, I guess -->
  

Затем файл, к которому вы подключаетесь, и пытаетесь отправить его через вашу форму, я просто вызываю его action.php здесь. Поскольку я не знаю, что должно отображаться в вашем <option> элементе, я просто использовал то же самое, что и для value атрибута. Обратите внимание, там, где находится while цикл, он находится ВНУТРИ вашего <select> элемента (который сам находится ВНУТРИ вашего <form> элемента), поскольку вам нужен только ОДИН из них. Однако у вас будет несколько <option> элементов, так что это те, которые находятся внутри вашего цикла. Кроме того, я разместил кнопку отправки в конце формы, которая позволит нам отправить форму.

action.php

 <?php
include "pages/header.php";

// Database variables and connection
// ...

// Data fetching and displaying
$sql = "SELECT * FROM `table_3`";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  echo '<form action="repaired.php" method="post">';
  echo '  <select id="role"  name="role" class="form-signin" class="form-control">';

  while ($row = $result->fetch_assoc()) {
    echo '    <option value="' . $row['model'] . '">' . $row['model'] . '</option>';
  }

  echo '  </select>';
  echo '  <button type="submit" name="form_send">Send</button>';
  echo '</form>';
} else {
  echo 'No data found';
}
  

Теперь в вашем repaired.php файле вам, очевидно, нужно извлечь размещенные данные. Поскольку я не знаю, что вы хотите сделать со своими данными, я могу просто опубликовать идею того, что вы могли бы сделать. Если вы отправляете форму с помощью post метода (см. Код выше, method="post" ), вы можете получить доступ к данным вашей формы с помощью $_POST суперглобального. Это массив, в котором хранятся ваши опубликованные данные… name Атрибут ваших элементов формы будет ключом для доступа к вашим данным. Итак, если я размещаю форму с одним вводом, и у ввода есть атрибут name="first_name" , я могу получить доступ к его значению с помощью $_POST['first_name'] на целевой странице ( action вашего <form> атрибута). В вашем случае у нас есть <select> with name="role" , поэтому вы должны иметь к нему доступ, как описано:

repaired.php

 <?php
/* 
   First we check, if the submit button was pressed... If not,
   we echo an error message, if yes, we can proceed to access the posted data
 */
if (!isset($_POST['form_send'])) {
  echo 'No data submitted';
} else {
  echo $_POST['role'];
}
  

Мой ответ, если он даже решает вашу проблему, далек от совершенства и не протестирован, поэтому я не знаю, есть ли в нем какие-либо ошибки. Я предлагаю вам продолжать практиковаться и расширять свои знания. Очень хорошая идея — научиться отделять ваш логический код от вашей разметки. Я рекомендую вам ознакомиться с MVC или MOVE или другими архитектурными шаблонами, или, если вы хотите сначала пойти более простым путем, ознакомьтесь с движками шаблонов (такими как Twig). Кроме того, я предлагаю вам расширить свои знания по основам HTML (ИМХО, MDN — хорошее место для этого), поскольку мне кажется, что вы еще не совсем освоили их, судя по тому, как вы структурировали свои <form> части.

Я все еще надеюсь, что мой ответ помог вам вернуться на правильный путь