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...

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 11.02.2010, 11:20

Also irgendwie verstehe ich da nur Bahnhof. Ist für mich zu viel auf einmal...
SELECT * FROM test WHERE MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('schuhe')AND Marke LIKE '%adidas%'
Die mag so funktionieren, aber genau gesehen fehlt zwischen "('schuhe')AND" nach der Klammer ein Leerzeichen
$total = mysql_num_rows($query); // liefert die Anzahl der Datensaetze der Abfrage
mysql_num_rows() expects parameter 1 to be resource, string given
Welchen Wert hat denn $query. Das müsste eigentlich eine Resourcen-Kennung sein, so wie oben die beiden Beispiele #3 und #4, aber bei Dir scheint es da ein String zu sein. Steht zumindest so in der Meldung. Allerdings kennt hier keiner die Zeilen vor 99
..wo ich glaube, dass das WARNING hierdurch verursacht wird. Liege ich da richtig???...wenn ja, WIE kann ich das lösen???
Glaube ich nicht, da in den drei Zeilen Code $query gar nicht vorkommt.
Wenn ich keine Sucheingaben mache, erhalte ich eine Fehlermeldung für die Syntax at LINE 1
"//----------------------VARS----------------------------VARS-------------------------------------"
Könnte als Kommentar gewertet werden, bin mir da aber nicht sicher

Was soll das sein?
VARS------------------------------
Das ist weder PHP-Code noch ein Kommentar

Andererseits
Wenn ich keine Sucheingaben mache
Wenn keine Suchwort und keine Marke, dann ist $query einfach nur "SELECT * FROM beauty WHERE" und somit würde die fehlschlagen. Where ohne Bedingung.

Und zum Thema oben mit dem mysql_num_rows. Bei der Funktion darfst Du nicht diese $query übergeben. Ist keine Kennung sondern ein String. Die Kennung wäre in dem Fall weiter unten das "$db_erg". Aber wie gesagt, ohne den ganzen Code und vor allem Zeilenzahlen (Reihenfolge) ist das mehr oder weniger einfache Rateversuche.


So, aber nun höre ich mal auf, ich steigt da nicht mehr durch mit Abfrage 1/2, $query, Version 1/2 oben/unten....

Kannst Du nicht mal den ganzen Code posten und vor allem mit Zeilennummern?

Nachtrag:
$query .= " Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
Hieß das zuvor nicht mal $sql? Nun ist es $query. Da hast da ein schönes Durcheinander :wink:

Nachtrag 2:
Rein theoretisch brauchst Du nur an die vorhandene Query (oder wie Du die auch immer nennen magst) am Ende ein Limit von,bis setzen. Mehr ist die Blätterfunktion in Bezug auf MySQL eigentlich nicht. Die Berechnungen wo von beginnt und bis aufhört wird mit PHP gemacht.

Nachtrag3:
Dein Problem, wenn es weder ein Suchwort noch eine Marke gibt und daher alles abgefragt werden soll

Vier Möglichkeiten der Such-Query:

1. Keine Bedingungen
2. Ein Suchwort
3. Eine Marke
4. Suchwort und Marke

Würde etwas in der Art ergeben (ungetestet):

Code: Alles auswählen

$query = "SELECT * FROM beauty"; // erst mal alles

//prüfen ob Suchwort und/oder Marke
if&#40;$suchwort OR $marke&#41;
&#123;
	// Hier wird auf jeden Fall schon mal das WHERE benötigt
	$query .= " WHERE";
	
	// Suchwort?
	if &#40;$suchwort&#41; $query .= " MATCH &#40;Bezeichnung, Beschreibung, Marke&#41; AGAINST&#40;'" . mysql_real_escape_string&#40;$suchwort&#41; . "'&#41;";
	
	// Marke?
	// Wenn $suchwort, dann mit AND verbinden
	// Wenn !$suchwort, dann direkt anhängen
	if &#40;$marke&#41;
	&#123;
		if &#40;$suchwort&#41; $query .= " AND";
		$query .= " Marke LIKE '%" . mysql_real_escape_string&#40;$marke&#41; . "%'";
	&#125;
&#125;

echo "$query";

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 11.02.2010, 12:44

@Synonym: ja, hast recht...dets zu viel da oben.

Im Grunde genommen, geht es bei meinem Anliegen um eine ganz einfache Sache. Seit dem ich mein Such-Skript um eine Blätterfunktion erweitert habe, funktioniert die Suche nicht mehr. Das liegt mit Sicherheit an der Query.
Das separate Skript für die Blätterfunktion sieht so aus:

Code: Alles auswählen

<?php  

// Datenbankverbindung  
//---------------------------------------------------  
$host = "localhost";     // Adresse des Datenbankservers, meist localhost  
$user = "";             // Ihr MySQL Benutzername  
$pass = "";             // Ihr MySQL Passwort  
$dbase = "";             // Name der Datenbank  

$connection = mysql_connect&#40;"$host" , "$user" , "$pass"&#41;   
              OR die &#40;"Keine Verbindung zu der Datenbank moeglich."&#41;;  
$db = mysql_select_db&#40;$dbase , $connection&#41;   
              OR die &#40;"Auswahl der Datenbank nicht moeglich."&#41;;   
//---------------------------------------------------   

$pfad = $_SERVER&#91;'PHP_SELF'&#93;;    // aktuellen Dateipfad ermitteln, wichtig fuer die Links der Seitennavigation 

$query = mysql_query&#40;"SELECT id FROM user"&#41;; // DB Abfragee 

// ------------------------------------------------------------------------ 

$datensaetze_pro_seite = "10";      // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen 
$p = "3";                                // Anzahl der Links die in der Seitenavigation ausgegeben werden 

$total = mysql_num_rows&#40;$query&#41;;                      // liefert die Anzahl der Datensaetze der Abfrage 
$seiten = ceil&#40;$total / $datensaetze_pro_seite&#41;;     // Berechnet die Seitenanzahl insgesamt 

// ------------------------------------------------------------------------ 

if&#40;empty&#40;$_GET&#91;'go'&#93;&#41;&#41;&#123; // korrigieren der aktuellen Seite 

    $go = 1;             // Sofern $go nicht uebergeben wurde 

&#125;elseif&#40;$_GET&#91;'go'&#93; <= 0 || $_GET&#91;'go'&#93; > $seiten&#41;&#123; 

    $go = 1;         // Variable definieren 

&#125;else&#123; // Wenn Obiges nicht zutraf 

    $go = mysql_real_escape_string&#40;$_GET&#91;'go'&#93;&#41;;     // Variable definieren 
&#125; 

$links = array&#40;&#41;; // Linkkette bilden 

// Seite die vor der aktuellen Seite kommt definieren 
if&#40;&#40;$go - $p&#41; < 1&#41;&#123; $davor = $go - 1;  &#125;else &#123; $davor = $p; &#125;             

// Seite die nach der aktuellen Seite kommt definieren 
if&#40;&#40;$go + $p&#41; > $seiten&#41;&#123; $danach = $seiten - $go; &#125;else&#123; $danach = $p; &#125;    
        
$off = &#40;$go - $davor&#41;; // Variable definieren    
                 
if &#40;$go- $davor > 1&#41;&#123; // Link definieren => Zur Erste Seite springen          
    $first = 1; 
       $links&#91;&#93; = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";       
&#125;       

if&#40;$go != 1&#41;&#123; // Link definieren => eine Seite zurueck blaettern           
    $prev = $go-1; 
    $links&#91;&#93; = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";      
&#125;    
        
        
for&#40;$i = $off; $i <= &#40;$go + $danach&#41;; $i++&#41;&#123; // einzelne Seitenlinks erzeugen 

  if &#40;$i != $go&#41;&#123;  // Link definieren             
   
        $links&#91;&#93; = "<a href=\"$pfad?go=$i\">$i</a>\n"; 
         
  &#125;elseif&#40;$i == $seiten&#41; &#123; // aktuelle Seite, ein Link ist nicht erforderlich              
         
        $links&#91;&#93; = "<span class=\"current\">&#91; $i &#93;</span>\n";   
         
  &#125;elseif&#40;$i == $go&#41;&#123; // aktuelle Seite, ein Link ist nicht erforderlich              
   
        $links&#91;&#93; = "<span class=\"current\">&#91; $i &#93;</span>\n"; 
         
  &#125; // close if $i       
&#125;                 

if&#40;$go != $seiten&#41;&#123; // Link definieren => eine Seite weiter blaettern        
    $next = $go+1; 
    $links&#91;&#93; = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n"; 
&#125;       
     
if&#40;$seiten - $go - $p > 0 &#41;&#123; // Link definieren => Zur letzen Seite springen    
    $last = $seiten;  
    $links&#91;&#93; = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n"; 
&#125;       

$start = &#40;$go-1&#41; * $datensaetze_pro_seite;             // Berechne den Startwert fuer die DB 


$link_string = implode&#40;" ", $links&#41;; // Zusammenfuegen der einzelnen Links zu einem String 

$abfrage = mysql_query&#40;"SELECT ID, Name, Email, DATE_FORMAT&#40;Datum, '%d.%m.%Y'&#41; AS datum FROM user LIMIT $start,$datensaetze_pro_seite "&#41;; 

// Daten ausgeben 
while&#40;$row = mysql_fetch_object&#40;$abfrage&#41;&#41;&#123; 
     
    echo "<p>".$row->ID." - "$row->Name."<br />\n"; 
    echo "Email&#58; ".$row->Email."<br /> \n"; 
    echo "Datum&#58; ".$row->datum."\n </p>"; 

&#125; // close while 

// -------------------------------------- Seitennavigation ausgeben ---------------------------- 
 echo "<div id=\"navigation\">\n"; 

 echo "<span class=\"pages\">Seite $go von $seiten</span>\n"; 

 echo $link_string; // Ausgabe der Seitennavigation 
     
 echo "</div> \n"; 
// -------------------------------------- Seitennavigation ende -------------------------------- 
?>
...und so sah mein Such-Skript aus, wo mit der Suche alles gepasst hat und BEVOR ich mit der Erweiterung der Blätterfunktion begonnen habe. Stoppwortliste etc. folgt noch.

Code: Alles auswählen

<?php

// Error-Reporting
error_reporting&#40;E_ALL&#41;;

//Verbindung zur Datenbank
define &#40; 'MYSQL_HOST', '' &#41;;
define &#40; 'MYSQL_BENUTZER', '' &#41;;
define &#40; 'MYSQL_KENNWORT', '' &#41;;
define &#40; 'MYSQL_DATENBANK', '' &#41;;

$db_link = mysql_connect &#40;MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT&#41;;
$db_sel = mysql_select_db&#40; MYSQL_DATENBANK &#41;
or die&#40;"Auswahl der Datenbank fehlgeschlagen"&#41;;

// 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; '';

// Querey
$sql = "SELECT * FROM beauty WHERE";

if &#40;$suchwort&#41; $sql .= " 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; $sql .= "AND";
$sql .= " Marke LIKE '%" . mysql_real_escape_string&#40;$marke&#41; . "%'";
&#125;

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



// functions & echos
echo "Bei Ihrer Sucheingabe <strong>" . mysql_real_escape_string&#40;$suchwort&#41; . " " . mysql_real_escape_string&#40;$marke&#41; . "</strong>";
$anzahl = mysql_num_rows&#40;$db_erg&#41;;
echo " konnten" . mysql_real_escape_string&#40;$anzahl&#41; . " Ergebnisse</b> gefunden werden.";

// Table
echo '<table border="1" style="border-collapse&#58;collapse">';
while &#40;$zeile = mysql_fetch_array&#40; $db_erg, MYSQL_ASSOC&#41;&#41;
&#123;
echo "<tr class='tabelle'>";
echo "<td class='bild'><img src='". htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
echo "<td class='marke'>". $zeile&#91;'Marke'&#93; . "</td>";
echo "<td class='body'>". $zeile&#91;'Beschreibung'&#93; . "</td>";
echo "<td class='title'>". $zeile&#91;'Bezeichnung'&#93; . "</td>";
echo "<td class='preis'>". $zeile&#91;'Preis'&#93; . " &euro;</td>";
echo "<td class='bestellen'><a href='". htmlspecialchars&#40;$zeile&#91;'Anbieter'&#93;&#41; . " title='zur Bestellung'>Schicken lassen</a></td>";
echo "</tr>";
&#125;
echo "</table>";


mysql_free_result&#40; $db_erg &#41;;
if &#40; $db_link &#41;
&#123;
echo 'Verbindung erfolgreich&#58; ';
echo $db_link;
&#125;
else
&#123;

// hier sollte dann später dem Programmierer eine
// E-Mail mit dem Problem zukommen gelassen werden
die&#40;'keine Verbindung möglich&#58; ' . mysql_error&#40;&#41;&#41;;
&#125;
mysql_close&#40;$db_link &#41;;
?>
Ich habe versucht beide Skripts zusammen zu fügen, also quasi eine Suma mit Blätterfunktion daraus zu machen und seit dem funktioniert die Suche nicht mehr. Das liegt bestimmt an der query!...glaube ich.

Also habe ich sie verändert bzw. dem Skript für die Blätterfunktion angepasst. Im Grunde genommen habe ich versucht, das Suchskript mit dem Skript für die Blätterfunktion zu vereinen.

Und das ganze sieht jetzt so aus:

Code: Alles auswählen

<?php
//-------------------Error-Reporting--------------------------------------------  
error_reporting&#40;E_ALL&#41;;
//-------------------Datenbankverbindung------------------------------------------
$host = "";     // Adresse des Datenbankservers, meist localhost  
$user = "";             // Ihr MySQL Benutzername  
$pass = "";             // Ihr MySQL Passwort  
$dbase = "test";             // Name der Datenbank  
//--------------------------------------------------------------------------------
$connection = mysql_connect&#40;"$host" , "$user" , "$pass"&#41;   
OR die &#40;"Keine Verbindung zu der Datenbank moeglich."&#41;;  
$db = mysql_select_db&#40;$dbase , $connection&#41;   
OR die &#40;"Auswahl der Datenbank nicht moeglich."&#41;;   
//----------------------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 test";

$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;


//----------------VARS--------------------------------------VARS-----------------------------------------VARS------ 
$pfad = $_SERVER&#91;'PHP_SELF'&#93;;    // aktuellen Dateipfad ermitteln, wichtig fuer die Links der Seitennavigation 
$datensaetze_pro_seite = "15";      // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen 
$p = "5";                                // Anzahl der Links die in der Seitenavigation ausgegeben werden 
$total = mysql_num_rows&#40;$query&#41;;                      // liefert die Anzahl der Datensaetze der Abfrage 
$seiten = ceil&#40;$total / $datensaetze_pro_seite&#41;;     // Berechnet die Seitenanzahl insgesamt 
// ------------------------------FUNCTION-------------------FUNCTION---------------------------------FUNCTION-------
if&#40;empty&#40;$_GET&#91;'go'&#93;&#41;&#41;&#123; // korrigieren der aktuellen Seite 
$go = 1;             // Sofern $go nicht uebergeben wurde 
&#125;elseif&#40;$_GET&#91;'go'&#93; <= 0 || $_GET&#91;'go'&#93; > $seiten&#41;&#123; 
$go = 1;         // Variable definieren 
&#125;else&#123; // Wenn Obiges nicht zutraf 

$go = mysql_real_escape_string&#40;$_GET&#91;'go'&#93;&#41;;     // Variable definieren 
&#125; 
$links = array&#40;&#41;; // Linkkette bilden 

// Seite die vor der aktuellen Seite kommt definieren 
if&#40;&#40;$go - $p&#41; < 1&#41;&#123; $davor = $go - 1;  &#125;else &#123; $davor = $p; &#125;             

// Seite die nach der aktuellen Seite kommt definieren 
if&#40;&#40;$go + $p&#41; > $seiten&#41;&#123; $danach = $seiten - $go; &#125;else&#123; $danach = $p; &#125;    

$off = &#40;$go - $davor&#41;; // Variable definieren    

if &#40;$go- $davor > 1&#41;&#123; // Link definieren => Zur Erste Seite springen          
$first = 1; 
$links&#91;&#93; = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";       
&#125;

if&#40;$go != 1&#41;&#123; // Link definieren => eine Seite zurueck blaettern           
$prev = $go-1; 
$links&#91;&#93; = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";      
&#125;

for&#40;$i = $off; $i <= &#40;$go + $danach&#41;; $i++&#41;&#123; // einzelne Seitenlinks erzeugen 

if &#40;$i != $go&#41;&#123;  // Link definieren             

$links&#91;&#93; = "<a href=\"$pfad?go=$i\">$i</a>\n"; 

&#125;elseif&#40;$i == $seiten&#41; &#123; // aktuelle Seite, ein Link ist nicht erforderlich              

$links&#91;&#93; = "<span class=\"current\">&#91; $i &#93;</span>\n";   

&#125;elseif&#40;$i == $go&#41;&#123; // aktuelle Seite, ein Link ist nicht erforderlich              

$links&#91;&#93; = "<span class=\"current\">&#91; $i &#93;</span>\n"; 

&#125; // close if $i       
&#125;

if&#40;$go != $seiten&#41;&#123; // Link definieren => eine Seite weiter blaettern        
$next = $go+1; 
$links&#91;&#93; = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n"; 
&#125;

if&#40;$seiten - $go - $p > 0 &#41;&#123; // Link definieren => Zur letzen Seite springen    
$last = $seiten;  
$links&#91;&#93; = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n"; 
&#125;

$start = &#40;$go-1&#41; * $datensaetze_pro_seite;             // Berechne den Startwert fuer die DB 


$link_string = implode&#40;" ", $links&#41;; // Zusammenfuegen der einzelnen Links zu einem String 
//------------------------------BLÄTTERFUNKTION---ENDE-----------------------------BLÄTTERFUNKTION----ENDE-------------------------BLÄTTERFUNKTION---ENDE---------------------BLÄTTERFUNKTION---ENDE--------------
//------------2.ABFRAGE----------------------2.ABFRAGE----------------------------2.ABFRAGE--------------------------2.ABFRAGE----------
$abfrage = mysql_query&#40;"SELECT DISTINCT * FROM test LIMIT $start,$datensaetze_pro_seite "&#41;; 
echo "$abfrage";

// if sucheingabe


//---------Sucheingabe Anzeige top----------------------Sucheingabe Anzeige top----------------------------Sucheingabe Anzeige top------
echo "Bei Ihrer 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 " konnten" . mysql_real_escape_string&#40;$anzahl&#41; . " Ergebnisse</b> gefunden werden.";
// ----------------Blätterfunktion Anzeige top--------------------------------------------Blätterfunktion Anzeige top-------------------
echo "<div id=\"navigation\">\n"; 
echo "<span class=\"pages\">Seite $go von $seiten</span>\n"; 
echo $link_string; // Ausgabe der Seitennavigation 
echo "</div> \n"; 
// -------------------------------------- Tabelle ---------------------------- Tabelle ----------------------- Tabelle ---------------------
echo '<table border="1" style="border-collapse&#58;collapse">';
while &#40;$zeile = mysql_fetch_array&#40; $abfrage, MYSQL_ASSOC&#41;&#41;
&#123;
echo "<tr class='tabelle'>";
echo "<td class='bild'><img src='". htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
echo "<td class='marke'>". $zeile&#91;'Marke'&#93; . "</td>";
echo "<td class='body'>". $zeile&#91;'Beschreibung'&#93; . "</td>";
echo "<td class='title'>". $zeile&#91;'Bezeichnung'&#93; . "</td>";
echo "<td class='preis'>". $zeile&#91;'Preis'&#93; . " &euro;</td>";
echo "<td class='bestellen'><a href='". htmlspecialchars&#40;$zeile&#91;'Anbieter'&#93;&#41; . " title='zur Bestellung'>Schicken lassen</a></td>";
echo "</tr>";
&#125;// while ende
echo "</table>";
// ----------------------------------- Blätterfunktion Anzeige bottom--------------- Blätterfunktion Anzeige bottom--------------------------- 
echo "<div id=\"navigation\">\n"; 
echo "<span class=\"pages\">Seite $go von $seiten</span>\n"; 
echo $link_string; // Ausgabe der Seitennavigation 
echo "</div> \n"; 
// ---------------------------------------------------------------------- 
mysql_free_result&#40; $abfrage &#41;;
if &#40; $connection &#41;
&#123;
echo 'Verbindung erfolgreich&#58; ';
echo $connection;
&#125;
else
&#123;

// hier sollte dann später dem Programmierer eine
// E-Mail mit dem Problem zukommen gelassen werden
die&#40;'keine Verbindung möglich&#58; ' . mysql_error&#40;&#41;&#41;;
&#125;
mysql_close&#40;$connection &#41;;
Hierbei erhalte ich meine Tabelle mit den folgenden 3 Zeilen über ihr:
1. SELECT * FROM beauty
=>>Query

2. 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 96
=>>LINE 96 im Skript:

Code: Alles auswählen

$total = mysql_num_rows&#40;$query&#41;;     // liefert die Anzahl der Datensaetze der Abfrage 
3. Resource id #4Bei Ihrer Sucheingabe Sportschuhe Adidas konnten 15 Ergebnisse gefunden werden.


Zudem werden hier auch keine Sitelinks mehr für der Blätterfunktion angezeigt. Das nächste Prob. sind die Ergebnisse der Sucheingabe. Diese entsprechen in keinster Form den eingegebenen Suchkriterien. Es werden lediglich nur die ersten 15 Einträge aus meiner MySQL-DB-Tabelle angezeigt.

Anders verhält es sich, wenn das Skript folgender Maßen aussieht:

Code: Alles auswählen

<?php
//-------------------Error-Reporting--------------------------------------------  
error_reporting&#40;E_ALL&#41;;
//-------------------Datenbankverbindung------------------------------------------
$host = "";     // Adresse des Datenbankservers, meist localhost  
$user = "";             // Ihr MySQL Benutzername  
$pass = "";             // Ihr MySQL Passwort  
$dbase = "test";             // Name der Datenbank  
//--------------------------------------------------------------------------------
$connection = mysql_connect&#40;"$host" , "$user" , "$pass"&#41;   
OR die &#40;"Keine Verbindung zu der Datenbank moeglich."&#41;;  
$db = mysql_select_db&#40;$dbase , $connection&#41;   
OR die &#40;"Auswahl der Datenbank nicht moeglich."&#41;;   
//----------------------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 = mysql_query&#40;"SELECT id FROM test"&#41;; // DB Abfrage 
echo "$query";


//----------------VARS--------------------------------------VARS-----------------------------------------VARS------ 
$pfad = $_SERVER&#91;'PHP_SELF'&#93;;    // aktuellen Dateipfad ermitteln, wichtig fuer die Links der Seitennavigation 
$datensaetze_pro_seite = "15";      // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen 
$p = "5";                                // Anzahl der Links die in der Seitenavigation ausgegeben werden 
$total = mysql_num_rows&#40;$query&#41;;                      // liefert die Anzahl der Datensaetze der Abfrage 
$seiten = ceil&#40;$total / $datensaetze_pro_seite&#41;;     // Berechnet die Seitenanzahl insgesamt 
// ------------------------------FUNCTION-------------------FUNCTION---------------------------------FUNCTION-------
if&#40;empty&#40;$_GET&#91;'go'&#93;&#41;&#41;&#123; // korrigieren der aktuellen Seite 
$go = 1;             // Sofern $go nicht uebergeben wurde 
&#125;elseif&#40;$_GET&#91;'go'&#93; <= 0 || $_GET&#91;'go'&#93; > $seiten&#41;&#123; 
$go = 1;         // Variable definieren 
&#125;else&#123; // Wenn Obiges nicht zutraf 

$go = mysql_real_escape_string&#40;$_GET&#91;'go'&#93;&#41;;     // Variable definieren 
&#125; 
$links = array&#40;&#41;; // Linkkette bilden 

// Seite die vor der aktuellen Seite kommt definieren 
if&#40;&#40;$go - $p&#41; < 1&#41;&#123; $davor = $go - 1;  &#125;else &#123; $davor = $p; &#125;             

// Seite die nach der aktuellen Seite kommt definieren 
if&#40;&#40;$go + $p&#41; > $seiten&#41;&#123; $danach = $seiten - $go; &#125;else&#123; $danach = $p; &#125;    

$off = &#40;$go - $davor&#41;; // Variable definieren    

if &#40;$go- $davor > 1&#41;&#123; // Link definieren => Zur Erste Seite springen          
$first = 1; 
$links&#91;&#93; = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";       
&#125;

if&#40;$go != 1&#41;&#123; // Link definieren => eine Seite zurueck blaettern           
$prev = $go-1; 
$links&#91;&#93; = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";      
&#125;

for&#40;$i = $off; $i <= &#40;$go + $danach&#41;; $i++&#41;&#123; // einzelne Seitenlinks erzeugen 

if &#40;$i != $go&#41;&#123;  // Link definieren             

$links&#91;&#93; = "<a href=\"$pfad?go=$i\">$i</a>\n"; 

&#125;elseif&#40;$i == $seiten&#41; &#123; // aktuelle Seite, ein Link ist nicht erforderlich              

$links&#91;&#93; = "<span class=\"current\">&#91; $i &#93;</span>\n";   

&#125;elseif&#40;$i == $go&#41;&#123; // aktuelle Seite, ein Link ist nicht erforderlich              

$links&#91;&#93; = "<span class=\"current\">&#91; $i &#93;</span>\n"; 

&#125; // close if $i       
&#125;

if&#40;$go != $seiten&#41;&#123; // Link definieren => eine Seite weiter blaettern        
$next = $go+1; 
$links&#91;&#93; = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n"; 
&#125;

if&#40;$seiten - $go - $p > 0 &#41;&#123; // Link definieren => Zur letzen Seite springen    
$last = $seiten;  
$links&#91;&#93; = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n"; 
&#125;

$start = &#40;$go-1&#41; * $datensaetze_pro_seite;             // Berechne den Startwert fuer die DB 


$link_string = implode&#40;" ", $links&#41;; // Zusammenfuegen der einzelnen Links zu einem String 
//------------------------------BLÄTTERFUNKTION---ENDE-----------------------------BLÄTTERFUNKTION----ENDE-------------------------BLÄTTERFUNKTION---ENDE---------------------BLÄTTERFUNKTION---ENDE--------------
//------------2.ABFRAGE----------------------2.ABFRAGE----------------------------2.ABFRAGE--------------------------2.ABFRAGE----------
$abfrage = mysql_query&#40;"SELECT DISTINCT * FROM test LIMIT $start,$datensaetze_pro_seite "&#41;; 
echo "$abfrage";

// if sucheingabe


//---------Sucheingabe Anzeige top----------------------Sucheingabe Anzeige top----------------------------Sucheingabe Anzeige top------
echo "Bei Ihrer 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 " konnten" . mysql_real_escape_string&#40;$anzahl&#41; . " Ergebnisse gefunden werden.";
// ----------------Blätterfunktion Anzeige top--------------------------------------------Blätterfunktion Anzeige top-------------------
echo "<div id=\"navigation\">\n"; 
echo "<span class=\"pages\">Seite $go von $seiten</span>\n"; 
echo $link_string; // Ausgabe der Seitennavigation 
echo "</div> \n"; 
// -------------------------------------- Tabelle ---------------------------- Tabelle ----------------------- Tabelle ---------------------
echo '<table border="1" style="border-collapse&#58;collapse">';
while &#40;$zeile = mysql_fetch_array&#40; $abfrage, MYSQL_ASSOC&#41;&#41;
&#123;
echo "<tr class='tabelle'>";
echo "<td class='bild'><img src='". htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
echo "<td class='marke'>". $zeile&#91;'Marke'&#93; . "</td>";
echo "<td class='body'>". $zeile&#91;'Beschreibung'&#93; . "</td>";
echo "<td class='title'>". $zeile&#91;'Bezeichnung'&#93; . "</td>";
echo "<td class='preis'>". $zeile&#91;'Preis'&#93; . " &euro;</td>";
echo "<td class='bestellen'><a href='". htmlspecialchars&#40;$zeile&#91;'Anbieter'&#93;&#41; . " title='zur Bestellung'>Schicken lassen</a></td>";
echo "</tr>";
&#125;// while ende
echo "</table>";
// ----------------------------------- Blätterfunktion Anzeige bottom--------------- Blätterfunktion Anzeige bottom--------------------------- 
echo "<div id=\"navigation\">\n"; 
echo "<span class=\"pages\">Seite $go von $seiten</span>\n"; 
echo $link_string; // Ausgabe der Seitennavigation 
echo "</div> \n"; 
// ---------------------------------------------------------------------- 
mysql_free_result&#40; $abfrage &#41;;
if &#40; $connection &#41;
&#123;
echo 'Verbindung erfolgreich&#58; ';
echo $connection;
&#125;
else
&#123;

// hier sollte dann später dem Programmierer eine
// E-Mail mit dem Problem zukommen gelassen werden
die&#40;'keine Verbindung möglich&#58; ' . mysql_error&#40;&#41;&#41;;
&#125;
mysql_close&#40;$connection &#41;;
?>
Hier bekomme ich als erste Zeile über der Tabelle folgende Meldung:
Resource id #3Resource id #4Bei Ihrer Sucheingabe Sportschuhe adidas konnten 15 Ergebnisse gefunden werden
Dann erscheinen alle ermittelten Sitelinks der Blätterfunktion, die auch alle einwandfrei funktionieren. Also ich kann wie gewünscht von Seit zu Seite umher blättern. Was hier aber nicht funktioniert ist die Suche. Es werden mir hier ebenfalls die ersten 15 Einträge meiner MySQL-DB-Tabelle angezeigt ohne das diese den eingegebnen Suchkriterien entsprechen.

Im ersten Beitrag dieses Threads, habe ich die drei verschiedenen Varianten aufgezeigt, die ich ohne Erfolg ausprobiert habe.
Zuletzt geändert von ben78 am 11.02.2010, 13:09, insgesamt 2-mal geändert.