[SQL] Mehrere Where Abfragen zusammen

basecolor

Grünschnabel
Hallo Zusammen,

Und zwar mal wieder ein neues Problem.

Wenn ich zum beispiel einen GET Befehl Übermittel in form von ?User=Vorname Nachname

wie bekomm ich dann eine korrekte MySQL abfrage wenn die Form aktuell so aussieht:

PHP:
$kundenid = $_GET[User];
$abfrage = "SELECT Kundennummer FROM UserAccounts WHERE FirstName AND LastName = '".$kundenid."'";
$result = mysql_query($abfrage) OR die("Error: $abfrage <br />".mysql_error());

Ich bekomm dann garkeine Ausgabe.

Ergo mach ich was falsch.

Problem dabei ist, das dies nicht in einzeile zu speichern ist, sondern getrennt in den Spalten FirstName und LastName
Er soll dann anhang der korrekten Übermittelung wie oben zu sehen.
die dazugehörige ID ausprucken.

Vieleicht weiss ja einer Rat

Danke schonmal im Vorraus
 
Deine Query ist falsch (sowieso), und die WHERE-Abfrage sinnlos.
(Abgesehen davon verschieb ich das mal in den DB-Bereich)

Wenn Du eine KundenID hast, dann musst Du auch danach suchen.
Code:
SELECT * FROM UserAccounts WHERE KundenID = kundenid
Im Klartext: Gib alle Datensätze inkl. aller Spalten heraus, wo in Spalte KundenID eben jene zu finden ist. FirstName und LastName werden dann wohl im Ergebnis stecken..

mfg chmee
 
Das das es sorum geht is mir auch logisch.
Und das ist eben nicht das Ergebnis welches ich möchte, sondern ziel ist es wenn über den GET Paramenter der Name übermittel wird, hier die ID ausgabe erfolgen soll.
oder müsste man den GET paramenter erst zerflücken?
Wenn ja mit was?
 
Du hättest zumindest den Variablennamen nachbessern sollen. Wenn Du aus einem Formular "Vorname Nachname" entgegennimmst, dann sollte das per explode() zerlegt und einzeln abgefragt werden.
PHP:
$data = $_GET['user'];
$names = explode(" ", $data);
$query = "SELECT kundennummer FROM AccountData WHERE vorname= '".$names[0]."' AND nachname='".$names[1]."'";
Übrigens sollte die GET-Variable nochmals vor der Query gecheckt werden auf Richtigkeit. So wie ich es geschrieben habe ist es ein Prima-Angriffspunkt, um Deine SQL-Datenbank zu zerlegen. SQL-Injection.

mfg chmee
 
Ich hab bereits eine bessere lösung gefunden ;)
die auch den Sicherheitsaspekt lösen tat.

Danke trozdem euch für die Hilfe.
auch für den tipp mit explode daran hat ich erhlich gesagt nicht mehr gedacht.
 
basecolor, zeig uns ruhig, wie Du es gelöst hast. Damit hilfst Du auch Anderen.

mfg chmee
 
IN() eignent sich ansonsten auch ganz gut

SQL:
-- Anstelle von
WHERE vorname= '{$names[0]}' AND nachname='{$names[1]}'

-- Dasselbe mit IN()
WHERE '{$names[0]}' IN(vorname, nachname)

Was performanter ist, müsste man mit grossen Datenmengen testen.

Nachtrag:
Wenn du mit LIKE vergleichen willst, dann lohnt sich bei mehreren Feldern MATCH...AGAINST
 
Zuletzt bearbeitet von einem Moderator:
Hinweis: Bitte immer die Parameter prüfen die per GET/POST hereinkommen um wie schon oben gesagt Injection zu vermeiden.

Am besten PDO verwenden:
PHP:
$vorname="Lucky";
$nachname="Luke";
$stmt = $pdo->prepare('SELECT kundennummer FROM AccountData WHERE vorname = :vorname AND nachname= :nachname');

$stmt->execute(array(':name' => $name, ':nachname' => $nachname));

foreach ($stmt as $row) {
    // mach was mit dem ergebnis $row
}

Alternativ kann natürlich die Variable mit mysql_real_escape_string escaped werden. Aber schau dir besser mal PDO an.

Gruß
 

Neue Beiträge

Zurück