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

1

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

К проекту следует обращаться с помощью 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;
?>
  • 0
    LIKE %:searchterm% и drop% из bindValue
  • 0
    это никогда не произойдет, if(isset($_POST['search'])){...} не соответствует методу, который вы используете в своей форме. Тогда ваша OR nationality "); является неполной.
Показать ещё 2 комментария
Теги:
post
search
pdo
postback

3 ответа

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

Это ниже, похоже, не подходит мне, используя 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

В хороших практиках используйте POST для отправки параметров, когда пользователь ОТПРАВИТСЯ на сервер, который будет изменять данные на сервере (хранить в db для примера или отправлять электронную почту). Используйте GET, когда пользователь RETRIEVE что-то с сервера, чтобы читать данные (запрос a db). Поэтому предпочитайте ПОЛУЧИТЬ здесь.

Чтобы решить вашу проблему, просто приложите весь код, который обрабатывает исследование, в разделе "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;
 }
?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню