Suchen nach verschiedenen Kriterien
dichti
- php
Hallo zusammen
Ich steh wieder vor einem kleinen grösseren Problem.
Wenns schon mal ähnlich beantwortet wurde reicht mir natürlich auch einen Link, hab nur genug vom googlen.
Das Problem sieht wie folgt aus:
Ich habe ein Formular.. Dessen Daten werden an ein "Ausführ-Script" gesendet.
Nun möchte ich, dass es nur die Datensätze ausgibt auf welche die Einträge passen.
Leere Einträge sollen nicht verwendet werden.
<?php
include 'inc/config.php';
$search = $_GET['search'];
$title = $_POST["moviez_title"];
$subtitle = $_POST["moviez_subertitle"];
$genre = $_POST["moviez_genre"];
$release = $_POST["moviez_release"];
$language = $_POST["moviez_language"];
$db=mysql_connect($gl_datenbankhost, $gl_datenbankbenutzername, $gl_datenbankbenutzerpasswort);
mysql_select_db($gl_datenbankname,$db);
$search_results = "SELECT *
FROM moviez
WHERE (
Titel LIKE '%$title%'
AND Untertitel LIKE '%$subtitle%'
AND Genre LIKE '%$genre%'
AND Erscheinungsdatum LIKE '%$release%'
AND Sprache LIKE '%$language%')
ORDER BY $search";
$result = mysql_query($search_results);
while($row = mysql_fetch_object($result))
{
echo
"<tr><td>",
$row->Titel,
"</td><td>",
$row->Untertitel,
"</td><td>",
$row->Genre,
"</td><td>",
$row->Erscheinungsdatum,
"</td><td>",
$row->Sprache,
"</td><td>",
$row->Bild,
"</td><td>",
$row->Ton,
"</td><td>",
"<a href="look_search_moviez.php?id=",$row->ID,""><img src="../../images/buttons/search/look.png" id="small_pic"></a>",
"</td><td>",
"<a href="del_search_moviez.php?id=",$row->ID,""><img src="../../images/buttons/search/del.png" id="small_pic"></a>",
"</td><td>",
"<a href="upd_search_moviez.php?id=",$row->ID,""><img src="../../images/buttons/search/upd.png" id="small_pic"></a>",
"</td></tr>",
"<tr><td colspan="10">",
"<div id="row_spacer"></div>",
"</td></tr>";
}
?>
Vielleicht kann mir ja jemand helfen. In diesem Sinne danke jetzt schon mal.
Dichti
Hallo Dichti,
Ich steh wieder vor einem kleinen grösseren Problem.
Zerlege das größere Problem in kleinere.
Baue zunächst eine SQL-Abfrage mit EINEM Auswahlkriterium.
Fürchte Dich dabei vor SQL-Injection und sorge für richtige Behandlung
der Formulardaten (Z.B. mit mysql_real_escape_string() ).
"SELECT *" und LIKE "%someString%" sind nicht performant, aber das wird erst bei einer größeren Anzahl von Datensätzen problematisch.
Viele Grüße
Stefan
Stefan,
Ich weis, dass ihr nicht übermässig Zeit habt und so, finde den Job den ihr hier macht toll.
Doch das Problem liegt darin, dass ich nicht gerade viel Ahnung habe von PHP und MySQL. Sofern fehlt mir einfach der springende Punkt wie ich sowas anstellen soll.
Zerlege das größere Problem in kleinere.
Baue zunächst eine SQL-Abfrage mit EINEM Auswahlkriterium.
Fürchte Dich dabei vor SQL-Injection und sorge für richtige Behandlung
der Formulardaten (Z.B. mit mysql_real_escape_string() ).
Auch wenns gut gemeint ist, doch damit kann ich nichts anfangen.
"SELECT *" und LIKE "%someString%" sind nicht performant, aber das wird erst bei einer größeren Anzahl von Datensätzen problematisch.
Danke, werd ich mir merken.
Dichti
Hallo Dichti,
Doch das Problem liegt darin, dass ich nicht gerade viel Ahnung habe von PHP und MySQL. Sofern fehlt mir einfach der springende Punkt wie ich sowas anstellen soll.
Mmmmh, wieso sollst Du es dann wenn Du keine Ahnung hast?
Auch wenns gut gemeint ist, doch damit kann ich nichts anfangen.
Ich fürchte dann kannst Du mit dem folgenden auch nichts anfangen.
So in etwas könnte man die WHERE Bedingung je nach vorliegenden Daten aus dem Formular zusammenbauen:
<?php
$map = array (
'moviez_title' => 'Titel',
'moviez_genre' => 'Genre',
);
$stack = array();
foreach($map as $k => $v){
if (!isset($_POST[$k]) or trim($_POST[$k]) == ''){
continue;
}
$stack[] = sprintf(" %s
LIKE '%s%%' ", $v, mysql_real_escape_string($_POST[$k]));
}
$where = join (' AND ', $stack);
?>
Viele Grüße
Stefan
Stefan,
Danke für deine Ausdauer.. hehe
<?php
$map = array (
Formfeld => Datenbankfeld
'moviez_title' => 'Titel',
'moviez_genre' => 'Genre',
);$stack = array();
foreach($map as $k => $v){
if (!isset($_POST[$k]) or trim($_POST[$k]) == ''){
continue;
}
$stack[] = sprintf("%s
LIKE '%s%%' ", $v, mysql_real_escape_string($_POST[$k]));
}$where = join (' AND ', $stack);
?>
Hehe.. momentan wirft es nur mehr Rätsel auf.. aber ich werd mir denn mal die Ausdrück genauer ansehen und dann vielleicht.. vielleicht verstah ichs dann.
Danke dir auf jeden Fall
Dichti