DB durchsuchen

Hallo,

ich bin gerade dabei etwas neuees für meine User zu machen und zwar möchte ich, dass die User nach User und so suchen können. Da habe ich mir das so vorstellt:

Sie können nach Folgendes Suchen:

- Nackname
- Alter ( von - bis )
- Geschlecht
- Single

Joa das ist eigentlich alles. Nur habe ich bis jetzt leider überhaupt keine Lösung, wie ich das umsetzten könnte. Hab auch schon mal untger den Tutorials geschaut aber leider da auch nichts gefunden :-(

Mal sehen ob mir von euch jemand helfen kann.

***********************************
Hier mal das Formular wie ich das bis jetzt gemacht habe:

PHP:
 								  <table width="97%" border="0" align="center" cellpadding="1" cellspacing="0">
 								    <tbody>
 									  <tr>
 									    <td><form name="form1" method="get" action="sucheuser.php">
 										  <table align="center" border="0" cellpadding="2" cellspacing="2" width="98%">
 											  <tbody>
 											    <tr>
 												  <td valign="top"><table align="center" border="0" cellpadding="2" cellspacing="2" width="98%">
 													  <tbody>
 													    <tr>
 														  <td><p>Username:</p></td>
 														  <td><input name="benutzername" class="chatfields" id="benutzername" value="" type="text"></td>
 													    </tr>
 													    <tr>
 														  <td><p>Vorname:</p></td>
 														  <td><input name="vorname" class="chatfields" id="vorname" value="" type="text"></td>
 													    </tr>
 													    <tr>
 														  <td><p>Nachname:</p></td>
 														  <td><input name="nachname" class="chatfields" id="nachname" value="" type="text"></td>
 													    </tr>
 													  </tbody>
 												    </table>
 													  <div align="center"></div></td>
 												  <td valign="top"><table align="center" border="0">
 													  <tbody>
 													    <tr>
 														  <td><p>Geschlecht:</p></td>
 														  <td><p>
 															  <select name="geschl" class="chatfields" id="geschl">
 															    <option value="egal">-- keine Einschr&auml;nkung --</option>
 															    <option value="m">m&auml;nnlich</option>
 															    <option value="w">weiblich</option>
 															  </select>
 														  </p></td>
 													    </tr>
 													    <tr>
 														  <td><p>Single:</p></td>
 														  <td><p>
 															  <select name="single" class="chatfields" id="single">
 															    <option value="egal">-- keine Einschr&auml;nkung --</option>
 															    <option value="1">ja</option>
 															    <option value="2">nein</option>
 															  </select>
 														  </p></td>
 													    </tr>
 													    <tr>
 														  <td><p>Profilbild:</p></td>
 														  <td>
 														    <select name="p_bild" class="chatfields" id="p_bild">
 															  <option value="egal">-- keine Einschr&auml;nkung --</option>
 															  <option value="1">nur mit Profilbild</option>
 															  <option value="0">nur ohne Profilbild</option>
 														  </select></td>
 													    </tr>
 													    <tr>
 														  <td><p>Alter:</p></td>
 														  <td><p> zwischen
 																  <select name="alter_start" class="chatfields" id="alter_start">
 																    <option></option>
 																    <option value="5">5</option>
 																    <option value="6">6</option>
 																    <option value="7">7</option>
 																    <option value="8">8</option>
 																    <option value="9">9</option>
 																    <option value="10">10</option>
 																    <option value="11">11</option>
 																    <option value="12">12</option>
 																    <option value="13">13</option>
 																    <option value="14">14</option>
 																    <option value="15">15</option>
 																    <option value="16">16</option>
 																    <option value="17">17</option>
 																    <option value="18">18</option>
 																    <option value="19">19</option>
 																    <option value="20">20</option>
 																    <option value="21">21</option>
 																    <option value="22">22</option>
 																    <option value="23">23</option>
 																    <option value="24">24</option>
 																    <option value="25">25</option>
 																    <option value="26">26</option>
 																    <option value="27">27</option>
 																    <option value="28">28</option>
 																    <option value="29">29</option>
 																    <option value="30">30</option>
 																    <option value="31">31</option>
 																    <option value="32">32</option>
 																    <option value="33">33</option>
 																    <option value="34">34</option>
 																    <option value="35">35</option>
 																    <option value="36">36</option>
 																    <option value="37">37</option>
 																    <option value="38">38</option>
 																    <option value="39">39</option>
 																    <option value="40">40</option>
 																    <option value="41">41</option>
 																    <option value="42">42</option>
 																    <option value="43">43</option>
 																    <option value="44">44</option>
 																    <option value="45">45</option>
 																    <option value="46">46</option>
 																    <option value="47">47</option>
 																    <option value="48">48</option>
 																    <option value="49">49</option>
 																    <option value="50">50</option>
 																    <option value="51">51</option>
 																    <option value="52">52</option>
 																    <option value="53">53</option>
 																    <option value="54">54</option>
 																    <option value="55">55</option>
 																    <option value="56">56</option>
 																    <option value="57">57</option>
 																    <option value="58">58</option>
 																    <option value="59">59</option>
 																    <option value="60">60</option>
 																    <option value="61">61</option>
 																    <option value="62">62</option>
 																    <option value="63">63</option>
 																    <option value="64">64</option>
 																    <option value="65">65</option>
 																    <option value="66">66</option>
 																    <option value="67">67</option>
 																    <option value="68">68</option>
 																    <option value="69">69</option>
 																    <option value="70">70</option>
 																    <option value="71">71</option>
 																    <option value="72">72</option>
 																    <option value="73">73</option>
 																    <option value="74">74</option>
 																    <option value="75">75</option>
 																    <option value="76">76</option>
 																    <option value="77">77</option>
 																    <option value="78">78</option>
 																    <option value="79">79</option>
 																    <option value="80">80</option>
 																    <option value="81">81</option>
 																    <option value="82">82</option>
 																    <option value="83">83</option>
 																    <option value="84">84</option>
 																    <option value="85">85</option>
 																    <option value="86">86</option>
 																    <option value="87">87</option>
 																    <option value="88">88</option>
 																    <option value="89">89</option>
 																    <option value="90">90</option>
 																  </select>
 						    und
 						    <select name="alter_ende" class="chatfields" id="alter_ende">
 							  <option></option>
 							  <option value="5">5</option>
 							  <option value="6">6</option>
 							  <option value="7">7</option>
 							  <option value="8">8</option>
 							  <option value="9">9</option>
 							  <option value="10">10</option>
 							  <option value="11">11</option>
 							  <option value="12">12</option>
 							  <option value="13">13</option>
 							  <option value="14">14</option>
 							  <option value="15">15</option>
 							  <option value="16">16</option>
 							  <option value="17">17</option>
 							  <option value="18">18</option>
 							  <option value="19">19</option>
 							  <option value="20">20</option>
 							  <option value="21">21</option>
 							  <option value="22">22</option>
 							  <option value="23">23</option>
 							  <option value="24">24</option>
 							  <option value="25">25</option>
 							  <option value="26">26</option>
 							  <option value="27">27</option>
 							  <option value="28">28</option>
 							  <option value="29">29</option>
 							  <option value="30">30</option>
 							  <option value="31">31</option>
 							  <option value="32">32</option>
 							  <option value="33">33</option>
 							  <option value="34">34</option>
 							  <option value="35">35</option>
 							  <option value="36">36</option>
 							  <option value="37">37</option>
 							  <option value="38">38</option>
 							  <option value="39">39</option>
 							  <option value="40">40</option>
 							  <option value="41">41</option>
 							  <option value="42">42</option>
 							  <option value="43">43</option>
 							  <option value="44">44</option>
 							  <option value="45">45</option>
 							  <option value="46">46</option>
 							  <option value="47">47</option>
 							  <option value="48">48</option>
 							  <option value="49">49</option>
 							  <option value="50">50</option>
 							  <option value="51">51</option>
 							  <option value="52">52</option>
 							  <option value="53">53</option>
 							  <option value="54">54</option>
 							  <option value="55">55</option>
 							  <option value="56">56</option>
 							  <option value="57">57</option>
 							  <option value="58">58</option>
 							  <option value="59">59</option>
 							  <option value="60">60</option>
 							  <option value="61">61</option>
 							  <option value="62">62</option>
 							  <option value="63">63</option>
 							  <option value="64">64</option>
 							  <option value="65">65</option>
 							  <option value="66">66</option>
 							  <option value="67">67</option>
 							  <option value="68">68</option>
 							  <option value="69">69</option>
 							  <option value="70">70</option>
 							  <option value="71">71</option>
 							  <option value="72">72</option>
 							  <option value="73">73</option>
 							  <option value="74">74</option>
 							  <option value="75">75</option>
 							  <option value="76">76</option>
 							  <option value="77">77</option>
 							  <option value="78">78</option>
 							  <option value="79">79</option>
 							  <option value="80">80</option>
 							  <option value="81">81</option>
 							  <option value="82">82</option>
 							  <option value="83">83</option>
 							  <option value="84">84</option>
 							  <option value="85">85</option>
 							  <option value="86">86</option>
 							  <option value="87">87</option>
 							  <option value="88">88</option>
 							  <option value="89">89</option>
 							  <option value="90">90</option>
 						    </select>
 						    Jahre</p></td>
 													    </tr>
 													  </tbody>
 												  </table></td>
 											    </tr>
 											  </tbody>
 										    </table>
 										    <p align="center">
 											  <input name="submit" class="chatfields" id="submit" value="&gt;&gt;&gt; Usersuche starten" type="submit">
 										    </p>
 									    </form></td>
 									  </tr>
 								    </tbody>
 								  </table>

******************************************************************

Gruß Claudia
 
Zuletzt bearbeitet:
Tach auch.

Zum einen: Deine Einrückungen sind ... heftig.
Zum anderen: Den Code hättest du nicht gebraucht.

Wenn dein Suchformular abgesendet wird, dann überprüfst du einfach alle gesetzten Variablen. Und dann baust du dir nach und nach den Teil hinter "WHERE" zusammen und gut is.

Ist z.B. nur der letzte Alterswert auf 30 gesetzt, dann suchst du nach allen Personen deren Alter bis maximal und gleich 30 ist.
Kommt noch ein Nicknamen Teil dazu, fragst du zusätzlich nach "nickname LIKE '%nicknamevariable%'.


Viel Erfolg.
Grüße, Ronin
 
Ich hätte es wahrscheinlich wie folgt gelöst:
PHP:
<?php

	$query = "SELECT `benutzername`, `vorname`, `nachname`, `geschl`, `single`, `p_bild`, `alter` FROM `tabelle`";

	$bla = false;

	function bla() {
		global $bla;
		if( $bla === true ) {
			return ' AND ';
		} else {
			$bla = true;
			return ' WHERE ';
		}
	}

	if( isset($_GET['benutzername']) && !empty($_GET['benutzername']) ) {
		$query .= bla().'`benutzername` = "'.mysql_escape_string($_GET['benutzername']).'"';
	}
	if( isset($_GET['vorname']) && !empty($_GET['vorname']) ) {
		$query .= bla().'`vorname` = "'.mysql_escape_string($_GET['vorname']).'"';
	}
	if( isset($_GET['nachname']) && !empty($_GET['nachname']) ) {
		$query .= bla().'`nachname` = "'.mysql_escape_string($_GET['nachname']).'"';
	}
	if( isset($_GET['geschl']) && !empty($_GET['geschl']) && $_GET['geschl'] != 'null' ) {
		$query .= bla().'`geschl` = "'.mysql_escape_string($_GET['geschl']).'"';
	}
	if( isset($_GET['single']) && !empty($_GET['single']) && $_GET['single'] != 'null' ) {
		$query .= bla().'`single` = "'.mysql_escape_string($_GET['single']).'"';
	}
	if( isset($_GET['p_bild']) && !empty($_GET['p_bild']) && $_GET['p_bild'] != 'null' ) {
		$query .= bla().'`p_bild` = "'.mysql_escape_string($_GET['p_bild']).'"';
	}
	if( isset($_GET['alter']) && is_array($_GET['alter']) && $_GET['alter'][0] != 'null' ) {
		sort($_GET['alter'], SORT_NUMERIC);
		if( count($_GET['alter']) > 1 ) {
			$query .= bla().'`alter` BETWEEN "'.mysql_escape_string($_GET['alter'][0]).'" AND "'.mysql_escape_string($_GET['alter'][count($_GET['alter'])-1]).'"';
		} else {
			$query .= bla().'`alter` = "'.mysql_escape_string($_GET['alter'][0]).'"';
		}
	}


	if( isset($_GET) ) {
		echo '<pre>';
		echo $query;
		echo '</pre>';
	}

	$result = mysql_query($query);
	echo '<table>';
	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		echo '<tr>[…]</tr>';
	}
	echo '</table>';

?>
<form action="test.php" method="get">

<label for="benutzername">Username</label>
<input type="text" name="benutzername" id="benutzername" />

<label for="vorname">Vorname</label>
<input type="text" name="vorname" id="vorname" />

<label for="nachname">Nachname</label>
<input type="text" name="nachname" id="nachname" />

<label for="geschl">Geschlecht</label>
<select name="geschl" id="geschl">
	<option value="null">keine Einschr&auml;nkung</option>
	<option value="m">m&auml;nnlich</option>
	<option value="w">weiblich</option>
</select>

<label for="single">Single</label>
<select name="single" id="single">
	<option value="null">keine Einschr&auml;nkung</option>
	<option value="true">ja</option>
	<option value="false">nein</option>
</select>

<label for="p_bild">Profilbild</label>
<select name="p_bild" id="p_bild">
	<option value="null">keine Einschr&auml;nkung</option>
	<option value="true">nur mit Profilbild</option>
	<option value="false">nur ohne Profilbild</option>
</select>

<label for="alter">Alter</label>
<select name="alter[]" id="alter" multiple="multiple" size="5">
	<option value="null">beliebiges Alter</option>
<?php
	for($i=5; $i<=90; $i++) {
		echo '	<option value="'.$i.'">'.$i.'</option>'.chr(10);
	}
?>
</select>
<input type="submit" />
</form>
Für das Alter können folgende Werte ausgewählt werden: Entweder kein Wert (das Alter wird nicht berücksichtigt), ein Wert oder mehrere Werte (der niedrigste und höchste Wert bilden die Altersgrenzen).

Weitergehend müssen noch sicherheitsbedingte Schritte eingefügt werden, damit kein SQL-Injektionen funktionieren. Dies wird insbesondere durch die Versandtmethode notwendig.
 
Zuletzt bearbeitet:
@Gumbo,

danke für das was du da geamcht hast. Aber ich habe jetzt noch eine Frage. Ich habe hier eine Tabelle ( siehe etrwas weiter unten ) wo ich das dann auch dastellen will. Wie muss ich das dann machen? Also wie kann ich nun die Abfrage so machen, dass das bei mir in der Tabelle steht?

PHP:
Username
 
 Sex
 
 Age
 
 Single?
 
 Profilbild
 
 Letzter Login


Sex soll nicht Sex heißen also nicht das was du meinst damit ist das Geschlecht gemeint :)

Gruß Claudia
 
Claudia_aus_NRW hat gesagt.:
Also wie kann ich nun die Abfrage so machen, dass das bei mir in der Tabelle steht?
PHP & HTML lernen + selber nachdenken, Ich weiß ernsthaft nicht wo das Problem liegt,
Gumbo hat dir doch schon funktionierenden Code vorgesetzt den du lediglich ergänzen musst!
 
Mein Problem ist gerade, dass ich nicht weiß, wie ich das was er aus der DB geholt hat, dass ich das nun auch dastellen kann aber das habe ich vorhin doch auch schon gerade gescrhieben oder?
 
Soweit ich das jetzt richtig verstehe mit:
PHP:
<?php
.
.
.
echo "blablablabla".$alter." ........";
.
?>

oder ich hab hier was falsch verstanden
 
Der Aufbau der Tabelle würde ja so aussehen, dass jeder Datensatz einer Tabellenzeile entspricht. Nun wird nur noch einiges Grundwissen benötigt, um diese zu generieren. Die Anfrage sollte mithilfe meines letzten Beitrags auch kein Hindernis darstellen. Wo also genau liegt das Problem?
 
Zurück