Mehrere SQL Abfragen anhand eines Formular

anna22

Grünschnabel
Hallo an alle!
Erstmal sorry, wenn folgende Problematik schon einmal aufgetreten ist, aber ich konnte beim besten Willen hier in den Foren keine Lösung für mein Problem finden.

Also ich habe als "PHP-SQL" - Frischling folgendes Problem:
Ich möchte für unsere Jugendsportabteilung eine Mysql-Datenbank anlegen, was mir bislang gelungen ist.
Jetzt möchte ich anhand eines Suchformulares bestimmte bestimmte Personengruppen herausfiltern.

Was ich bislang habe ist z.b. dass mir anhand von radio-buttons (Auswahlmöglichkeiten) bestimmte Altersgruppen angeben werden.
Jetzt möchte ich allerdings noch anhand von checkboxen auswählen können, ob es sich um Jugens oder Mädchen handelt... sprich ich möchte meine Suche verfeinern. Ich denke mal es müsste irgendwie einen "AND" - Verknüpfung oder sowas zwischen dem Alter und dem Geschlecht sein, aber irgendwie klappt das nicht.

Hier mal meine Teil-Codes:

Suchformular:

<form action = "suchen.php" method = "post">
<input type="radio" name="age"
value="1" checked> 6 - 8 <p>
<input type="radio" name="age"
value="2"> 9 - 11 <p>
<input type="radio" name="age"
value="3"> 12 - 14 <p>

<input type="checkbox" name="geschlecht[] value="männlich">
blond <p>
<input type="checkbox" name="geschlecht[] value="weiblich">
schwarz <p>

<input type="submit">
<input type="reset">
</form>


suchen.php:

$sqlab = "select name, age ";
$sqlab .= " from mitglieder where ";

if ($age==1)
$sqlab .= "age >= 6 and age <= 8";
else if ($age==2)
$sqlab .= "age >9 and age <= 11";
else
$sqlab .= "age > 12 and age <= 14";




$res = mysql_db_query("datenbankname", $sqlab);
$num = mysql_num_rows($res);
if ($num==0)
echo "keine passenden Datensätze gefunden";

for ($i=0; $i<$num; $i++)
{
$name = mysql_result($res, $i, "name");
$age = mysql_result($res, $i, "age");


echo "$name, $age <br>";
}

---------------
Wie bzw. was sollte ich denn hinzufügen, damit in der suchen.php eine solche detaillierte Verknüpfung zustanden kommt?
Danke Euch allen schon im voraus.
 
Nach dem Du das Alter eingebaut hast, kannst Du den String auf dieselbe Weise um Deine weiteren Suchparameter erweitern. Also mit .=, dann fügst Du nochmal and hinzu und vergleichst das entsprechende Feld der Tabelle mit der Usereingabe. Wenn beide Felder markiert sind lässt Du die weitere Bedingung natürlich weg.
 
Erstmal danke für Deine schnelle Antwort.
Aber leider bin ich damit wirklich gerade überfordert und weiss jetzt nicht wirklich wie Du dass meinst... und wie und wo soll ich das AND denn einfügen? Danke schon im voraus!
Gruss Anna
 
PHP:
//...
 else
$sqlab .= "age > 12 and age <= 14";

if (isset($_POST['geschlecht']) {
    if ($_POST['geschlecht'][0]=='männlich') {
        $sqlab.=" and geschlecht LIKE 'männlich'";
    } else if ($_POST['geschlecht'][0]=='weiblich') {
        $sqlab.=" and geschlecht LIKE 'weiblich'";
    }
    //Die bedingung musst Du natürlich anpassen, 
    //je nach dem, wie Du das Geschlecht in der 
    //Datenbank speicherst
}


$res = mysql_db_query("datenbankname", $sqlab);
//...
Du solltest übrigends auch Dein $age mit dem superglobalen Array $_POST agfragen.

Gruß hpvw
 
Hey danke, bist ein Schatz. Musste zwar kurz was ändern, aber Lösungsansatz hat mir echt geholfen! :)
Ja werde ich dann auch mit dem "age" so machen...

Danke!

Gruss Anna
 
Nochmal ganz kurz eine Frage.
Also den Unterschied und der Lösungsansatz stimmen.
Wenn ich männlich mit der checkbox auswähle werden mir alle männlichen angezeigt, ebenso umgekehrt die weiblichen. Wenn ich in der checkbox nichts anklicke, werden mir alle in der Altersklasse, egal ob m oder w, angezeigt. Soweit alles klar und klappt auch. Wenn ich aber dann in den Checkboxen beide Geschlechter anklicke, werden mir nur die Frauen angezeigt und nicht mehr die Männer? Woran kann das liegen?

Hängt das eventuell mit den Nullen in den eckigen Klammer zusammen (deren Logik ich nicht ganz verstehe)?

Sonst habe noch zu meinem anfänglichen Quelltext im Formular den Zusatz "multiple" hinzugefügt, macht aber trotzdem nichts.

Codes siehe oben...

Vielen Dank.
Anna
 
HTML:
 <input type="checkbox" name="geschlecht[] value="männlich">
blond <p>
<input type="checkbox" name="geschlecht[] value="weiblich">
schwarz <p>
EDIT: Ich sehe gerade, da fehlen noch die abschließenden Anführungszeichen /EDIT
Du übergibst geschlecht als Array, sind beide markiert, findest Du sie im Arrayindex 0 und 1. Das musst Du noch abfangen mit einer weiteren if-Bedingung.
PHP:
if (isset($_POST['geschlecht']) && (size_of($_POST['geschlecht'])<2)) {
statt
PHP:
if (isset($_POST['geschlecht'])) {
 
Zuletzt bearbeitet:
Hallo und danke für die Antwort.
Leider bekomme ich immer einen "Parse-Error", wenn ich die Zeilen ausstausche.
Aber ich probier es jetzt mal mit dem size_of. Klingt schonmal logisch und gut.

Gruss Anna
 
Sorry, klappt nicht...
Wenn ich die Zeile so von Dir übernehme, dann bekomme ich eine Fehlermeldung wie oben beschrieben. Wenn ich noch eine weitere Klammer setze, zeigt er mir als Ergebnis jetzt gar nichts mehr an...
Ich glaub ich ersezte jetzt die checkbox-Auswahl "männlich/weiblich" durch radio-buttons. Dann ist es zwar nicht wie ich mir das vorgestellt habe, aber für den Anfang soll das reichen.
Werde mich da erstmal langsam heranarbeiten. Vielleicht kommt dann auch der Durchblick und das Verständnis. Zumal für Deinen Lösungsansatz noch die nötige Logik und das Wissen fehlt.
Trotzdem Danke.

Gruss Anna
 

Neue Beiträge

Zurück