Anzeige

Such,- btw. Filterfunktion


CreativPur

Erfahrenes Mitglied
#1
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 ?
 

CreativPur

Erfahrenes Mitglied
#2
Das Problem ist, wenn ich die Abfrage mit OR mache, bekomme ich auch das weibliche Geschlecht angezeigt, obwohl ich zuvor männlich eingegeben habe
 

Yaslaw

n/a
Moderator
#3
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();
 

CreativPur

Erfahrenes Mitglied
#4
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 />';
 

Yaslaw

n/a
Moderator
#5
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) ....
 

CreativPur

Erfahrenes Mitglied
#10
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
 

CreativPur

Erfahrenes Mitglied
#11
Hier nochmals der Quelltext wegen der Nummerierung :
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

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();


var_dump($statement->errorCode());
var_dump($statement->errorInfo());
  
?>

<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'Vorname: '.$row['vorname'].' <br />';
?>
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 string(5) "00000" array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }
 

CreativPur

Erfahrenes Mitglied
#13
ich hatte meinen Code gerade nochmals hoch geschickt..
Die Zeilen 8 - 10
PHP:
$anrede = htmlspecialchars($_POST['anrede']);
$alter_sitter = htmlspecialchars($_POST['alter_sitter']);
$plz = htmlspecialchars($_POST['plz']);
 
Anzeige

Neue Beiträge

Anzeige