Ajax Suche ohne "Hilfs-Php-Datei"
Hallo,
ich bin gerade dabei etwas mit Ajax rum zu spielen.
Es geht um eine simple Textsuche + Mysql.
Also: Liste mit Namen, wenn der USer "Mu" eingibt, sollen alle Namen mit MU beginnend angezeigt werden.
Der Ansatz:
mit der Hilfs-PHP-Datei
funktioniert soweit grundsätzlich. Allerdings habe ich noch einige Sahnehäubchen, welche ich umsetzen möchte:
Also bei Laden erstmal die Funktion ausführen und den sql-Query ohne where ausführen, sobald eine Eingabe erfolgt, denselben Query mit where name like 'suchebegriff%'. Leider habe ich von js wenig und von Ajax gar keine Ahnung.
Irgendeine Idee?
mfG
tsunami
ich bin gerade dabei etwas mit Ajax rum zu spielen.
Es geht um eine simple Textsuche + Mysql.
Also: Liste mit Namen, wenn der USer "Mu" eingibt, sollen alle Namen mit MU beginnend angezeigt werden.
Der Ansatz:
<html>
<head>
<title>Ajax Suche</title>
<script type="text/javascript">
function searchFor(suchbegriff){
var xmlHttp = null;
if (typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
if (!xmlHttp) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = null;
}
}
}
if (xmlHttp) {
var url = "Neu1.php";
var params = "suchbegriff="+suchbegriff;
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
}
};
xmlHttp.send(params);
}
}
</script>
</head>
<body>
xxx <input type="text" onKeyUp="(this.value.length >= 0) ? searchFor(this.value) : '';">
<div id="ergebnis"></div>
</body>
</html>
<?php include("includes/bufo-demo.php");
$suchbegriff=$_POST["suchbegriff"];
// $suchbegriff="Ahm";
$sql_suche=sprintf("select handelspartner.name, handelspartner.firmenname, handelspartner.vorname from handelspartner where name like '%s%%' or firmenname like '%s%%'",mysqli_real_escape_string($bufo_conn,$suchbegriff),mysqli_real_escape_string($bufo_conn,$suchbegriff));
echo $sql_suche;
$mssuche=mysqli_query($bufo_conn,$sql_suche);
while($ausgabe_suche=mysqli_fetch_assoc($mssuche))
{
if($ausgabe_suche['firmenname']=='')
echo "<br/>Vorname: ".$ausgabe_suche['vorname']." Nachname: ".$ausgabe_suche['name']."<br/>";
else
echo "<br/>Fimenname: ".$ausgabe_suche['firmenname']." Vorname: ".$ausgabe_suche['vorname']." Nachname: ".$ausgabe_suche['name']."<br/>";
}
?>
- Wie bekomme ich es ohen die Hilfs-PHP hin? Als Ziel die eigene Datei funktioniert zwar, allerdings zeigt er mir das Formular dann doppelt an. EIn um das Formular half nicht.
if(isset($_POST['suchbegriff']))
- Ich möchte beim Laden, dass allle Elemente angezeigt werden. Und dann soll gefiltert werden, sobald eine EIngabe erfolgt.
if(noKeyPressed) onload function... else (onKeyUp function....
Irgendeine Idee?
mfG
tsunami
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 599335
Url: https://administrator.de/forum/ajax-suche-ohne-hilfs-php-datei-599335.html
Ausgedruckt am: 11.04.2025 um 02:04 Uhr
16 Kommentare
Neuester Kommentar
Hallo,
um dir die 2te Datei zu ersparen musst du nur deine Hauptdatei als php datei Speichern und den Teil der 2ten Datei hinzufügen, ich würde daraus eine einfache function machen die ich dann mit den Parametern calle, also so im groben:
Was natürlich wiedereinmal nicht beachted wird ist die Gefahr einer SQL Injection <-- hierzu gibt es genügend threads
um dir die 2te Datei zu ersparen musst du nur deine Hauptdatei als php datei Speichern und den Teil der 2ten Datei hinzufügen, ich würde daraus eine einfache function machen die ich dann mit den Parametern calle, also so im groben:
?php
if($_POST['suchbegriff']){
// Suche mit suchbegriff <-- deine 2te Datei
} else {
// Suche ohne suchbegriff <-- deine 2te Datei
?>
HTML Zeugs mit SuchForm
<?php
}
?>
Was natürlich wiedereinmal nicht beachted wird ist die Gefahr einer SQL Injection <-- hierzu gibt es genügend threads
Hallo,
ich hab dir den Aufbau bereits oben Skizziert, in deinem Ajax Call machst du dann einfach einen Aufruf auf dich selbst.
Oh das mysqli_real_escape ist mir entfleucht, aber schöner und zukunftssicherer wäre es auf PDO umzusteigen.
ich hab dir den Aufbau bereits oben Skizziert, in deinem Ajax Call machst du dann einfach einen Aufruf auf dich selbst.
suche.php
<?php
if(isset($_POST['suchbegriff'])){
echo suche($_POST['suchbegriff']);
} else {
suche();
?>
HTML Code mit Form Ajax Call auf suche.php
<?php
}
function suche(begriff){
//inhalt deiner externen Datei
return ergebniss;
}
Oh das mysqli_real_escape ist mir entfleucht, aber schöner und zukunftssicherer wäre es auf PDO umzusteigen.
Hallo,
das ist klar, du gibst dir ja unten das Ergebniss aus deinem Query aus, weiters sehe ich keine abschliesende Klammer für das else...
Was mir auch auffällt, du prüfst ja nur ob $_POST['suchbegriff'] gesetzt ist, du prüfst nicht, ob diese auch etwas beinhaltet.
Alles in allem ist der code nicht vollständig, ich versteh auch nicht warum die du deine qry im If und im Else Zweig veränderst.
das ist klar, du gibst dir ja unten das Ergebniss aus deinem Query aus, weiters sehe ich keine abschliesende Klammer für das else...
Was mir auch auffällt, du prüfst ja nur ob $_POST['suchbegriff'] gesetzt ist, du prüfst nicht, ob diese auch etwas beinhaltet.
Alles in allem ist der code nicht vollständig, ich versteh auch nicht warum die du deine qry im If und im Else Zweig veränderst.
Hallo,
so ich das jetzt mal ein bisserl aufgeräumt und ein html konstrukt rund herum gemacht, bei mir wird der Input nur einmal dargestellt und bei Eingabe des Suchbegriffs wird mir das Ergebniss angezeigt.
Was natürlich wichitg ist, dass deine php Datei genau so heist, wie du Sie in der searchFor unter var url genannt hast.
so ich das jetzt mal ein bisserl aufgeräumt und ein html konstrukt rund herum gemacht, bei mir wird der Input nur einmal dargestellt und bei Eingabe des Suchbegriffs wird mir das Ergebniss angezeigt.
Was natürlich wichitg ist, dass deine php Datei genau so heist, wie du Sie in der searchFor unter var url genannt hast.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Title</title>
<script type="text/javascript">
function searchFor(suchbegriff){
var xmlHttp = null;
// Mozilla, Opera, Safari sowie Internet Explorer 7
if (typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
if (!xmlHttp) {
// Internet Explorer 6 und älter
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = null;
}
}
}
// Wenn das Objekt erfolgreich erzeugt wurde
if (xmlHttp) {
var url = "suche.php";
var params = "suchbegriff="+suchbegriff;
xmlHttp.open("POST", url, true);
//Headerinformationen für den POST Request
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
}
};
xmlHttp.send(params);
}
}
</script>
</head>
<body>
<form name="form" method="post">
<?php
$debkred=1;
$dir="asc";
$sort="sortiername";
echo "peng".$_POST['suchbegriff'];
if(isset($_POST['suchbegriff']) && $_POST['suchbegriff'] !== '') {
// Suche mit Begriff
}
else
{
// Leer Suche
?>
<br /><h2 class='ueberschrift'><u>Handelspartner</u></h2>
<input type="text" class='suchedesign' placeholder="Nachname oder Firmenname suchen" onKeyUp="(this.value.length >= 0) ? searchFor(this.value) : '';">
<div id="ergebnis"></div>
<?php
// Anzeige des QueryResults
?>
<br>
<?php
}
?>
</body>
</html>