Such,- btw. Filterfunktion

CreativPur

Erfahrenes Mitglied
Hi,

ich habe mir eine kleine Filterfunktion erstellt, wo ich nur bestimmte Datensätze auslesen lassen möchte.
Mein Suchformular:
HTML:
<form action="" method="POST">
    Geschlecht:
    <select name="anrede">
      <option value="<?php echo htmlspecialchars($_POST['anrede']) ?>"><?php echo htmlspecialchars($_POST['anrede']) ?></option>
      <option value="Frau">Weiblich</option>
      <option value="Herr">Männlich</option>
      <option value="">Egal</option>
    </select>
    Mindestalter: <input name="alter_sitter" type="text" value="<?php echo htmlspecialchars($_POST['alter_sitter']) ?>" />
    PLZ: <input name="plz" type="text"  value="<?php echo htmlspecialchars($_POST['plz']) ?>"/>
    <hr />
    <input name="" type="submit" />
</form>

Meine Select-Abfrage:
PHP:
<?php
$anrede = htmlspecialchars($_POST['anrede']);
$alter_sitter = htmlspecialchars($_POST['alter_sitter']);
$plz = htmlspecialchars($_POST['plz']);
   
$statement = $pdo->prepare("SELECT * FROM sitters WHERE anrede = ? AND alter_sitter >= ? AND plz = ? ORDER BY plz");
$statement->execute(array($anrede, $alter_sitter, $plz));  

$anzahl_sitter = $statement->rowCount();
echo "Es wurden $anzahl_sitter Sitter gefunden<hr />";

while($row = $statement->fetch()) {

   echo $row['plz']." ".$row['ort']."<br />";   
   echo $row['vorname']." ".$row['nachname']."<br />";
   echo "E-Mail: ".$row['email']."<br /><br />";
}
?>

Das funktioniert auch soweit..
In diesem Fall muss ich allerdings alle 3 Felder ausfüllen um ein Resultat zu bekommen.
Wie kann ich es realisieren, wenn mir z.B. das Geschlecht egal ist, oder auch das Mindestalter ?
 
Das Problem ist, wenn ich die Abfrage mit OR mache, bekomme ich auch das weibliche Geschlecht angezeigt, obwohl ich zuvor männlich eingegeben habe
 
So auf die schnelle. Ist möglich, dass du nicht mit isset() sondern etwas anderem prüfen musst.
Mein letzter PHP-Code liegt etwa 3 Jahre zurück...

PHP:
$anrede = htmlspecialchars($_POST['anrede']);
$alter_sitter = htmlspecialchars($_POST['alter_sitter']);
$plz = htmlspecialchars($_POST['plz']);

$sql = 'SELECT * FROM sitters %s ORDER BY plz';
$whereA = array();

if(isset($anrede)) 			$whereA[] = 'anrede = :anrede';
if(isset($alter_sitter)) 	$whereA[] = 'alter_sitter = :alter_sitter';
if(isset($plz)) 			$whereA[] = 'plz = :plz';


$whereS = count($whereA) > 0 ?  'WHERE ' . implode(' AND ', $whereA) : '';

$sql = sprintf($sql, $whereS);
$statement = $pdo->prepare($sql);

if(isset($anrede)) 			$statement->bindValue(':anrede', $anrede, PDO::PARAM_STR);
if(isset($alter_sitter)) 	$statement->bindValue(':alter_sitter', $alter_sitter, PDO::PARAM_STR);
if(isset($plz)) 			$statement->bindValue(':plz', $plz, PDO::PARAM_STR);

$statement->execute();
 
Hi Yaslaw,
vielen Dank für deinen Schnellen Einsatz..

Ich habe es folgend mit dem Formular übernommen, leider bekomme ich kein Resultat zurück.
Die Angaben deines Script habe ich überprüft und alles ist korrekt..
Allerdings weiß ich immer noch nicht, was ich in der Option "EGAL" einsetzen muss.

PHP:
<?php
require_once("inc/config.inc.php");

$anrede = htmlspecialchars($_POST['anrede']);
$alter_sitter = htmlspecialchars($_POST['alter_sitter']);
$plz = htmlspecialchars($_POST['plz']);
$sql = 'SELECT * FROM sitters %s ORDER BY plz';
$whereA = array();
if(isset($anrede))          $whereA[] = 'anrede = :anrede';
if(isset($alter_sitter))    $whereA[] = 'alter_sitter = :alter_sitter';
if(isset($plz))             $whereA[] = 'plz = :plz';
$whereS = count($whereA) > 0 ?  'WHERE ' . implode(' AND ', $whereA) : '';
$sql = sprintf($sql, $whereS);
$statement = $pdo->prepare($sql);
if(isset($anrede))          $statement->bindValue(':anrede', $anrede, PDO::PARAM_STR);
if(isset($alter_sitter))    $statement->bindValue(':alter_sitter', $alter_sitter, PDO::PARAM_STR);
if(isset($plz))             $statement->bindValue(':plz', $plz, PDO::PARAM_STR);
$statement->execute();

  
?>

<form action="" method="POST">
    Geschlecht:
    <select name="anrede">
      <option value="<?php echo htmlspecialchars($_POST['anrede']) ?>"><?php echo htmlspecialchars($_POST['anrede']) ?></option>
      <option value="Frau">Weiblich</option>
      <option value="Herr">Männlich</option>
      <option value="">Egal</option>
    </select>
    Mindestalter: <input name="alter_sitter" type="text" value="<?php echo htmlspecialchars($_POST['alter_sitter']) ?>" />
    PLZ: <input name="plz" type="text"  value="<?php echo htmlspecialchars($_POST['plz']) ?>"/>
    <hr />
    <input name="" type="submit" />
</form>

<?php
echo $row['vorname'].' <br />';
 
Was bringt der Debug der Werte?
Gibt dir $statemetn ein errotCode aus?
Code:
var_dump($statement->errorCode());
var_dump($statement->errorInfo());

Bei Egal etc. musst du halt prüfen und entsprechen reagieren.
PHP:
//aus
if(isset($anrede)) ....
//wird dann halt
if($anrede != 'Egal) ....
 
sorry, hatte mich im debug vertippt..
Die Antwort..
Notice: Undefined index: anrede in /mnt/web122/e3/07/58167107/htdocs/sitter/test2.php on line 8 Notice: Undefined index: alter_sitter in /mnt/web122/e3/07/58167107/htdocs/sitter/test2.php on line 9 Notice: Undefined index: plz in /mnt/web122/e3/07/58167107/htdocs/sitter/test2.php on line 10
 
Zurück