Suma mit Blätterfunktion
ich versuche meiner SUMA eine Blätterfunktion hinzu zu fügen. Das ist mir, bis auf ein Problem in der Query, einigermaßen gut gelungen.
Ausgangsvarianten der beiden Querys im Skript:
Ausgangsvariante der 1. Query (query):
Code: Alles auswählen
$query = mysql_query("SELECT id FROM beauty"); // DB Abfrage
echo "$query";
Code: Alles auswählen
$abfrage = mysql_query("SELECT DISTINCT * FROM beauty LIMIT $start,$datensaetze_pro_seite ");
echo "$abfrage";
Bevor ich die Blätterfunktion in meinem Skript hatte, sah meine Query wie folgt aus:
QUERY OHNE BLÄTTERFUNKTION
Code: Alles auswählen
// Vars
$suchwort = (isset($_POST['suche']) AND $_POST['suche'] != 'Produktfinder') ? trim($_POST['suche']) : '';
$marke = isset($_POST['hersteller']) ? trim($_POST['hersteller']) : '';
// Querey
$sql = "SELECT * FROM beauty WHERE";
if ($suchwort) $sql .= " MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
if ($marke)
{
if ($suchwort) $sql .= "AND";
$sql .= " Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
// if sucheingabe
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
Seit dem ich jetzt aber meine Blätterfunktion drinnen habe, geht das nicht mehr, wie man das anhand der Ausgangs-Querys (siehe oben Ausgangsvariante 1+2) sehen kann. In anderen Worten: "Die Suchfunktion greift nicht mehr".
Um dieses Problem zu lösen, habe ich - als Anfänger versteht sich - drei mir logisch-mögliche Varianten der 1.Query ausprobiert und jedes Mal ein $echo "$var"; zum betrachten der Query hinzugefügt. Bei den Ausgangs-Querys (siehe oben Ausgangsvariante 1+2)
erhalte ich übrigens jeweils als $echo "$var"; folgende 2 Query-Ausgaben:
Resource id #3
Resource id #4
1. Variante (Versuch):
Hier habe ich versucht, die erste Query ohne Blätterfunktion dem Skript der Blätterfunktion anzupassen, da mir diese am logischsten und einfachsten erschien.
Jedoch liefert diese Variante folgendes Ergebnis, wenn ich jetzt eine Sucheingabe ins Textfeld tippe und oder gleichzeitig eine Marke aus dem Sprungmenü für meine Suche auswähle (Reihenfolge der Sucheingabe egal):
Es erscheint meine Tabelle mit den ersten 15 Einträgen (Datensätze), die jedoch NICHT den Suchkriterien entsprechen. Es handelt sich hierbei um die ersten 15 Datensätze meiner DB. D. h. also, dass die Sucheingaben nicht berücksichtigt wird, obwohl mir echo "$query"; meiner Meinung nach korrekt angezeigt wird. Zudem verschwinden alle Sitelinks der Blätterfunktion. Und die Zahlen bei Seite 1 von 0 sind auch nicht mehr korrekt.
Oberhalb der Tabelle erscheinen mir 3 Zeilen wie folgt:
1. Zeile:
SELECT * FROM test WHERE MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('schuhe')AND Marke LIKE '%adidas%'
=> Query: hier scheint doch alles in Ordnung zu sein, oder täusche ich mich da???
2. Zeile:
Warning: mysql_num_rows() expects parameter 1 to be resource, string given in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext5.php on line 99
=> LINE 99 sieht bei mir im Skript so aus:
Code: Alles auswählen
$total = mysql_num_rows($query); // liefert die Anzahl der Datensaetze der Abfrage
Code: Alles auswählen
echo "Ihre Sucheingabe <strong>" . mysql_real_escape_string($suchwort) . " " . mysql_real_escape_string($marke) . "</strong>";
$anzahl = mysql_num_rows($abfrage);
echo " ergab" . mysql_real_escape_string($anzahl) . " Ergebnisse.";
3. Zeile:
Resource id #4
=> Query: wird durch echo "$abfrage"; ausgegeben.
Wenn ich keine Sucheingaben mache, erhalte ich eine Fehlermeldung für die Syntax at LINE 1
1.Query-Variante (Versuch):
Code: Alles auswählen
//----------------------VARS----------------------------VARS-------------------------------------VARS------------------------------
$suchwort = (isset($_POST['suche']) AND $_POST['suche'] != 'Produktfinder') ? trim($_POST['suche']) : '';
$marke = isset($_POST['hersteller']) ? trim($_POST['hersteller']) : '';
//------------------------------BLÄTTERFUNKTION---START-----------------------------BLÄTTERFUNKTION----START-------------------------BLÄTTERFUNKTION---START---------------------BLÄTTERFUNKTION---START--------------
// ------------------------------1.ABFRAGE---------------------------------1.ABFRAGE-----------------1.ABFRAGE------
$query = "SELECT * FROM beauty WHERE";
if ($suchwort) $query .= " MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
if ($marke)
{
if ($suchwort) $query .= "AND";
$query .= " Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
echo "$query";
// if sucheingabe
$db_erg = mysql_query( $query );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
2. Variante (Versuch):
Als zweite Variante habe ich eine weitere Zerteilung des Query probiert und erhalte bei jeder Form der Sucheingabe folgende Fehlermeldung:
Marke LIKE '%adidas%'Ungültige Abfrage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Marke LIKE '%adidas%'' at line 1
Wenn ich keine Sucheingaben mache und einfach nur so auf OK klicke, erhalte ich selbiges Ergebnis, wie in Versuchs-Variante 1 geschildert.
2.Query-Variante (Versuch):
Code: Alles auswählen
$query = "SELECT * FROM beauty WHERE id <> 0";
if ($suchwort) {
$query .= " MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
}
if ($marke) {
$query = " Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
echo "$query";
// if sucheingabe
$db_erg = mysql_query( $query );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
Hier erhalte ich genau das gleiche Ergebnis wie bei meinem 1. Query-Versuch. Nur das mein echo "$query"; halt so aussieht:
SELECT * FROM beauty.
3.Query-Variante (Versuch):
Code: Alles auswählen
$query = "SELECT * FROM beauty";
$where = "WHERE 1=1";
if (!empty($marke)) {
$where .= " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
if (!empty($suchwort) && $suchwort != 'Produktfinder') {
$where .= " AND MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
}
echo "$query";
// if sucheingabe
$db_erg = mysql_query( $query );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
Wenn keines Dieser Varianten zutrifft, wäre ich für neue weitere Lösungsvorschläge sehr Dankbar.
@ALL...BIG THX 4 HLP...