Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Suma mit Blätterfunktion

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 11.02.2010, 10:54

Hi Abakus-Leutz,

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";
Ausgangsvariante der 2. Query (abfrage):

Code: Alles auswählen

$abfrage = mysql_query("SELECT DISTINCT * FROM beauty LIMIT $start,$datensaetze_pro_seite "); 
echo "$abfrage";
Wenn beide Querys - siehe oben - so im Skript stehen bleiben, wird mir meine Tabelle wunderbar mit all ihrem Inhalt angezeigt. Die Blätterfunktion scheint ihre Aufgabe gut zu erfüllen und ich kann einwandfrei durch meine Tabelle hin und her blättern.

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());
}
Mit dieser Query - noch ohne Blätterfunktion versteht sich - konnte ich einwandfrei...und mich zufrieden stellend...meine Tabelle durchstöbern.

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
...und diese Zeilen befindet sich ebenfalls in meinem Skript...

Code: Alles auswählen

echo "Ihre Sucheingabe <strong>" . mysql_real_escape_string&#40;$suchwort&#41; . " " . mysql_real_escape_string&#40;$marke&#41; . "</strong>";
$anzahl = mysql_num_rows&#40;$abfrage&#41;;
echo " ergab" . mysql_real_escape_string&#40;$anzahl&#41; . " Ergebnisse.";
...wo ich glaube, dass das WARNING hierdurch verursacht wird. Liege ich da richtig???...wenn ja, WIE kann ich das lösen???

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 = &#40;isset&#40;$_POST&#91;'suche'&#93;&#41; AND $_POST&#91;'suche'&#93; != 'Produktfinder'&#41; ? trim&#40;$_POST&#91;'suche'&#93;&#41; &#58; '';
$marke = isset&#40;$_POST&#91;'hersteller'&#93;&#41; ? trim&#40;$_POST&#91;'hersteller'&#93;&#41; &#58; '';
//------------------------------BLÄTTERFUNKTION---START-----------------------------BLÄTTERFUNKTION----START-------------------------BLÄTTERFUNKTION---START---------------------BLÄTTERFUNKTION---START--------------
// ------------------------------1.ABFRAGE---------------------------------1.ABFRAGE-----------------1.ABFRAGE------
$query = "SELECT * FROM beauty WHERE";

if &#40;$suchwort&#41; $query .= " MATCH &#40;Bezeichnung, Beschreibung, Marke&#41;  AGAINST&#40;'" . mysql_real_escape_string&#40;$suchwort&#41; . "'&#41;";

if &#40;$marke&#41; 
&#123;
if &#40;$suchwort&#41; $query .= "AND";
$query .= " Marke LIKE '%" . mysql_real_escape_string&#40;$marke&#41; . "%'";
&#125;

echo "$query";


// if sucheingabe
$db_erg = mysql_query&#40; $query &#41;;
if &#40; ! $db_erg &#41;
&#123;
die&#40;'Ungültige Abfrage&#58; ' . mysql_error&#40;&#41;&#41;;
&#125;

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 &#40;$suchwort&#41; &#123; 
$query .= " MATCH &#40;Bezeichnung, Beschreibung, Marke&#41;  AGAINST&#40;'" . mysql_real_escape_string&#40;$suchwort&#41; . "'&#41;"; 
&#125; 

if &#40;$marke&#41; &#123; 
$query = " Marke LIKE '%" . mysql_real_escape_string&#40;$marke&#41; . "%'";
&#125;



echo "$query";



// if sucheingabe
$db_erg = mysql_query&#40; $query &#41;;
if &#40; ! $db_erg &#41;
&#123;
die&#40;'Ungültige Abfrage&#58; ' . mysql_error&#40;&#41;&#41;;
&#125;
3. Variante (Versuch):
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 &#40;!empty&#40;$marke&#41;&#41; &#123;
   $where .= " AND Marke LIKE '%" . mysql_real_escape_string&#40;$marke&#41; . "%'";
&#125;

if &#40;!empty&#40;$suchwort&#41; && $suchwort != 'Produktfinder'&#41; &#123;
   $where .= " AND MATCH &#40;Bezeichnung, Beschreibung, Marke&#41;  AGAINST&#40;'" . mysql_real_escape_string&#40;$suchwort&#41; . "'&#41;";
&#125;  



echo "$query";



// if sucheingabe
$db_erg = mysql_query&#40; $query &#41;;
if &#40; ! $db_erg &#41;
&#123;
die&#40;'Ungültige Abfrage&#58; ' . mysql_error&#40;&#41;&#41;;
&#125;
Welche dieser Varianten ist vom Ansatz her die richtige, um eine Suma mit Blätterfunktion zu realisieren?

Wenn keines Dieser Varianten zutrifft, wäre ich für neue weitere Lösungsvorschläge sehr Dankbar.

@ALL...BIG THX 4 HLP...