Willkommen in der Webstatt Zum Webstatt Blog und Stories
Bonze am 21.03.08 19:11

ich hab ein problem, und zwar möchte ich in2verschiedenene tabellenin3 Spaklten nach einem Wort suchen
mein Ansatz:
$sql = "(SELECT * FROM bonze_login WHERE username LIKE '%".$_GET['suchtext']."%') UNION (SELECT * FROM svk_portraits WHERE vorname LIKE '%".$_GET['suchtext']."%' OR name LIKE '%".$_GET['suchtext']."%')" or die(mysql_error());
while($row = mysql_fetch_assoc($sql)) {
echo $row['username']."<br/>";
}

leider kommt dabei nichts rum, bzw es geht nich,.

netcup.de Warum gibt es hier Werbung?
nuit nuit am 21.03.08 20:25

warum nicht so? hab ich vorhin schon vorgeschlagen und ich bin immer noch der meinung, dass das funktioniert
SELECT * FROM tabelle1 as tb1,tabelle2 as tb2 WHERE tb1.username LIKE '%%' OR tb2.vorname LIKE '%%'

Bonze am 21.03.08 21:25

mhh versteh das nich
$query = "SELECT * FROM bonze_login as tb1,username as tb2 WHERE tb1.username LIKE '%$_GET[suchtext]%' OR tb2.vorname LIKE '%$_GET[suchtext]%' OR tb2.name LIKE '%$_GET[suchtext]%'" or die(mysql_error());
while($row = mysql_fetch_assoc($query)) {
echo $row['username']." Fussballer?!: <a href=\"?change=".$row['userid']."\" target=\"_self\">".$row['fussballer']."</a><br/>";
}


gibt mir nen Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in E:\xampp\xampp\htdocs\projects\svk\test.php on line 43 Fehler in der While schleife an

sili sili am 22.03.08 01:55

mysql_query() benutzen ;)

Bonze am 22.03.08 09:53

ok hab wirklich mysql_query vergessen :D

jetzt habe ich nur das problem das ich sehr viele ausgaben erhalte obwohl garnich sio viele einträge in der db sind?!
bekomme locker 12 einträge angezeigt und insgesamt in beiden tabelklen sind nur 6 zeilen vorhanden,.
hab auch schon DIsinct in den Query eingefügt um doppelte Ausgaben zu vermeiden, bringt aber garnichts

nuit nuit am 22.03.08 16:40

noja bei einem Like sucht der alles mögliche, wo der name drin vorkommt.....also irgendwie drin vorkommt....d.h. kriegst du mehrere ausgaben ^^

highlight in dem was du rauskriegst einfach mal deinen string den du gesucht hast mit einem str_replace oder so....dann siehste was ich mein ;) der wird in jedem auftauchen (wahrscheinlich)

Bonze am 22.03.08 18:04

mhh und wie soll ich das am besten anstellen?!

nuit nuit am 22.03.08 18:16

die %% weglassen.....oder nachparsen.....es kommt drauf an was du am ende finden willst....

Snake am 22.03.08 18:27

Sicherheitstechnisch ist es auch sehr erschreckend, welche fabrikationen du da zusammen bastelst.

Daten vom User gibt man NIE, NIE, NIEMALS direkt in ein query, ohne sie vorher geprüft oder escaped zu haben!

Bonze am 22.03.08 19:41

ja aber ich bin froh wenn es erstma funktioniert,.
und dann kommt das andere ,.

Bonze am 24.03.08 16:05

mhh hab immernoch keine Lösung gefunden,.
bekomme immernoch 2 einträge ausgegeben obwohl es nur 1 geben darf!

Bonze am 24.03.08 18:23

also , so gehts
$query = mysql_query("SELECT DISTINCT * FROM bonze_login as tb1, svk_portraits as tb2 WHERE (tb1.username LIKE '".$_POST['suchtext']."' OR tb2.vorname LIKE '".$_POST['suchtext']."' OR tb2.name LIKE '".$_POST['suchtext']."') AND tb1.userid = tb2.user_id");


und es zeigt mir auch nur richtige einträge an ,

allerdings nur wenn in beiden tabellen ein eintrag besteht,.
also wenn z.B. der user bonze angemeldet uist und in der tabelle portrait ein portrait besitzt,. wird er angezeigt, ist er nur angemeldet und besitzt kein portrait , wird er überhaupt nicht angezeigt,.

wahrscheinlich wärs doch besser 2 getrennte abfragen zu machen, da der username in der einen oder in der anderen Spalte zu suchen ist, und ich keine doppelten ausgaben haben möchte,.

Michael Michael am 25.03.08 08:30

Hola!

1) Du solltest Snakes Rat beachten. Die Benutzereingaben direkt an die Datenbank zu senden ist nichts. Insbesondere, wenn es durch eine Zeile gelöst würde:

$_POST['suchtext'] = mysql_real_escape($_POST['suchtext']);

Besser wäre allerdings:

$q_suchtext = mysql_real_escape($_POST['suchtext']);

Und dann die Variable $q_suchtext zu verwenden

2) WHERE ... feld LIKE 'suche' ist sinnlos, da kannst du auch gleich WHERE ... feld='suche' machen. LIKE würde ich nur verwenden, wenn du auch Teile des Feldes als Treffer anerkennen willst (mit %) oder andere Muster angibst. Das führt auch NICHT dazu, dass Datensätze doppelt ausgegeben werden.

3) SELECT DISTINCT * ist ebenfalls murks. Du simulierst hier ein GROUP BY Verhalten. Das ist insgesamt meiner Meinung nach hier nicht nötig.

4) Zu den doppelten Datensätzen. Meiner Meinung nach produzierst du mit "... FROM bonze_login as tb1, svk_portraits as tb2 ..." ein echtes Kreuzprodukt (cross join). Probiere mal die Tabellen mit LEFT JOIN zu verbinden. Dann sollte das funktionieren.

Viele Grüße,
Michael

Bonze am 26.03.08 18:41

mhh kann man es auch so machen das ich $suchtext = mysql_real_escape_string($_POST['suchtext']);
$query = mysql_query("SELECT * FROM bonze_login WHERE username LIKE '%".$suchtext."%'");
$row = mysql_fetch_assoc($query)
$query1 = mysql_query("SELECT * FROM svk_portraits WHERE vorname LIKE '%".$suchtext."%' OR name LIKE '%".$suchtext."%'");
$row2 = mysql_fetch_assoc($query2)



haben und dann in einer schleifen beide $rows durchgehe?
und dann je nachdem in welcher Datenbank etwas gefunden wurde, noch aus der anderen db sachen auslese?
ist zwar aufwändiger, aber so wäre wenigstens sichergestellt das es geht oder nich?

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt