Variablen Wert auf "egal" setzen

  • !!!

    PHP
    $result = mysql_query($query)
       or die ("MySQL-Fehler mit $sql:<br>" . mysql_error());

    !!!


    du meinst doch sicher:

    PHP
    $result = mysql_query($query)
       or die ("MySQL-Fehler mit $query:<br>" . mysql_error());

    ;)

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • sorry, aber ich steck einfach fest und komm nicht weiter :(

    Mittlerweile habe ich das Gefühl, dass es vielleicht mal wieder an meinem mangelnden Verständnis liegt....

    PHP
    $conditions = array();
    
    
        if (! empty($_POST['Bundesland']))
          $conditions[] = "bundesland='" . mysql_real_escape_string($_POST['Bundesland']) . "'";
    
    
       if (count($conditions))
          $query .= " where " . implode(" AND ", $conditions);

    Diese Anweisung bedeutet in meinem Verständnis folgendes:

    Falls das select Feld, dem ich den Namen "Bundesland" gegeben habe nicht leer ist, wird die Variable conditions um den entsprechenden Eintrag "Bundesland" erweitert und es wird dann geschaut, ob in meiner MySQL Tabelle in der Spalte "bundesland" ein entsprechender Eintrag zu finden ist.

    Mein Problem ist nämlich zur Zeit, dass mir immer der komplette Inhalt meiner Datenbank angezeigt wird, unabhängig davon, was ich in den select-Feldern auswähle.

    Mein (gekürzter) Code sieht so aus:

    übrigens wird mir auch keine id angezeigt... - da ist wohl auch ein Haken drin..

    Ich wär also mal wieder dankbar, wenn mich hier jemand einen Schritt weiter bringen könnte :rolleyes:

  • Wieso er dir die id nicht anzeigt kann ich dir sagen: Du Selectest die id überhaupt nicht bei deiner Abfrage:

    Code
    [COLOR=#000000][COLOR=#cc0000]
    Select
    stadt,bundesland,            
    from
    jobs
    [/COLOR][/COLOR]



    Zu der anderen Frage, es sieht eigentlich für mich alles richtig aus.
    Hast du dir deinen Query mal ausgeben lassen? Bekommt er überhaupt die Where-Klausel?

    Edit sagt: Wo ich meine gepostete Anfrage sehe, fällt mir auch ein Fehler auf.
    In deiner Abfrage ist das Komma nach bundesland zuviel. Entweder zeigst du uns nicht den Code mit dem du tatsächlich arbeitest und der dir alle Datensätze zurückgibt, oder du verschweigst uns eine MySQL-Fehlermeldung die dir mit deinem hier geposteten Code ausgeben werden muß und kriegst überhaupt keine Datensätze selected.
    Beides trägt nicht dazu bei, dass dir jemand helfen kann.

    Edit's Mama sagt:

    PHP
    if (! empty($_POST['Bundesland']))


    Kann es sein, dass du den Namen im Formular kleinschreibst? PHP ist case-sensitive bei Array-Keys.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

    3 Mal editiert, zuletzt von SinnlosS (27. Februar 2009 um 15:15)

  • sorry, will hier nichts verschweigen und auch nichts verheimlichen - dachte nur, dass es vielleicht übersichtlicher ist, wenn ich nur einen Ausschnitt poste, da der Rest des Codes mit dem gleichen Muster arbeitet.

    Also kurz zum Plan: Wie man an meinem mangelnden Plan sehen kann, bin ich kein Programmierer, sonder arbeite als Mediziner. Das, was ich programmieren kann habe ich mir in meiner Freizeit angeeignet. Aufgrund der sagen wir mal "nicht ganz optimalen Situtation" im Gesundheitswesen haben Kollegen und ich uns nach Alternativen umgesehen und keine Seite gefunden, die diese ordentlich auflistet. Also habe ich meine eingestaubten Kenntnisse wieder ausgegraben und versuche zur Zeit den Rost von diesen abzuschütteln. Die Abfrage dient dazu eine sehr einfach Jobbörse zu erstellen, auf der eben alternative Berufe gefunden werden können.

    So viel zur Idee und jetzt der Code (mit eingefügter id in Select) in voller Länge ;)

  • Hm, das sieht eigentlich alles passend aus, das einzige was mir auffällt ist beim select-feld für das Bundesland ein fehlendes Leerzeichen zwischen option und value an einer Stelle. Denke aber mal nicht, dass das daran liegt, wenn es auch bei den anderen Select-Feldern nicht klappt. ^^

    HTML
    <td>Bundesland:</td>
                                <td><select style="width:100%;" name="Bundesland" size="1">
                                    <option value="">alle</option>
                                    <optionvalue="Baden-W&uuml;rttemberg">Baden-W&uuml;rttemberg</option>

    Kannst du mal bei ein paar Feldern eine Auswahl treffen, dir den SQL-Query der generiert wird ausgeben lassen und hier posten?

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • So,weiß jetzt nicht ob ich das gemacht habe, was du gemeint hast.

    Hab nach dem mysql_query

    PHP
    echo "$result";

    eingefügt und den Rest auskommentiert.

    Ergebnis ist immer das Gleiche - egal welchen Werte ich für die Select-Felder nehme:

    Resource id #5

    Hoffe mal das hilft :?

  • Nein, das hilft leider nicht.
    $query meinte ich. Also die Anfrage die du mit mysql_query() an die Datenbank schickst.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • okay, dann bekomme ich

    Select id, firma, branche, stadt, bundesland, qualifikation, fach, gehalt, kurzbeschreibung, link from jobs

    das scheintwohl nicht ganz richtig zu sein... aber ich finde den Fehler trotzdem nicht :mad:

  • <form action="jobfinder.php" method="POST">

    Und noch ein Tipp: deine ganzen Select-Felder bzw. deren Werte solltes du ebenfalls in der DB stehen haben. Es tut nämlich nicht Not, dass du in deiner Tabelle jobs alle Daten wie Fach, Qualifikation, etc. in Klartext stehen hast, du verschwendest damit unnötig Resourcen

    Einmal editiert, zuletzt von bandit600 (27. Februar 2009 um 17:58)

  • es klappt :razz:

    Da den Fehler zu suchen hätte bei mir wohl noch ewig gedauert...

    Vielen Dank und bis zum nächsten Stolperstein ;)

    EDIT: Sorry, deinen Tipp verstehe ich nicht. Meinst du ich soll beispielsweise die Bundesländer alle durchnummerieren und dann statt Baden-Würtemberg z.B. eine 1 in die Tabelle eintragen?

    Einmal editiert, zuletzt von Questionmark (27. Februar 2009 um 18:10)

  • Hab doch noch ne Frage :rolleyes:

    Angenommen, jemand trifft eine Auswahl, die keine oder sehr viele Ergebnisse liefert und möchte dann seine Suche verfeinern. Wenn ich dann auf der "Ergebnisseite" einen "zurück" oder "Suche verfeinern" Link anbiete, wie kann ich dann das Formuar in der Weise darstellen, dass die soeben abgefragten Daten noch in den select-Feldern stehen?

    Ich beschäftige mich gerne selbst mit der Theorie - will ja wissen wie meine Seite funktioniert. Ich hätte nur gern einen Tipp wonach ich schauen muss.
    Sind Sessions da das richtige Gebiet oder gäbe es für so etwas bessere Lösungen?

    Danke ;)

  • und verrätst du mir auch noch was du mit deinem Tipp meintest die Select-Felder in die DB zu integrieren bzw. wie ich das bewerkstelligen kann?

    Meinst du, dass ich z.B. Baden-Würtemberg die 1 zuordne und dann statt des Textes nur die Zahl in die DB eintrage? Wie schaff ich es dann aber, dass bei der Ausgabe wieder der Text und nicht die Zahl steht?

    Danke

  • okay, also ich habe eine Lösung gefunden, die auch funktioniert :D

    Wollte nur einmal fragen, ob die Übernahme der ausgewählten Werte in das Formular auch einfacher zu bewerkstelligen werde.

    Also ich habe eine identische Formulardatei (logischerweise mit anderem Namen) angelegt.

    In die Auswertung der ersten Abfrage habe ich dann folgendes geschrieben:

    PHP
    session_start();
            $_SESSION['Fach'] = "{$_POST['Fach']}";
            $_SESSION['Qualifikation'] = "{$_POST['Qualifikation']}";
            $_SESSION['Bundesland'] = "{$_POST['Bundesland']}";
            $_SESSION['Gehaltswunsch'] = "{$_POST['Gehaltswunsch']}";
            $_SESSION['Branche'] = "{$_POST['Branche']}";

    die Weitergabe erfolgt dann über

    PHP
    if ($num_rows == 0)
        {
            echo "Zu Ihrer Anfrage wurden keine Ergebnisse gefunden.<br /><a href=\"suche2.php?' . SID . '\">Suche &auml;ndern</a>";

    und in das "neue" Formular habe ich dann jeweils an die erste Stelle eines select-Feldes folgenden Code eingebaut:

    Ich mein es funktioniert und ich bin stolz wie Oskar ;-). Aber es scheint mir jetzt so schon etwas umständlich zu sein und ich frage mich, ob es auch eine elegantere Möglichkeit gegeben hätte. Ich will ja schließlich dazulernen :roll:

    Einmal editiert, zuletzt von Questionmark (28. Februar 2009 um 12:58)

  • Der letzte PHP-Teil ist nicht schön.

    Erste Lösung: Du machst für jedes Selectfeld einen array in dem die Optionen stehen.
    Nehmen wir an du hast die Bundesländer in einem Array $bundesland stehen, beim generieren der Selectbox baust du dann eine Schleife in etwa folgender Form:

    PHP
    $options = "";
    foreach($bundesland as $value) {
        if($value==$_SESSION['bundesland'])
            $options.= "<option selected>$value</option>";
        else
            $options.= "<option>$value</option>";
    }
    $select_bundesland = "<select name='Bundesland'>$options</select>";

    $select_bundesland kannst du dann an passender Stelle in dein Formular einfügen.

    Zweite Lösung, und wesentlich besser, wäre der Vorschlag von Bandit, die Optionen in der DB abzulegen. Das hat nicht nur den Vorteil, dass du Datenbank-Ressourcen sparst, sondern wenn sich eine Option beispielsweise irgendwann mal in der Bezeichnung ändert, brauchst du das nur in der Tabelle wo eben diese Bezeichnungen stehen zu ändern. Alle eingetragenen Jobs übernehmen automatisch die neue Bezeichnung, da sie über eine ID auf den entsprechenden Eintrag in der entsprechenden Tabelle referenzieren.
    Ich habe gerade keine Zeit da ich nochmal weg muß, werde dafür aber später mal noch ein Beispiel posten wenn du die nötige Struktur noch nicht ganz nachvollziehen kannst.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • danke schon mal für deine Antwort. Ich freu mich schon auf deine Erklärung. Habe mir schon gedacht, dass Bandits Idee die bessere und flexiblere ist, habe aber keine Ahnung wie ich das bewerkstelligen kann :roll:

  • [!-- Jeglicher Code ungetestet --!]

    Nehmen wir mal diese Select-Box als Beispiel:

    HTML
    <td>
      <select style="width:100%;" name="Qualifikation" size="1">
        <option value="">alle</option>                    
        <option value="Student / -in">Student / -in</option>
        <option value="Assistenzarzt / -&auml;rztin">Assistenzarzt / -&auml;rztin</option>
        <option value="Facharzt / -&auml;rztin">Facharzt / -&auml;rztin</option>
        <option value="Oberarzt / -&auml;rztin">Oberarzt / -&auml;rztin</option>
        <option value="Professor / -in">Professor / -in</option>
      </select>
    </td>

    Dazu legst du dir eine Tabelle in deiner Datenbank an, z.B. `qualifikation` mit den Feldern `id` als Int Primary Key und `bezeichnung` als Varchar.
    In deiner Job-Tabelle speicherst du dann für die Qualifikation nur noch die Id. Wenn du dann etwas an der Bezeichnung der Qualifikation änderst wird das automatisch für alle eingetragenen Jobs übernommen.
    Auch das Hinzufügen weiterer Bezeichnungen erfolgt nur über die DB, du brauchst nichts am Skript zu ändern.

    Beispiel für die Generierung der Select-Box:

    Äquivalent umsetzbar auf die restlichen Select-Boxen.

    Du arbeitest intern nur noch mit den Ids der jeweiligen Felder. Die Bezeichnungen brauchst du nur für die Ausgabe.

    Wenn du jetzt für einen Job eine Übersicht zur Ausgabe brauchst kannst du deine SQL-Abfrage z.B. so aufbauen:

    Wenn du weitere Fragen hast einfach fragen. :)

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Mag sein, dass ich äußerst begriffsstutzig bin, aber muss ich für jede einzelne Selectbox ne neue Verbindung zu DB aufbauen?

    Alternativ würde mir nur noch einfallen den gesamten HTML-Code zu "echo"n - sieht dann aber auch nicht gerade schick aus.... :roll:

    und noch ne Frage:

    Wozu dient dieser Teil:

    PHP
    $sel = $_SESSION['qualifikation']==$row['id'] ? " selected" : "";

    lediglich dazu, die "Rückkehr" auf das gleiche Formular mit bestehen bleibenden Einträgen zu ermöglichen???

    und noch ne Frage:
    läuft die Abfrage dann ausschließlich über Sessions? Habe jetzt folgendes gemacht:

    Habe nach deinem Muster die Tabellen erstellt und auch den entsprechenden Code übernommen. Das ganze sieht bei mir jetzt etwas umständlich aus...

    HTML
    <table>
      <tr>
        <td> <?php DB-Verbindungsaufbau -plus Selectbox1 ?> </td>
      </tr>
      <tr>
        <td> <?php DB-Verbindungsaufbau -plus Selectbox2 ?> </td>
      </tr>
    </table>

    Mit obiger Abfrage bekomm ich dann folgendes:

    MySQL-Fehler mit
    SELECT j.id AS id, j.firma AS firma, b.bezeichnung AS branche, j.stadt AS stadt, bl.name AS bundesland, q.bezeichnung AS qualifikation, f.bezeichnung AS fach, j.gehalt AS gehalt, j.kurzbeschreibung AS kurzbeschreibung, j.link AS link FROM jobs j, branche b, bundesland bl, qualifikation q, fach f WHERE j.id= AND b.id=j.branche AND bl.id=j.bundesland AND q.id=j.qualifikation AND f.id=j.fach

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND b.id=j.branche AND bl.id=j.bundesland AND q.id=j' at line 20

    Ich will jetzt nicht aufgeben, aber ohne Hilfe wird das dann glaub ich nichts mehr... :(

    die Suche erfolgt über:

    Danke

    6 Mal editiert, zuletzt von Questionmark (28. Februar 2009 um 23:34)