Опубликовать результаты на той же странице, что и форма поиска

Я делаю проект и мне нужна помощь, пожалуйста 🙂 (полный код внизу)

Проект должен быть доступен с помощью PDO.
Мне нужно, чтобы результаты поиска появлялись на той же странице, на которой был введен поиск.

Это ниже не кажется мне правильным, используя GET вместо POST .. это правильно?
Это работает, но мне нужно удалить / скрыть этот бит кода, который появляется при первой загрузке моей страницы (index.php).

if(!isset($_GET['search']))
{   echo "Error, Please go back.";  exit;}

Как я могу это сделать?

Также моя вторая проблема — я не могу заставить форму поиска искать более одного поля в таблице. Это просто не позволит мне. Я не могу использовать этот бит кода либо

%'.$searchterm.'%

поскольку это не даст мне никакой обратной связи от поиска. Так что я использую

:searchterm

в

$searchterm = $_GET['search'];
$stmt = $conn->prepare("SELECT * FROM boxer WHERE weightclass LIKE :searchterm OR nationality ");
$stmt->bindValue(':searchterm','%'.$searchterm.'%');
$stmt->execute();

Вот мой полный код:

<?php

$servername = 'localhost';
$username = "root";
$password = "";
$dbname = "u1360138";

<?php
if(isset($_POST['search'])){
echo 'Search';
}
?>


<!-- Search facility 1 -->
<form action="index.php" method="get">
<label for="search">Enter a weight class. Need to be more than one searchs which wont work</label>
<input type="text" name="search" id="search">
<input type="submit" value="Search">
</form>
<?php
// DB Connection
try {$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);}
catch(PDOException $e)
{echo "Error conntecting to the DB: " . $e->getMessage();}
if(!isset($_GET['search']))
{   echo "Error, Please go back.";  exit;}
// DB Connection


$searchterm = $_GET['search'];
$stmt = $conn->prepare("SELECT * FROM boxer WHERE weightclass LIKE :searchterm");
$stmt->bindValue(':searchterm','%'.$searchterm.'%');
$stmt->execute();
// loop displays loop
while ($boxer = $stmt->fetch(PDO::FETCH_OBJ))
{ echo "<ul>";
echo "<a href='details.php?idboxer=".$boxer->idboxer."'>";
echo "<li>".$boxer->firstname." ".$boxer->lastname."</li>";
echo "</a>";
echo "</ul>"; }
$conn=NULL;
?>

1

Решение

В соответствии с рекомендациями используйте POST для отправки параметров, когда пользователь отправляет на сервер что-либо, что изменит данные на сервере (например, сохраните в db или отправьте электронное письмо). Используйте GET, когда пользователь ПОЛУЧИТ что-то с сервера, чтобы прочитать данные (запросите БД). Так что предпочитайте GET здесь.

Чтобы решить вашу проблему, просто включите весь код, который обрабатывает исследование, в раздел «if (isset ($ _ GET [‘search’])) {}», как показано ниже:

<?php

$servername = 'localhost';
$username = "root";
$password = "";
$dbname = "u1360138";

<?php
if(isset($_GET['search'])){
echo 'Search';
}
?>


<!-- Search facility 1 -->
<form action="index.php" method="get">
<label for="search">Enter a weight class. Need to be more than one searchs which wont work</label>
<input type="text" name="search" id="search">
<input type="submit" value="Search">
</form>
<?php

if(isset($_GET['search'])){
// DB Connection
try {$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);}
catch(PDOException $e)
{echo "Error conntecting to the DB: " . $e->getMessage();}
// DB Connection


$searchterm = $_GET['search'];
$stmt = $conn->prepare("SELECT * FROM boxer WHERE weightclass LIKE :searchterm");
$stmt->bindValue(':searchterm','%'.$searchterm.'%');
$stmt->execute();
// loop displays loop
while ($boxer = $stmt->fetch(PDO::FETCH_OBJ))
{
echo "<ul>";
echo "<a href='details.php?idboxer=".$boxer->idboxer."'>";
echo "<li>".$boxer->firstname." ".$boxer->lastname."</li>";
echo "</a>";
echo "</ul>";
}
$conn=NULL;
}
?>
0

Другие решения

Это ниже не кажется мне правильным, используя GET вместо POST .. это правильно? Это работает, но мне нужно удалить / скрыть этот бит кода, который появляется при первой загрузке моей страницы (index.php).

Это зависит от того, когда вы хотите использовать GET или же POST, POST более безопасен, поэтому для отправки формы я всегда использую POST, В этом случае вы можете оставить этот код:

if(isset($_POST['search'])){
echo 'Search';
}

Вам нужно изменить форму action введите в POST:

<form action="index.php" method="post">
....

Затем добавьте конец, который вам нужен, чтобы получить значение поиска из POST вместо GETпотому что мы изменили action тип.

$searchterm = $_POST['search'];
0

Так что я понял это и

<!-- HTML FORM SEARCH BAR -->
<form action="index.php" method="post">
<label for="enteredterm">Enter a Weight-class or a Nationality:</label>
<input type="text" name="enteredterm">
<input type="submit" name="search">
</form>
<!-- HTML FORM SEARCH BAR -->

if(isset($_POST['search'])){
$enteredterm = $_POST['enteredterm'];

if ($enteredterm ===""){
echo "error, enter something.";
} else {

$stmt = $conn->prepare("SELECT * FROM boxer WHERE weightclass LIKE     :enteredterm OR nationality LIKE :enteredterm or lastname LIKE :enteredterm     ORDER BY year");
$stmt->bindValue(':enteredterm','%'.$enteredterm.'%');
$stmt->execute();
$count= $stmt->rowCount();

echo "You entered ".$enteredterm." and returned ";
if($count <= 1){
echo $count." result.";
}else{
echo $count." results.";
}
// loop displays loop
while ($boxer = $stmt->fetch(PDO::FETCH_OBJ))
{ echo "<ul>";
echo "<a href='details.php?idboxer=".$boxer->idboxer."'>";
echo "<li>".$boxer->firstname." ".$boxer->lastname."</li>";
echo "</a>";
echo "</ul>"; }
0