Tian: Anführungszeichen in Abfrage

Hey,
ich bin ein Anfänger im Bereich PHP und habe nun ein paar Daten in einer DB und möchte da mit einer Suchanfrage, die Daten auslesen.

Ich habe ein Hauptsuchbegriff und wenn man auf "erweiterte Suche" klickt gibt es weitere Felder, mit denen man die Suche einschränken kann.
Das wollte ich damit realisieren, dass ich mir einen Suchstring zusammenbaue und den dann in die Abfrage reinsetze.

[PHP]$qrystring = '(nutzerdaten.beruf = ' . $_GET['beruf'] . ')';
if($_GET['geschlecht'] != '') {
 $qrystring .= ' AND (nutzerdaten.geschlecht = ' . $_GET['geschlecht'] . ')';
}

$sql = "SELECT * FROM nutzerdaten WHERE $qrystring ORDER BY nutzerdaten.geb_tag ASC";
//$rs = mysql_query($sql) or die("Fehler beim Laden der Userdaten!");[/PHP]

Daraus ergibt sich dann bei http://localhost/form/index.php?beruf=1&geschlecht=weiblich folgender String:
SELECT * FROM nutzerdaten WHERE (nutzerdaten.beruf = 1) AND (nutzerdaten.geschlecht = weiblich) ORDER BY nutzerdaten.geb_tag ASC

Das Problem ist nun glaube ich, dass das weiblich in Anführungszeichen muss. Aber genau das krieg ich nicht hin. Ich bekomme da weder ein Hochkomma (') noch Anführungssriche (") um das weiblich rum.
Wie muss ich da vorgehen? Ist meine gesamte Vorgehensweise überhaupt sinnvoll?

Vielen lieben Dank schonmal für Anregungen und Hilfe,
Tian

  1. Hi!

    [PHP]$qrystring = '(nutzerdaten.beruf = ' . $_GET['beruf'] . ')';
    if($_GET['geschlecht'] != '') {
    $qrystring .= ' AND (nutzerdaten.geschlecht = ' . $_GET['geschlecht'] . ')';
    }

    Das darfst du in gar keinem Fall so machen.
    Niemals darfst du Daten ungeprüft und unbereinigt in deine Abfragen einbauen.
    Bei Code wie diesem wäre es problemlos möglich, bösartigen Code einzuschleusen.

    Schau mal beispielsweise hier:
    SQL Injection

    Das Problem ist nun glaube ich, dass das weiblich in Anführungszeichen muss. Aber genau das krieg ich nicht hin. Ich bekomme da weder ein Hochkomma (') noch Anführungssriche (") um das weiblich rum.

    Warum nicht? Wie hast du das denn versucht?
    Das du die Quotes escapen mußt, ist dir klar, oder?
    Durch einen vorangestellten Backslash verlieren die Sonderzeichen wie Quotes ihre besondere Bedeutung.

    so:
    $sql = "SELECT bla FROM blubb WHERE quotes = "". hier .""";
    oder halt so:
    $sql = "SELECT bla FROM blubb WHERE quotes = '". hier ."'";

    Schöner Gruß,
    rob