PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Eine Tabellenspalte mit zwei Begriffen abfragen (http://www.selfphp.de/forum/showthread.php?t=25330)

pa7ssi 15.07.2014 07:41:56

Eine Tabellenspalte mit zwei Begriffen abfragen
 
Hallo,

wie oben schon beschrieben, möchte ich eine Tabellenspalte mit zwei Begriffen abfragen.
Das kann man sich so vorstellen:

Ich habe eine Spalte "Vorname".
Dann mache ich ein "POST", wo in dem Feld "Hans Müller" steht (also der User will "Hans Müller" in beispielsweise einem Telefonbuch finden).

Bei mir zeigt er dann aber überhaupt nichts an.

PHP-Code:

$postvariable $_POST['vorname'];

"SELECT vorname FROM tabellenname WHERE vorname LIKE '%$postvariable%' " 

Es kommt keine Ausgabe. Gebe ich aber nur "Hans" ein funktioniert es.
Ich bitte um Hilfe.

Vielen Dank für jede Antwort.

DokuLeseHemmung 15.07.2014 08:44:25

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Vielleicht ist Müller ja ein Nachnahme?

Außerdem ist/scheint dein Code anfällig für SQL Injections.

pa7ssi 15.07.2014 08:46:44

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Hallo,

danke für die Antwort.


Er sollte doch aber trotzdem alle Vorname ausgeben, die mit "Hans" anfangen.
Manche Leute haben auch einen Nachnamen, die einige Personen als Vornamen haben.



//edit: Sicherheit steht erstmal nicht im Vordergrund

"SELECT vorname FROM tabellenname WHERE vorname LIKE '%$postvariable%' OR nachname LIKE '%$postvariable%' "

So zeigt er auch nichts an.

meikel (†) 15.07.2014 09:13:07

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Zitat:

Zitat von pa7ssi (Beitrag 146704)
Er sollte doch aber trotzdem alle Vorname ausgeben, die mit "Hans" anfangen.

Dann sags "ihm" doch so. MySQL und PHP sind ganz fiese Programme und machen genau das, was im Script steht.

Wenn in $postvariable "Hans Müller" steht, dann sucht das Programm auch danach. Deine % Platzhalter beziehen sich auf alle Zeichen vor und nach der Zeichenkette "Hans Müller". Gefunden werden würde zB. "Fritz-Hans Müller-Motzenbacher".
Nicht gefunden wird "Hans Meier", weil "Hans Meier" != "Hans Müller" ist.

btw: mit den Umlauten wirst Du noch Probleme haben, falls Charset und Collation der Datenbank/Tabelle nicht mit dem Charset des Formulars übereinstimmt.

pa7ssi 15.07.2014 11:29:34

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Wie soll ich demnach einen Platzhalter einbauen?

DokuLeseHemmung 15.07.2014 14:03:51

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Erstmal solltest du Vorname und Nachname trennen.

meikel (†) 15.07.2014 17:32:27

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Zitat:

Zitat von pa7ssi (Beitrag 146707)
Wie soll ich demnach einen Platzhalter einbauen?

Das kommt darauf an, was Du wie suchen möchtest.

Beachte dabei folgendes:
1. verwende mindestens die Spalten Vorname und Nachname
2. beachte, daß nicht sicher ist, ob Doppelnamen mit nem Bindestrich verbunden sind.
Beispiele: Rainer Maria Rilke oder Hans-Jürgen Müller
3. beachte auch, daß alte Adelstitel heute Bestandteil des Nachnamens sind.
Beispiele: Otto Graf Lambsdorf, Jürgen in der Au
4. Die Amis haben zT. nen Mittelnamen und die Russen haben den Vatersnamen an zweiter Position.
Beispiele:
John Fitzgerald Kennedy, Iwan Iwanowitsch Iwanow
5. im asiatischen Raum sind Vor- und Nachname vertauscht.

usw.

Beachte auch, daß Titel (Dr., Prof. usw) mit zum Namen gehören.
Beispiel:
Dr. Fritz Müller bzw. Dr. Müller

pa7ssi 16.07.2014 07:12:19

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Zitat:

Zitat von DokuLeseHemmung (Beitrag 146708)
Erstmal solltest du Vorname und Nachname trennen.

Sind getrennt!


Ich bräuchte einfach mal eine Beispiel-SQL-Abfrage. Kann mir da wer behilflich sein?

Zwei Spalten: Vorname und Nachname

Gebe über eine Textbox "Hans Müller" ein.

Bei der Ausgabe sollen dann nur die Datensätze angezeigt werden, die "Hans Müller" wirklich irgendwoe auch nur im Namen haben. Kann ja auch einer einen Doppelnamen haben, dann sollte Beispielsweise "Hans Müller-Wohlfahrt" auch angezeigt werden.

pguser 16.07.2014 07:43:07

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Zitat:

Zitat von pa7ssi (Beitrag 146710)
Sind getrennt!


Ich bräuchte einfach mal eine Beispiel-SQL-Abfrage. Kann mir da wer behilflich sein?

Zwei Spalten: Vorname und Nachname

Gebe über eine Textbox "Hans Müller" ein.

Bei der Ausgabe sollen dann nur die Datensätze angezeigt werden, die "Hans Müller" wirklich irgendwoe auch nur im Namen haben. Kann ja auch einer einen Doppelnamen haben, dann sollte Beispielsweise "Hans Müller-Wohlfahrt" auch angezeigt werden.

Einfach.

Code:

test=*# select * from leute;
 vorname |  nachname
---------+------------
 Hans    | Mustermann
 Willi  | Rabe
 Susi    | Sorglos
(3 rows)

Time: 0,174 ms
test=*# select * from leute where soundex(vorname || ' ' || nachname) = soundex('Hans Mustermann');
 vorname |  nachname
---------+------------
 Hans    | Mustermann
(1 row)

Time: 0,259 ms
test=*# select * from leute where soundex(vorname || ' ' || nachname) = soundex('Hans Musterman');
 vorname |  nachname
---------+------------
 Hans    | Mustermann
(1 row)

Time: 0,268 ms
test=*# select * from leute where soundex(vorname || ' ' || nachname) = soundex('Hans Musterman-Ziegelbalg');
 vorname |  nachname
---------+------------
 Hans    | Mustermann
(1 row)


pa7ssi 18.07.2014 11:07:21

AW: Eine Tabellenspalte mit zwei Begriffen abfragen
 
Klappt bei mir komischerweise nicht!

Wo hast du das denn getestet?!


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:47:29 Uhr.

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