PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Suchfunktion für Mysql Tabelle


Scream
2007-07-20, 10:07:43
Ich habe eine Liste mit Schulen der Umgebung und wollte eine Suchfunktion einbauen. Folgenden Code habe ich bisher:

<?PHP include 'inc/config.php';
mysql_select_db(MYSQL_DATABASE) OR
die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());

echo '<div id="FormArea">';
echo '<form method="post" action="index.php?id=show">';
echo '<p><label for="user">Suche:</label><input class="text" type="text" name="suchfeld" />';
echo ' <select name="top4" size="1">
<option>Alle</option>
<option>Realschule</option>
<option>Gymnasium</option>
<option>Andere</option>
</select>&nbsp;';
echo '<input type="submit" name="suche" value=" Suchen "></p>';
echo '</form></div><br><br><br>';


if ( isset($_POST['suche']) ) {

$query = "SELECT * FROM schuldaten WHERE name='".$_POST['suchfeld']."'";
$result = mysql_query($query);
}

else
{
$query = "SELECT * FROM schuldaten";
$result = mysql_query($query);
}


Jetzt habe ich 2 Probleme.
1) Die Suche findet nur ergebnisse wenn ich den namen der Schule richtig schreibe, wenn ich z.b. nur einen teil finde, findet er nichts. Wie kann ich das hinbekommen? Wenn ich * verwende geht auch nichts.
2) Wenn ich im Drop-Down Menu die Schulart auswähle will ich dass nur solche schulen angezeigt werden.
Wie mache ich das vom Code her, da ich ja kein name-Attribut habe.

The_Invisible
2007-07-20, 10:11:35
1. nimm 'like' statt '=', das jokerzeichen in mysql ist '%'

2. du kannst den <option /> werten eine eigenschaft 'value' zuweisen was den internen wert des dropdown elementes darstellt

mfg

Scream
2007-07-20, 10:21:19
1. nimm 'like' statt '=', das jokerzeichen in mysql ist '%'



oh peinlich daran hab ich im moment gar nicht gedacht;)
Ich habe gelesen dass man LIKE nicht verwenden sollte, was ist der Unterschied zum =?
mein code sieht jetzt so aus:

if ( isset($_POST['suche']) ) {

$query = "SELECT * FROM schuldaten WHERE name LIKE '%".$_POST['suchfeld']."%'";
$result = mysql_query($query);
}


2. du kannst den <option /> werten eine eigenschaft 'value' zuweisen was den internen wert des dropdown elementes darstellt
kannst du das bitte etwas ausführlicher erklären?

darph
2007-07-20, 11:08:56
kannst du das bitte etwas ausführlicher erklären?

<form method="post" action="index.php?id=show">
<label for="user">Suche:</label><input class="text" type="text" name="suchfeld" />
<select name="top4" size="1">
<option value="1" selected="selected">Alle</option>
<option value="2">Realschule</option>
<option value="3">Gymnasium</option>
<option value="4">Andere</option>
</select>
<input type="submit" name="suche" value=" Suchen ">
</form>

<?php echo($_POST["top4"]); ?>
Ausgabe ist dann eben 1, 2, 3 oder 4

Scream
2007-07-20, 11:55:25
ok danke soweit nun habe ich aber noch ein problem

if ( isset($_POST['suchfeld']) ) {
$query = "SELECT * FROM schuldaten WHERE name LIKE '%".$_POST['suchfeld']."%'";
$result = mysql_query($query);
}

else if ( isset($_POST['go']) ) {
$query = "SELECT * FROM schuldaten WHERE schulart LIKE '%".$_POST['top']."%'";
$result = mysql_query($query);
}

else
{
$query = "SELECT * FROM schuldaten";
$result = mysql_query($query);
}

wenn ich das so mache dann geht nur die suche, das dropdown menu geht nicht
wenn ich if und else if tausche geht das dropdown menu aber die suche nicht

es sieht so aus als ob er nur die if schleife nimmt und dann gleich in die else schleife geht, also den else if teil überspringt

Scream
2007-07-22, 22:32:35
*push*

The_Invisible
2007-07-22, 23:12:35
scheint so als würdest du beide variablen senden, dann ist das verhalten klar

mach mal ein "print_r($_POST)" und schau dir den output an

mfg

Sephiroth
2007-07-23, 00:16:06
if ( isset($_POST['suchfeld']) ) {
das wird i. R. true sein, d.h. auch dann, wenn man nichts in das feld reinschreibt!
verwende stattdessen lieber
if ( !empty($_POST['suchfeld']) ) {

was ist $_POST['go'], der "go" alias absenden-button?

Scream
2007-07-23, 06:41:41
was ist $_POST['go'], der "go" alias absenden-button?

ja genau
Ich wollte das dropdown menü so haben, dass wenn man etwas auswählt sofort die anzeige erscheint, da ich aber nicht wusste ob und wie man das ohne JavaScript lösen kann hab ich einfach den button verwendet

/dev/NULL
2007-07-23, 10:27:48
generell ist das was Du machst nicht sicher. Indem ich in deinem $_POST['suchfeld'] ein bischen SQL platziere kann ich wunderbar SQL Injections absetzen. Das mag jetzt bei nem Select nicht so kritisch sein, wird aber reichen um Daten und Strukturen auszulesen.
Überleg Dir welche Daten Du erwartest und validiere entsprechend (oder nimm prepared statements)

Beispiel SQL Injection (aus dem Kopf nur als Beispiel)

SELECT * FROM schuldaten WHERE schulart LIKE '%".$_POST['top']."%'"

$_POST['top']= a" UNION Select * from Users; --

Scream
2007-07-23, 11:40:57
da hast du recht
da dies aber nur für mich lokal läuft sollte das kein problem sein

wenn ich das nächste Projekt mache werde ich aber aufpassen!