PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Suchabfragenproblem (http://www.selfphp.de/forum/showthread.php?t=24735)

maxi 13.09.2012 12:19:22

Suchabfragenproblem
 
Hi Membs!

Dachte bis vor Kurzem dass meine Suchabfrage alle Suchmöglichkeiten abdeckt aber dem scheint aber leider nicht so.
Hab in meiner DB eine Tabelle mit 2 Spalten "name" und "vorname" mit z.T ähnlichen Einträgen. Die Suchabfrage bezieht sich auf beide Spalten d.h Teiltreffer aus beiden Spalten sollen in einer Tabelle angezeigt werden. Das Problem ist nicht die Suchabfrage in Bezug auf das Feld in das der User seinen Suchbegriff eingibt sondern die Beziehung der Spalten zueinander denn es wird nur dann ein Treffer ausgegeben wenn in beiden Spalten der Suchbegriff zu finden ist. Ich weiß leider nicht wo der Fehler liegt. Hab bereits die einzelnen Variablen umbenannt und hab damit zumindest denn Teilerfolg erzielt dass bei einem Teffer in der Spalte "name" diese nicht mehr mit der Spalte "vorname" verglichen wird aber leider funktioniert´s nicht andersrum. Ich hoff´es is einigermaßen verständlich...

z.b. Tabelleninhalt:Spalte name: holes Spalte vorname: Louise
Spalte name: widow Spalte vorname: Holger

Usereingabe: hol

Ergebnis: beide Einträge werden angezeigt.

Allerdings bei Usereingabe: Holger oder z.B. Holg

Ergebnis: Kein Eintrag wird angezeigt da in Spalte "name" keine Übereinstimmung mit
der Usereingabe. Ausgabe (beider Spalten) sollte aber logischerweise widow Holger sein


Hier der Code der Abfrage:

Code:

<html>
<head>
<title>
db-eingabe.php
</title>
<body bgcolor="#EFEFEF">
<?php
mysql_connect("","root");
mysql_select_db("firma");


$sqlab = "select name, vorname, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen";
$sqlab .= " where name like '%".$_POST["autor"]."%' order by name asc";
$res = mysql_query($sqlab);
$num = mysql_num_rows($res);

echo "<table border='1' width='100%'>";
echo "<tr><td>Name</td><td>Vorname</td>";
echo "<td>Titel2</td><td>Titel3</td><td>Titel4</td><td>Verfügbarkeit</td><td>Bewertung</td></tr>";

while ($dsatz = mysql_fetch_assoc($res))
{
echo "<tr><td>".'<a href="Details.php?id='.$dsatz["personalnummer"].'" style="text-decoration:none">'.$dsatz['name'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz["personalnummer"].'" style="text-decoration:none">'.$dsatz['vorname'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz['personalnummer'].'" style="text-decoration:none">'.$dsatz['titel2'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz['personalnummer'].'" style="text-decoration:none">'.$dsatz['titel3'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz['personalnummer'].'" style="text-decoration:none">'.$dsatz['titel4'].' </a>'."</td>";

if ($dsatz["verfuegbarkeit"] == "ja")
{
echo "<td><center><font color='#00aa00'>" . $dsatz["verfuegbarkeit"] . "</font></center></td>";
}
else
{
echo "<td><center><font color='#ff0000'>" . $dsatz["verfuegbarkeit"] . "</font></center></td>";
}
$pic = '<img src="star.jpg" height="16" width="16">';
if ($dsatz["bewertung"] > "4")
{
echo  "<td>$pic$pic$pic$pic$pic<td>";
}
else if ($dsatz["bewertung"] >"3")
{
echo  "<td>$pic$pic$pic$pic</td>";
}
else if ($dsatz["bewertung"] >"2")
{
echo  "<td>$pic$pic$pic</td>";
}
else if ($dsatz["bewertung"] >"1")
{
echo  "<td>$pic$pic</td>";
}
else if ($dsatz["bewertung"] >"0")
{
echo  "<td>$pic</td>";
}
else if ($dsatz["bewertung"] = " ")
{
echo  "<td>Keine Bewertung</td>";
}
}


$bitte = "select vorname, name, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen";
$bitte .= " where vorname like '%".$_POST["autor"]."%'";
$test = mysql_query($bitte);
$zeile = mysql_num_rows($test);

while ($dsatz = mysql_fetch_assoc($test))
{
echo "<tr><td>".'<a href="Details.php?id='.$dsatz["personalnummer"].'" style="text-decoration:none">'.$dsatz['name'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz["personalnummer"].'" style="text-decoration:none">'.$dsatz['vorname'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz['personalnummer'].'" style="text-decoration:none">'.$dsatz['titel2'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz['personalnummer'].'" style="text-decoration:none">'.$dsatz['titel3'].' </a>'."</td>";
echo "<td>".'<a href="Details.php?id='.$dsatz['personalnummer'].'" style="text-decoration:none">'.$dsatz['titel4'].' </a>'."</td>";

if ($dsatz["verfuegbarkeit"] == "ja")
{
echo "<td><center><font color='#00aa00'>" . $dsatz["verfuegbarkeit"] . "</font></center></td>";
}
else
{
echo "<td><center><font color='#ff0000'>" . $dsatz["verfuegbarkeit"] . "</font></center></td>";
}
$pic = '<img src="star.jpg" height="16" width="16">';
if ($dsatz["bewertung"] > "4")
{
echo  "<td>$pic$pic$pic$pic$pic<td>";
}
else if ($dsatz["bewertung"] >"3")
{
echo  "<td>$pic$pic$pic$pic</td>";
}
else if ($dsatz["bewertung"] >"2")
{
echo  "<td>$pic$pic$pic</td>";
}
else if ($dsatz["bewertung"] >"1")
{
echo  "<td>$pic$pic</td>";
}
else if ($dsatz["bewertung"] >"0")
{
echo  "<td>$pic</td>";
}
else if ($dsatz["bewertung"] = " ")
{
echo  "<td>Keine Bewertung</td>";
}
}
echo "</table>";
if ($num == 0)
{
header ('Location: Keine_Sucheintraege.html');
};

?>
</body>
</html>

Vielleicht weiß jemand warum die Spalten nach der Eingabe selbst noch verglichen werden. Ich will ja nicht das er mir nur die Treffer die in beiden Spalten vorkommen auswirft sondern pro Spalte jeweils.

lg + Dank im Voraus

maxi

vt1816 13.09.2012 15:16:56

AW: Suchabfragenproblem
 
Wieso benutzt/brauchst Du zwei Abfragen?

Eine Abfrage mit
PHP-Code:

where name like '%".$_POST['autor']."%' or vorname like '%".$_POST['autor']."%' 

*** ungetestet! ***

sollte zielführend sein.

maxi 14.09.2012 06:01:08

AW: Suchabfragenproblem
 
Hi vt1816!

Thx für die Mühe allerdings funktioniert das net, bekomm dann nichts ausgegben.

Code:


$sqlab = "select name, vorname, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen";
$sqlab .= "where name like '%".$_POST['autor']."%' or where vorname like '%".$_POST['autor']."%'";
$res = mysql_query($sqlab);
$num = mysql_num_rows($res);

Wenn ich mich recht erinner hab ich das so schon mal probiert nur eben ohne Erfolg (da war ich mir aber nicht sicher ob´s an der Schreibweise gelegen hat), deswegen der Umweg über die 2 Abfragen.


lg

maxi

knight1 14.09.2012 07:07:47

AW: Suchabfragenproblem
 
Hi,
so wie ich das sehe ist die kombinierte Version schon nahe dran.
Lass das zweite where mal weg und setze die Feldnamen in Backticks.

Kai aka Knight1

vt1816 14.09.2012 10:35:01

AW: Suchabfragenproblem
 
Zitat:

Zitat von maxi (Beitrag 143682)
Hi vt1816!

Thx für die Mühe allerdings funktioniert das net, bekomm dann nichts ausgegben.

Code:


$sqlab = "select name, vorname, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen";
$sqlab .= "where name like '%".$_POST['autor']."%' or where vorname like '%".$_POST['autor']."%'";
$res = mysql_query($sqlab);
$num = mysql_num_rows($res);

...

Habs mal für Dich angepasst:
PHP-Code:


$sqlab 
"select name, vorname, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen ";
$sqlab .= "where `name` like '%".$_POST['autor']."%' or `vorname` like '%".$_POST['autor']."%'";
echo 
$sqlab;
$res mysql_query($sqlab);
$num mysql_num_rows($res); 

Was bekommst Du angezeigt? Achte auf das Leerzeichen hinter dem Tabelennamen!
Schalte die Fehleranzeige ein bzw. höher!

maxi 14.09.2012 21:10:42

AW: Suchabfragenproblem
 
Thx an euch beide!!!

So ich hab´s jetzt so gemacht und das funktioniert.

Code:

$sqlab = "select name, vorname, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen ";
$sqlab .= "where name like '%".$_POST['autor']."%' or vorname like '%".$_POST['autor']."%'";
$res = mysql_query($sqlab);
$num = mysql_num_rows($res);

also das zweite where laut Knight1 weggenommen. Wenn ich die Feldnamen aber in Backsticks reingeb gibt er mir nichts aus, ohne aber funktioniert´s wie gewünscht.

Wozu das echo $sqlab; vt1816?
Das gibt mir ja dann die komplette erste Zeile mit Feldnamen aus
Code:

"select name, vorname, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen ";
Brauch ich ja demnach nicht ;-)

Kurze Interessensfrage, wozu sind die Backsticks eigentlich gut? Alteingesessene Codingform an die man sich halten sollte?
Hab die bis jetzt noch nie wo gesehen.

Thx nochmals

lg

maxi

vt1816 15.09.2012 07:37:30

AW: Suchabfragenproblem
 
Zitat:

Zitat von maxi (Beitrag 143686)
Thx an euch beide!!!

So ich hab´s jetzt so gemacht und das funktioniert.

Gern geschehen ...



Zitat:

Zitat von maxi (Beitrag 143686)
[...]

Wozu das echo $sqlab; vt1816?
Das gibt mir ja dann die komplette erste Zeile mit Feldnamen aus
Code:

"select name, vorname, titel2, titel3, titel4, verfuegbarkeit, personalnummer, bewertung from personen ";
Brauch ich ja demnach nicht ;-)

Kurze Interessensfrage, wozu sind die Backsticks eigentlich gut? Alteingesessene Codingform an die man sich halten sollte?
Hab die bis jetzt noch nie wo gesehen.

Deine Äußerungen zeigen mal wieder deutlich, es ist leichten in einem Forum zu fragen als mal das/im Handbuch zu lesen. KOPFSCHÜTTEL!

meikel (†) 15.09.2012 17:09:17

AW: Suchabfragenproblem
 
Zitat:

Zitat von vt1816 (Beitrag 143688)
Deine Äußerungen zeigen mal wieder deutlich, es ist leichten in einem Forum zu fragen als mal das/im Handbuch zu lesen. KOPFSCHÜTTEL!

Psssttt... Würde jeder Fragesteller die Handbücher lesen, wäre ua. auch dieses Forum überflüssig. <ggg>

vt1816 15.09.2012 18:41:52

AW: Suchabfragenproblem
 
Zitat:

Zitat von meikel (Beitrag 143690)
Psssttt... Würde jeder Fragesteller die Handbücher lesen, wäre ua. auch dieses Forum überflüssig. <ggg>

DU solltest wissen wie es gemeint war ;-)

Ckaos 15.09.2012 21:11:31

AW: Suchabfragenproblem
 
Hi,

google mal nach SQL Injection!

mfg

CKaos


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:38:06 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.