Suchergebnisse in Modal anzeigen lassen


J0hnny1234

Grünschnabel
Hi,

Ich habe mir mit PHP und eine MYSQL Datenbank eine Suchfunktion gebaut. Bisher stand im <form> teil nur action="search.php" drin und somit werden die Suchergebnisse auf einer extra seite angezeigt. Ich möchte die suchergebnisse allerdings in einem Modal anzeigen lassen. Daher habe ich den action tag jetzt gegen folgendes ausgetauscht: data-toggle="modal" data-target="#smodal"
Dadurch popt mein model, in das ich jetzt den Inhalt der seite "search.php" reinkopiert habe für einen Bruchteil einer sekunde auf und verschwindet sofort wieder.
Wie kann ich das fixen?

Mein code für die Search Bar sieht so aus:
<form data-toggle="modal" data-target="#smodal" method="get">
<input type="text" name="q" id="searchBar" placeholder="" value="Suchen..." maxlength="50" autocomplete="on" onmousedown="active();" onblur="inactive();"><button class="btn buttondefinition button" type="submit" id="searchBtn" role="button"><i class="fa fa-search"></i></button>
</form>

Und das modal so:
<div class="modal" id="smodal">
<div class="modal-dialog">
<div class="modal-content mittig">
<div class="modal-header">
<h2 class="modal-title"> Suchergebnisse</h2>
<button class="close" type="button" data-dismiss="modal">x</button>
</div>
<div class="modal-body">

<?PHP
$conn = mysqli_connect("localhost","root","","search");

if(mysqli_connect_errno()) {
echo "failed to connect: " . mysqli_connect_error();
}
?>
<?PHP
$output = "";

if (isset($_GET["q"]) && $_GET["q"] !=="") {
$searchq = $_GET["q"];

$q = mysqli_query($conn, "SELECT * FROM search WHERE keywords LIKE '%$searchq%' OR title LIKE '%$searchq%' OR description LIKE '%$searchq%'") or die(mysqli_error());
$c = mysqli_num_rows($q);
if($c == 0) {
$output = "Kein Suchergebnis für <b>" .$searchq. "</b>.";
} else {
while ($row = mysqli_fetch_array($q)) {
$id = $row["id"];
$title = $row["title"];
$desc = $row["description"];
$link = $row["link"];

$output .= "<a href=" . $link . ">
<h3>" . $title . "</h3>
<p>" . $desc . "</p>
</a>";
}
}
} else {
header("location: ./");
}
print("$output");
mysqli_close($conn);
?>


</div>
</div>
</div>
</div>

Vielen Dank im Vorraus!
VG Jan
 

J0hnny1234

Grünschnabel
Hi,
Ich werde mich zur Not mit Ajax befassen, aber gibt es keine Möglichkeit das Problem so zu lösen?
Kann man das neu laden irgendwie verhindern, bzw. nur das modal hinzufügen lassen?

VG und vielen Dank
Jan
 

Sempervivum

Erfahrenes Mitglied
Nur das Modal hinzu fügen ist möglich, aber Du brauchst ja auch die Suchergebnisse darin. Und um die zu bekommen, brauchst Du das PHP-Skript und das kannst Du nur aufrufen, indem Du die betr. Seite search.php direkt aufrufst mit den Problemen, die Du hast oder über Ajax.
 

J0hnny1234

Grünschnabel
Gäbe es nicht die Möglichkeit, die Abfrage in die Seite selbst zu integrieren und anschliessend nur das Suchergebnis in einem Modal anzeigen zu lassen?
 

Sempervivum

Erfahrenes Mitglied
Im Prinzip schon, aber dann musst Du beim Laden der Seite das Modal öffnen, denn der Klick ist ja vorbei. Wie ich sehe, verwendest Du Bootstrap und damit habe ich leider keine Kenntnisse und kann dich nicht beraten. Eine Möglichkeit wäre, einen Klick auf den Öffnen-Button zu simulieren, ist mit jQuery kein Problem. Aber wahrscheinlich wird das unübersichtlicher als wenn Du es mit Ajax machst.