• Hi ,

    habe ein Problem. Ich habe in einer Datenbank verschiedene User. Nun möchte ich in einer Such Funktion die Möglichkeit haben die User der Datenbank mittels Alter von/bis ausgeben zulassen.
    Mein Problem ist das ich gleichzeitg auchnoch unterscheiden möchte zwischen männlich und weiblich.


    Hier mal wie ich es versucht habe zu lösen. Geht nur leider nicht..

    PHP
    [/FONT][/COLOR][COLOR=#666666][FONT=Trebuchet MS]   <form method="post" >       Geschlecht:<input type="radio" name="gsuche" value="frau">&nbsp;weiblich      <input type="radio" name="gsuche" value="mann">&nbsp;männlich <br/>      Alter von: <input type=int name "lebenvon" maxlength="2" size="2">       bis: <input type=int name "lebenbis" maxlength="2" size="2"> <br/>      <br/><br/>     <input type="submit" value="suchen" />     </form>             <?php     $verbindung = mysql_connect("localhost","xxxxxxxx","xxxxxxxx")       or die ("Fehler im System");       mysql_select_db("xxxxxxxx")       or die ("Verbindung mit Datenbank nicht möglich");   $lebenvon =  $_POST["lebenvon"];        $lebenbis =   $_POST["lebenbis"];        $gsuche = strtolower($_POST["gsuche"]);        $abfrage = "SELECT user,leben,gewicht FROM assidaten    WHERE geschlecht = '$gsuche'    AND (leben >= '$lebenvon' AND leben <= '$lebenbis')    ORDER by leben ASC";   $ergebnis = mysql_query($abfrage);   while($row = mysql_fetch_object($ergebnis))     {      ?>      <p>         <b><?php echo htmlspecialchars($row->user); ?></b>,         Alter: <b><?php echo htmlspecialchars($row->leben); ?></b>,         Gewicht: <b><?php echo htmlspecialchars($row->gewicht); ?> kg</b>      </p>     <?php      }   mysql_close($verbindung);?>          [/FONT][/COLOR][COLOR=#666666][FONT=Trebuchet MS]

    [/FONT][/COLOR]


    Ich hab einfach keine Lösung wie ich den SELECT befehl richtig schreiben soll.
    Vielen Dank schonmal :o)

  • Ist ein wenig schwierig da so einfach was zu sagen.

    Wie sehen denn die Daten in der DB aus? Poste da doch mal 3-5 Datensätze, dass man die mal sieht.

    Dann das selbe wie wie schon im Post davor. Was genau ist der Fehler? Steht in den Variablen das drinnen was drinnen stehen soll? Ist auch der Datentyp richtig? Wie schaut die Query "ausgefüllt" aus, also ein "echo" vor das $abfrage.

    Was passiert denn? Bzw. Was passiert nicht. Gibt es Fehler? Also ein "echo mysql_error();" hinter die Zeile mit dem mysql_query

    So, was anderes aber viel wichtiger, da DU ja mit Formularen arbeitest. Schau Dir mal das hier an. Lese es wenn es sein muss mehrfach... Das musst Du verstehen und umsetzen.
    *** Link veraltet ***
    *** Link veraltet ***

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Also die Query schaut so aus

    SQL
    SELECT user,leben,gewicht FROM assidaten       WHERE geschlecht = ''    AND (leben >= '' OR leben <= '')    ORDER by leben ASC

    Fehler gibt es keinen. Es findet nur keine Ausgabe der Datensätze statt. Also es passiert garnix.

    Hier mal ein Datensatzbeispiel:

    anna
    , Alter: 23, Gewicht: 66 kg
    cindy, Alter: 26, Gewicht: 98 kg
    Ich möchte also die SELECT Abfrage so haben das z.b. nur die Datensätze angezeigt werden die das Alter >= 24 und Alter >= 99 haben.
    Dann dürfte es mir ja anna nicht anzeigen sondern nur cindy.

    Wie schreib ich das denn richtig wenn ich das alter von/bis vorher durch eine eingabe bestimmen möchte ?

  • Das ist also die Query, die gesendet wird? Also per echo angezeigt?

    Zitat

    SELECT user,leben,gewicht FROM assidaten WHERE geschlecht = '' AND (leben >= '' OR leben <= '') ORDER by leben ASC

    Wenn dem so ist... Fällt Dir was auf? Da fehlen alle Inhalte der Variablen. Alle Felder, nach denen gesucht werden soll sind leer.

    Deine Query an sich passt so schon, nur da fehlen eben die Inhalte der Variablen.

    Mal fiktiv mit Deinen Werten geschrieben...

    SQL
    SELECT user,leben,gewicht FROM assidaten WHERE geschlecht = 'frau' AND (leben >= '24' AND leben <= '99') ORDER by leben ASC


    In der Klammer kommt ein AND, kein OR. Der Wert soll ja größer als der erste und kleiner als der zweite sein.

    Schreibe mal nach das "$ergebnis = mysql_query($abfrage);" in ein Zeile darunter...

    Zitat

    print_r($_POST);
    print_r($abfrage);


    und poste das dann hier.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • nach dem einfügern der zeile bekomme ich nun das hier :

    Array( [gsuche] => frau)SELECT user,leben,gewicht FROM assidaten WHERE geschlecht = 'frau' AND (leben >= '' AND leben <= '') ORDER by leben ASC

    So wie es aussieht funktioniert zwar die Abfrage ob frau oder mann aber nicht die alter von/bis. komisch...
    wie muss ich dass denn schreiben das es funktioniert ? hab ich die variablen falsch benannt ?

  • Also, Dein Select ist nicht das Problem, denn das macht nur das, was Du ihm gibst.

    Das $_POST kommt vorher und füttert ja das Select, doch im $_POST fehlen die anderen Werte.

    ok... das sind die Schuppen wieder, die mir von den Augen fallen.... Du sagtest Problem mit Query, Du hast aber kein Problem mit Query, sondern mit HTML!

    Zitat

    Geschlecht:<input type="radio" name="gsuche" value="frau">&nbsp;weiblich
    <input type="radio" name="gsuche" value="mann">&nbsp;männlich <br/>
    Alter von: <input type=int name "lebenvon" maxlength="2" size="2">
    bis: <input type=int name "lebenbis" maxlength="2" size="2"> <br/>

    Was soll denn das "type=int" sein? Das gibt es gar nicht.
    Mach mal daraus ein type="text" .

    Edit und gleich nochwas....

    bei name "lebenvon" und name "lebenbis" fehlt das Gleichheitszeichen dazwischen.

    -->
    name="lebenvon"
    name="lebenbis"

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • oh wie ärgerlich... das hätte ich selber sehen müssen.
    jetzt gehts , hier mal wie es jetzt aussieht:

    Das "type= int" wollte ich schreiben damit nur Zahlen eingaben verarbeitet werden und keine Buchstaben, dacht das geht so .
    Vielen Dank nochmals.
    Und ich werde wenn alles funktioniert auchnoch an der Sicherheit arbeiten aber ich möchte erstmal alles zum laufen bringen und es verstehen.

  • Zitat von butterzeugs;19071

    Das "type= int" wollte ich schreiben damit nur Zahlen eingaben verarbeitet werden und keine Buchstaben, dacht das geht so .


    Genau das ist eines der Probleme mit der Sicherheit. Formulardaten sind immer Text, da kannst Du machen was Du willst. Selbst wenn Du da Zahlen eintippst sind die vom Typ CHAR und nicht INT.

    Diese Prüfungen müssen serverseitig, also mit PHP erfolgen. Wenn was nicht stimmt, dann dem Nutzer eine Meldung ausgeben, was falsch ist. Und nur wenn alles passt, dann an die DB übergeben.

    Die Links oben sind nur Anleitungen, die verhindern sollen, dass "Schadcode" an die DB gesendet wird. Die prüfen aber auch keine Dateneingaben, das musst Du selbst im Script machen.

    Selbst wenn Du das zur Auswahl "Mann" und "Frau" hast kann man per Hand dort andere Werte einschleusen. Also musst Du auch das prüfen. Es ist nicht sichergestellt, dass nur "frau" oder "mann" gesendet werden, auch wenn das Formular selbst keine anderen Werte bietet. Wie gesagt, die kann man auch so senden, da braucht man kein Formular zu ;)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(