Datenbankabfrage MySql Mehrfachauswahl Checkbox

sunflowerwoman70

Grünschnabel
Hallo an alle.
Sorry, ich bin am verzweifeln.
Habe gestern schon hier im Forum gesucht und teilweise Hilfen gefunden, aber jetzt bin ich fast am verzweifeln, da ich mich erst in PHP einarbeiten muss.

Mein Problem ist folgendes:

Ich habe eine Datenbank wo einige Werte gespeichert werden.
Einige Werte möchte ich in einer Suchabfrage im Formular anhand von checkboxen, mit Mehrauswahl auswerten.

Die erste Abfrage z.B. in dieser folgenden Form geht problemlos in allein Varianten (alles klicken, nur weiblich oder männlich klicken etc)

PHP:
if( isset($_POST['geschlecht']) && (sizeof($_POST['geschlecht'])<2) ) {
	if( $_POST['geschlecht'][0]=='weiblich' ) {
		$sqlab.=" and geschlecht LIKE 'weiblich'";
	} elseif( $_POST['geschlecht'][0]=='männlich' ) {
		$sqlab.=" and geschlecht LIKE 'männlich'";
	}
}


Wenn ich allerdings mehrere Variablen habe, dann klappt das hinten und vorne nicht:
Siehe hier:

PHP:
if( isset($_POST['herkunft']) && (sizeof($_POST['herkunft'])<6) ) {
	if( $_POST['herkunft'][0]=='Afrika' ) {
		$sqlab.=" and herkunft LIKE 'Afrika'";
	} elseif( $_POST['herkunft'][0]=='Asien' ) {
		$sqlab.=" and herkunft LIKE 'Asien'";
	} elseif( $_POST['herkunft'][0]=='Australien' ) {
		$sqlab.=" and herkunft LIKE 'Australien'";
	} elseif( $_POST['herkunft'][0]=='Europa' ) {
		$sqlab.=" and herkunft LIKE 'Europa'";
	} elseif( $_POST['herkunft'][0]=='Nordamerika' ) {
		$sqlab.=" and herkunft LIKE 'Nordamerika'";
	} elseif( $_POST['herkunft'][0]=='Südamerika' ) {
		$sqlab.=" and herkunft LIKE 'Südamerika'";
	}
}

Liegt das an den falschen else if - abfragen?
Wäre um jede Hilfe dankbar.

Liebe Grüsse Tanja
 
Bei einer Entweder-Oder-Frage sind so genannte Radio-Buttons oder ein select-Menü besser geeignet, da dort immer nur – je nach Einstellung – eine Option zur Auswahl möglich ist. Beispielsweise:
HTML:
<label><input type="radio" name="geschlecht" value="männlich">männlich</label>
<label><input type="radio" name="geschlecht" value="weiblich">weiblich</label>
HTML:
<select name="herkunft">
 	<option value="Afrika">Afrika</option>
 	<option value="Asien">Asien</option>
 	<option value="Australien">Australien</option>
 	<option value="Europa">Europa</option>
 	<option value="Nordamerika">Nordamerika</option>
 	<option value="Südamerika">Südamerika</option>
</select>
 
Vielen Dank für die Antwort.
Mit radio-buttons klappt das auch.
Ich möchte aber dennoch das Problem mit checkboxen und mit einer Mehrfachauswahl lösen. Wenn ich jemand wie in dem Beispiel aus Europa und gleichzeitig aus Afrika markiere und suche.
 
Probier mal Folgendes:
PHP:
<?php

	$query = 'SELECT … FROM … WHERE 0 ';
	if( count($_POST['herkunft'])>1 ) {
		$query .= ' OR `herkunft` LIKE "'.join('" OR `herkunft` LIKE "', array_map('mysql_escape_string', $_POST['herkunft'])).'" ';
	}

?>
 
Sorry, irgendwas klappt da nicht...

Am besten nochmal meinen Code für die Abfrage:

<?php

include("include.php");

$sqlab = "select id, geschlecht, herkunft";
$sqlab .= " from erzieher where ";

if( isset($_POST['geschlecht']) && (sizeof($_POST['geschlecht'])<2) ) {
if( $_POST['geschlecht'][0]=='weiblich' ) {
$sqlab.=" and geschlecht LIKE 'weiblich'";
} elseif( $_POST['geschlecht'][0]=='männlich' ) {
$sqlab.=" and geschlecht LIKE 'männlich'";
}
}

if( isset($_POST['herkunft']) && (sizeof($_POST['herkunft'])<6) ) {
if( $_POST['herkunft'][0]=='Afrika' ) {
$sqlab.=" and herkunft LIKE 'Afrika'";
} elseif( $_POST['herkunft'][0]=='Asien' ) {
$sqlab.=" and herkunft LIKE 'Asien'";
} elseif( $_POST['herkunft'][0]=='Australien' ) {
$sqlab.=" and herkunft LIKE 'Australien'";
} elseif( $_POST['herkunft'][0]=='Europa' ) {
$sqlab.=" and herkunft LIKE 'Europa'";
} elseif( $_POST['herkunft'][0]=='Nordamerika' ) {
$sqlab.=" and herkunft LIKE 'Nordamerika'";
} elseif( $_POST['herkunft'][0]=='Südamerika' ) {
$sqlab.=" and herkunft LIKE 'Südamerika'";
}
}

$res = mysql_db_query("arbeitslose", $sqlab);
$num = mysql_num_rows($res);
if ($num==0)
echo "Sorry, keine Modelle zur Deiner Anfrage gefunden!";

...

?>


Ich vershehe nur nicht warum, warum es mit zwei Variablen wie beim Geschlecht geht und wenn ich mehr als 2 habe, dann klappt es nich wie ich es will...
Wenn ich nur z.B. nur Europa in der checkbox klicke dann geht es, nur wenn ich Europa und Afrika klicke zeigt es mir an an was es will, obwohl ich diese Werte richtig in der Datenbank habe.
 
Probier mal Folgendes:
HTML:
<form action="/test" method="post">
	<label><input type="checkbox" name="geschlecht[]" value="männlich">männlich</label>
	<label><input type="checkbox" name="geschlecht[]" value="weiblich">weiblich</label>
	<label><input type="checkbox" name="herkunft[]" value="Afrika">Afrika</label>
	<label><input type="checkbox" name="herkunft[]" value="Asian">Asian</label>
	<label><input type="checkbox" name="herkunft[]" value="Australien">Australien</label>
	<label><input type="checkbox" name="herkunft[]" value="Europa">Europa</label>
	<label><input type="checkbox" name="herkunft[]" value="Nordamerika">Nordamerika</label>
	<label><input type="checkbox" name="herkunft[]" value="Südamerika">Südamerika</label>
	<input type="submit">
</form>
PHP:
<?php

	include 'include.php';


	$query = 'SELECT `id`, `geschlecht`, `herkunft` FROM `erzieher` WHERE 0 OR (';
	if( isset($_POST['geschlecht']) ) {
		$query .= ' ( `geschlecht` = "'.join('" OR `geschlecht` = "', array_map('mysql_escape_string', $_POST['geschlecht'])).'" ) ';
	}
	if( isset($_POST['herkunft']) ) {
		$query .= ' AND ( `herkunft` LIKE "'.join('" OR `herkunft` LIKE "', array_map('mysql_escape_string', $_POST['herkunft'])).'" ) ';
	}
	$query .= ' ) ';
	$result = mysql_db_query('arbeitslose', $query);

	…

?>
 
Danke nochmal für die schnelle Hilfe und Antwort...

Ich denke es klappt fast...

Leider bekomme ich immer die folgende Fehlermeldung:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ...


Hier nochmal der Codeauszug vom betreffenden Teil:

...

$query .= ' ) ';
$result = mysql_db_query('arbeitslose', $query);
$num = mysql_num_rows($result);
if ($num==0)
echo "Keine Treffer gefunden!";

...

Ist da irgendwas noch falsch.
Wäre nochmal über eine Antwort dankbar ;)

Gruss Tanja
 
Soetwas ähnliches habe ich schon erwartet, denn wenn weder der Parameter „geschlecht“ noch „herkunft“ gesetzt ist, wird eine syntaktisch falsche Abfrage generiert. Deshalb probier mal Folgendes:
PHP:
<?php

	include 'include.php';


	$query = 'SELECT `id`, `geschlecht`, `herkunft` FROM `erzieher` WHERE 0 OR (';
	if( isset($_POST['geschlecht']) ) {
		$query .= ' ( `geschlecht` = "'.join('" OR `geschlecht` = "', array_map('mysql_escape_string', $_POST['geschlecht'])).'" ) ';
	}
	if( isset($_POST['herkunft']) ) {
		$query .= ' AND ( `herkunft` LIKE "'.join('" OR `herkunft` LIKE "', array_map('mysql_escape_string', $_POST['herkunft'])).'" ) ';
	}
	if( !isset($_POST['geschlecht']) && !isset($_POST['herkunft']) ) {
		$query .= ' 1 ';
	}
	$query .= ' ) ';
	$result = mysql_db_query('arbeitslose', $query) or die(mysql_error());   // Or-die-Erweiterung zur Fehlerdiagnose

	if( mysql_num_rows($result) == 0 ) {
		echo 'Keine Treffer gefunden!';
	}

	…

?>
 
Wow super, das klappt schonmal...
Zumindest wenn niemand in der Datenbank gefunden wird...

Ähmm... sorry ist mir jetzt schon langsam peinlich nochmal zu fragen, aber wie gesagt, bin da noch super Frischling und versuch mich da auf die schnelle durchzurschteln a la learning bei doing.

Aber wie geht das wenn ich jetzt Treffer habe.
Bislang zeigt er mir ja an "Keine Treffer" wenn es keine gibt. Ist ja auch ok.
Aber wie mach ich das wenn er mir bei Treffer alle Namen anzeigen soll:

Hier nochmal mein Auszug was zum bislagen Ergebnisanzeigen - Chaos führt:

...

$query .= ' ) ';
$result = mysql_db_query('arbeitslose', $query) or die(mysql_error()); // Or-die-Erweiterung zur Fehlerdiagnose

if( mysql_num_rows($result) == 0 ) {
echo 'Keine Treffer gefunden!';
}

for ($i=0; mysql_num_rows($result); $i++)
{
$id = mysql_result($result, $i, "id");

echo " $name <br>

}

also ab der for-schleife... das war mein alter Code denn ich vohher hatte und wo mir zumindest immer die Treffer mit den zwei Varianten angezeigt wurden.
Muss ich jetzt den Namen ($name) auch noch irgendwo angeben?
Über einen Lösungsvorschlag wär ich nochmal sehr dankbar.

Liebe Grüsse Tanja
 
Arbeite lieber mit einer while-Kontrollstruktur und einer mysql_fetch_*-Funktion:
PHP:
<?php

	…

	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		echo $row['id'].' '.$row['geschlecht'].' '.$row['herkunft'].'<br>';
	}

	…

?>
Falls du weitere Daten aus der Datenbank anzeigen möchtest, musst du diese auch in der Abfrage aufführen.
 
Zurück