Suche ....

php_lernen

Grünschnabel
Hallo euch allen,

hab da mal eine Frage. Ich habe eine Seite wo sich User registriert haben. Jetzt will ich als eine neuerung eine User Suche einbauen. Wie ich mir das geanu vorgestellt habe, das schreibe ich hier auch mal hier auf.

Kann mir da jetzt jemand helfen, wie ich das mit dem Code machen soll? Ich kenne mich leider mit PHP noch nicht so gut aus :-(

Ach ja ich habe ein MYSQL Datenbank. Wie die aussieht schreibe ich hier auch noch kurz auf...

Ich hoffe es hilft mir jemand.

Hier mal das Formular für die Suche:

PHP:
<table width="97%" border="0" align="center" cellpadding="1" cellspacing="0">
   <tbody>
 	<tr>
 	  <td><form name="form1" method="get" action="p_sucheuser.php">
 		  <p>Um zu suchen m&uuml;ssen nicht alle Kriterien angegeben werden, sondern es gen&uuml;gt auch nur ein einzelnes Kriterium.<br>
 			Wenn du bei Username, Vorname oder Nachname nur einen Teil kennst, dann gebe nur diesen Teil ein, die Suche findet auch Namen, in denen diese Teile vorkommen. </p>
 		  <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="p_username" class="chatfields" id="p_username" value="" type="text"></td>
 					  </tr>
 					  <tr>
 					    <td><p>Vorname:</p></td>
 					    <td><input name="p_vorname" class="chatfields" id="p_vorname" value="" type="text"></td>
 					  </tr>
 					  <tr>
 					    <td><p>Nachname:</p></td>
 					    <td><input name="p_nachname" class="chatfields" id="p_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="rb_geschl" class="chatfields" id="rb_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="rb_single" class="chatfields" id="rb_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="rb_p_bild" class="chatfields" id="rb_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="p_alter_start" class="chatfields" id="p_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="p_alter_ende" class="chatfields" id="p_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>


Hier kommt mal die Tabelle in der Datebank:

CREATE TABLE `userdata` (
`id` int(6) unsigned NOT NULL auto_increment,
`benutzername` varchar(30) default NULL,
`email` varchar(50) default NULL,
`passwort` varchar(32) default NULL,
`rights` varchar(5) default 'user',
`registriert` datetime default NULL,
`name` varchar(80) default NULL,
`geschlecht` char(1) default NULL,
`geburtstag` date default NULL,
`single` varchar(4) default NULL,
`newsletter` varchar(4) default 'nein',
`woherkennen` text,
`selbstbeschreibung` text,
`hobbies` text,
`ichmag` text,
`ichmagnicht` text,
`motto` text,
`nachricht` text,
`homepage` varchar(30) default NULL,
`messenger` varchar(5) default 'ICQ',
`messengerid` varchar(30) default NULL,
`buddies` varchar(255) default NULL,
`profil_views` int(6) default '1',
`profil_besucher` varchar(255) default NULL,
`points` int(6) default NULL,
`lastlogin` datetime default NULL,
`lastid` varchar(15) default NULL,
`falschlogin` int(2) default '0',
`gesperrt` int(1) default '0',
`zaehler` int(8) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `benutzername` (`benutzername`)
) TYPE=MyISAM AUTO_INCREMENT=96 ;
 
Zum einen würde ich das Alter (also die ellenlangen selects) evtl. in einer for-Schleife in php schreiben und dann immer ein template mit dem jeweiligen html ausgeben.

Um die Suche nach verschiedenen Kriterien zu starten, würde ich ersteinmal checken, welche Felder überhaupt ausgefüllt sind bzw. welche Variablen nicht leer sind und die leeren dann schonmal eliminieren. Dann musst du die Query, die deine Datenbank dann z.B. nach Einträgen mit genau diesem Vornamen durchsucht

"select * from 'mytable' where Vorname = '$vorname'"

oder aber die Query, die die Datenbank nach Einträgen durchsucht, die diesem Vornamen auch ähnlich sind:

"select * from 'mytable' where Vorname LIKE %$vorname%";

so aufbauen, dass eben genau die "nichtleeren" Variablen abgefragt werden.
Ist zwar nicht die feinste Lösung, aber du könntest z.B. schon bei jedem Check, ob die Variable jetzt "belegt" ist oder nicht, einfach eine weitere Variable für die Query setzen und immer den jeweiligen Bereich, den du abfragen möchtest (abhängig ob der Auswahlvariable ein Wert zugeordnet ist) dann hinzufügen.
 
Ob es ein Tutorial gibt weiß ich nicht, da hilft aber bestimmt die Forensuche ;)

Das mit dem Alter habe ich so gemeint. Wenn du z.B. ein formularelement für Leute von 25-40 erstellen möchtest:

PHP:
<select name="altersauswahl">
<?php
for($i =25; $i<=40; $i++;) {
echo "<option value=\"".$i."\">$i</option>";
?>
</select>

Ist zwar jetzt ohne ein Template und einfach php in html eingebettet, aber tut's genauso und ist an sich eine Arbeitsersparnis.

Also lassen wir mal meinen Versuch, dir einen Denkanstoß zur Suche mit verschiedenen Feldern gleichzeitig zu geben erstmal weg.

Gehen wir davon aus, du hast ein Formular, das den Vornamen sucht. Jemand gibt "Gerhard" ein. Somit hat die Variable, nennen wir sie z.B. $vorname den Wert "Gerhard".
Das weiß aber dein Script nicht, also überprüfst du, ob $vorname einen Wert zugeordnet bekommen hat:

PHP:
if($vorname !="") { 
//etc.
 }

ist $vorname belegt suchst du in deiner Datenbank nach einem User der diesen Vornamen hat.
Dies kannst du entweder tun, indem du nur User suchst, die genau "Gerhard" heißen, die MySQL-Query wäre dann folgende:

select * from 'meinetabelle' where vorname = '$vorname'

Oder du kannst aber deine Sucher erweitern auf nicht nur User die genau "Gerhard" heißen, sondern auch welche, die Gerhard im Namen haben wie z.B. "GERHARDine" oder AndiGerhard" oder ähnliches. Das macht du mit der mysql-abfrage:

select * from 'meinetabelle where vorname LIKE %$vorname%

Das wäre jetzt die Grundstruktur dessen, was ich vorher gemeint habe, ist es jetzt besser verständlich?
 
Hallo,

so das habe ich jetzt ein wenig verstanden. Aber wo muss ich das jetzt dann hin tun, dass also die Suche auch ausfegührt wird? Ganz oben auf Seite?
 
php_lernen hat gesagt.:
Hallo,

so das habe ich jetzt ein wenig verstanden. Aber wo muss ich das jetzt dann hin tun, dass also die Suche auch ausfegührt wird? Ganz oben auf Seite?

hm, das ist jetzt kein fertiger code, was ich dir geliefert habe, ich hab dir nur geschrieben, welche Mysql-Abfragen du nützen kannst. Wenn du den Code so jetzt z.b. ganz oben in die Seite tust, dann funktioniert der nur, wenn jemand auch wirklich nur den Vornamen abfragt.
Es war mehr eine Erklärung zum allgemeinen Verständnis, wie so etwas zu realisieren sein könnte.
Ich ging davon aus, dass du vorhast es selbst in php zu schreiben und nicht auf ein fertiges Script wartest ;)
Du musst den Code noch ein wenig abändern und anpassen, im Moment verarbeitet er ja nur ein Feld, nämlich den "Vornamen".
 
1. Ändere deinen Threadtitel oder is dir nix besseres als Suche... eingefallen? -.-
und 2tens lies mal Tutorials übe und dann wenn du ein konkretes Problem hast, kommste wieder.
 
Hi!

Ein gutes forum für PHP ist www.phpforum.de! Nur bringt dir kein Forum der Welt ein fertiges Script.

Wenn du die Select Abfragen noch nicht verstehst würde ich mir erstmal einige Bücher anschaffen.

Gruss Mike
 
Zurück