Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Tabellen durchsuchen

Hallo!
Ich habe mir ein Script gebastelt in das mehre Tabellen durchsuchen soll und nur in 2 Feldern (das kann man dann auswählen) name und beschreibung. Ich habe das Script jetzt mal nur für eine Rubrik geschrieben weiß aber nicht was falsch ist:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Ich habe Kommentare dazugeschrieben damit sich jeder auskennt. Wer sich es ansehen will wie die Suche aussieht klickt hier:
http://marioka.uttx.net/hp/sites/downloads.php?rub=index
Ich habe das Script auf meiner HP noch nicht aktiv weil es nicht funktioniert.
Hier gehts zum Orginal Eintrag "Tabellen durchsuchen" im Forum

Antworten

1. So eine Buchstabenwüste sieht sich niemand freiwillig an, rücke den Quellcode ordentlich ein
2. "Funktioniert nicht" ist keine Problembeschreibung

*** Nobody ***


2.

Ok, ich versuch mal zu ordnen, kann das nicht so:
[PHP]
function SuchTrans($such_trans_name) { // FUNKTION ZUM UMWANDELN UND KODIEREN
$ergebnis = $_POST[$such_trans_name];
if (get_magic_quotes_gpc()) {
$ergebnis = strip_tags($ergebnis);
$ergebnis = htmlentities($ergebnis);
$ergebnis = trim($ergebnis);
$ergebnis = stripslashes($ergebnis);
$ergebnis = addslashes($ergebnis);
}
return $ergebnis;
}


if ($suche_ab == 'ja') { // PRÜFEN OB EINTRAG LEER ODER NICHTS ANGEKREUZT
if (empty($_POST['s_titel']) && empty($_POST['s_beschreib'])) echo "Du musst entweder Titel durchsuchen, Beschreibung durchsuchen oder beide anklicken!<br/><BR/>";
if (empty($_POST['suchbegriff'])) echo "Bitte einen Suchbegriff eingeben!";
else {
if (strlen($_POST['suchbegriff']) < 3) echo "Ihr Suchbegriff darf nicht weniger als 3 Zeichen beinhalten";
else { // WENN ALLES STIMMT BEGINNT DIE SUCHE
if (!empty($_POST['s_titel'])) && (!empty($_POST['s_titel'])) $anklick = "titel\, beschreibung"; // XXXXXXX HIER IST DER FEHLER XXXXXXXX
elseif (empty($_POST['s_titel'])) $anklick = "beschreibung";
else $anklick = "titel";
$fertig_such_trans1 = SuchTrans("suchbegriff"); // DER SUCHEINTRAG WIRD KODIERT
$fertig_such_trans = "'%$fertig_such_trans1%'";
echo "<br/><center><h1><b>Suchergebnisse in $rub1</b></h1></center><br/>" // TITEL WO DIE SUCHE STATTFINDET
$query_suche1 = "SELECT * FROM rub1 ORDER BY id DESC WHERE $anklick LIKE $fertig_such_trans"; // ANWEISUNGEN FÜR DIE SUCHE
$sql_suche1 = mysql_query($query_suche1);
while ($ds_suche1 = mysql_fetch_object($sql_suche1)) {
$name_suche1 = $ds_suche1 -> name; // AUSGABE ALLER RESTLICHEN DATEN
$beschreibung_suche1 = $ds_suche1 -> beschreibung;
$sprache_suche1 = $ds_suche1 -> sprache;
$autor_suche1 = $ds_suche1 -> autor;
$download_suche1 = $ds_suche1 -> download;
$kb_suche1 = $ds_suche1 -> kb;
$id_suche1 = $ds_suche1 -> id;
if (empty($name_suche1) or empty($beschreibung_suche1)) echo "Keine Ergebnisse gefunden"; // WENN DIE EINTRÄGE LEER SIND WURDE NICHTS GEFUNDEN
else { // WENN NICHT MACH WEITER
if ($sprache_rub1 == "de") $status_sprache1 = "Deutsch"; // ES WIRD GEPRÜFT WELCHEN EINTRAG DIE SPRACHEFELDER HABEN de oder en
elseif ($sprache_rub1 == "en") $status_sprache1 = "Englisch";
else $status_sprache1 = $status_sprache1 = "unbekannte Sprache";
echo "<table width=429 align=center bordercolor=#664d4d cellspacing=0 bordercolordark=#594848 cellpadding=2 bordercolorlight=#a58383 border=1> // DIE TABELLE MIT DEN ERGEBNISSEN WIRD AUSGEGEBEN
<tbody>
<tr height=27>
<td width=340 colspan=2>
<p align=center><b>$name_suche1</b></p>
</td>
<td>
<p align=center>$status_suche1</p>
</td>
</tr>
<tr height=78>
<td colspan=3>
<p align=center>$beschreibung_suche1</p>
</td>
</tr>
<tr height=26>
<td width=132>
<p align=center><a href=$autor_suche1>Autor-Homepage</a></p>
</td>
<td width=216 bgcolor=#ff552a>
<p align=center><strong><a href=$download_suche1>Jetzt downloaden!</a></strong></p>
</td>
<td>
<p align=center>$kb_suche1 KB</p>
</td>
</tr>
</tbody>
</table><br/>";
} } // IF-NICHTS GEFUNDEN SCHLEIFE UND WHILE WIRD BEENDET
mysql_close($dz);
} } } // DER REST WIRD BEENDET
?>
[/PHP]

Als Fehlermeldung wird angezeigt
Zitat:
Parse error: syntax error, unexpected T_BOOLEAN_AND in /www/usersites/m-r/marioka/pub/hp/sites/downloads.php on line 120
Das ist im obigen Code dort wo ich die X gemacht habe. In dieser Zeile wird geprüft was angeklickt wurde (Titel durchsuchen, Beschreibung durchsuchen) und diese Werte werden später zum WHERE geschrieben. Ich habe die Bachslashes deshlab verwendet das er das Komma als Text ausgibt.


3.

zähle mal deine klammern ( und ) in diesem teil :
Code:                   In Zwischenablage kopieren (nur IE)
2">




4.

Ich habe bei den If-Abfragen jetzt eine geschwungene Klammer herum gemacht nur schreibt er mir jetzt eine erneute Fehlermeldung:
Zitat:
Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /www/usersites/m-r/marioka/pub/hp/sites/downloads.php on line 126
Das ist dort wo das $query_suche1 ist. Dann hab ich versucht statt den Variablen Namen genaue Werte zu schreiben. Die Fehlermeldung blieb gleich. Ich weiß aber auch niocht wo ich so ein , oder ; finden kann. Das ist doch nur am Ende und da ist ja kein Fehler.


5.

Mach doch mal die Augen auf! Einen Parse-Error darf man ruhig mal alleine finden!

In der Zeile davor fehlt ein Semikolon.

*** Nobody ***


6.

Achso, das hab ich übersehen...

Die Seite wird jetzt angezeigt allerdings funktioniert das query nicht.
Ich hab mit Google gesucht, das Forum durchsucht und auf www.php.net geguckt hab aber nirgends was gefunden wie man ein query mit WHERE und LIKE schreibt. Ich hab jetzt schon so ziemlich alles ausprobiert (Leerzeichen dazumachen, Anführungszeichen ' und " dran machen, und und und) hat aber alles nicht funktioniert. MySQL schreibt folgende Meldung:

Zitat:
MySQL-Error: 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 'WHERE titel LIKE 'test' at line 1
Könnt ihr mir eine gute Seite sagen wo das steht und wie man das verwendet wenn auch mehrer Datensätze zu überprüfen sind (mit AND, OR oder && ????).

Entschuldigt mich bitte wenn ich da dumme Fragen stellen und andere sich denken warum der das überhaupt postet, ich kenn mich noch nicht so gut mit PHP (und nur wenig mit MySQL). Wäre sehr nett wenn mir jemand hilft.


7.

Wie sieht die Abfrage aus?

http://www.php.net/manual/de
http://www.php-faq.de
http://www.php-einfach.de
http://www.schattenbaum.net/php/ (leider etwas veraltet)
http://www.galileocomputing.de/openbook/php4 (leider etwas veraltet)
http://tut.php-q.net/index.html
http://dev.mysql.com/doc/mysql/de/index.html
http://ffm.junetz.de/members/reeg/DSP/
http://www.phptutorials.de
http://www.dynamic-webpages.de/05.tutorials.php

*** Nobody ***


8.

Zitat:
Nobody postete
Wie sieht die Abfrage aus?

*** Nobody ***
SELECT * FROM rub1 ORDER BY id DESC WHERE $anklick LIKE $fertig_such_trans
steht oben im Code
In der Variable $anklick steht welche Felder angeklickt wurden. titel oder/und beschreibung. Wenn beide angeklickt wurden steht titel, beschreibung. Muss ich da 2 Anweisungen schreiben oder ist das so in Ordnung?
In $fertig_such_trans steht welches Wort in die Suche eingegeben wurde.

EDIT: Danke für die vielen Links, ich werd sie mal ansehen.


9.

Zeichenketten gehören zwischen '

SELECT * FROM rub1 ORDER BY id DESC WHERE $anklick LIKE '$fertig_such_trans'

Stellt sich noch die Frage, ob du nicht eher das möchtest

SELECT * FROM rub1 ORDER BY id DESC WHERE $anklick LIKE '%$fertig_such_trans%'

*** Nobody ***


10.

Hab gerade auf php-einfach.de gesurft und dabei herausgefunden das ich mehrere Anfragen (z.B.: titel und beschreibung durchsuchen) mit AND verknüpfen muss.

@ Nobody: Ja, ich möchte eher das 2., dieses sucht ja ob der eingegebene Text irgendwo im Feld existiert, oder?
Ich habe den Code dann kopiert und dieses Query nur mal als Test ausgegeben:
Zitat:
SELECT * FROM rub1 ORDER BY id DESC WHERE titel LIKE '%test%'
Allerdings hagelte es mir schon wieder nur Fehlermeldungen, ich check echt nicht was da falsch sein soll:
Zitat:
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 'WHERE titel LIKE '%test%'' at line 1
Die Variablen hat er ja anscheindend prima übernommen, irgendwas stimmt an dieser Syntax nicht.


11.

Reihenfolge ändern:

SELECT * FROM rub1 WHERE titel LIKE '%$fertig_such_trans%' ORDER BY id DESC

16.14. Warum soll ich nicht SELECT * schreiben?
http://www.php-faq.de/q/q-sql-select.html

*** Nobody ***


12.

Vielen Dank Nobody (damit ist nicht gemeint: Vielen Dank von niemanden :D)
Hab jetzt das ganze Script ein wenig umgekrempelt und jetzt werden keine Fehlermeldungen mehr angezeigt.
Nur die Suche liefert noch keine Ergebnisse auch bei Eingabe eines existierenden Begriffes , aber darum kümmere ich mich schon.

Der Quellcode sieht jetzt so aus:
Code:                   In Zwischenablage kopieren (nur IE)
3">




13.

Ich hab den Fehler entdeckt! Der FULLTEXT war bei den beiden Feldern nicht aktiviert und das AND im query hab ich durch ein OR ersetzt. Nur wenn er nichts findet zeigt er den Text (Keine Ergebnisse gefunden) nicht an.


Hier gehts zum Orginal Eintrag "Tabellen durchsuchen" im Forum
 
phpforum.de | Impressum | Handy Bundles