Autor
|
Thread
|
14.02.2007 17:47 Uhr
|
DB durchsuchen
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Ich hab probiert (d.h. angefangen, schaffs nicht fertig) eine Suche zu machen, bei der die User nach den Interpreten etc. suchen können. Die Resultate sollten dann auf einer Site als Link ausgegeben werden. Hier mal das was ich versucht habe:
PHP:
<?
$suche = $_GET['search'];
if(isset($_GET['search'])){
$sql = "SELECT
Interpret,
Album,
Songname
FROM
notes
WHERE Interpret,
Album,
Songname
LIKE '%$suche%'
";
// Stimmt das so??
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
if (mysql_num_rows($result)==0) {
echo "Keine Suchresultate erzielt";
}
else {
// Hier sollten die Resultate als Link zu dem richtgen Standort ausgegeben werden. Wie mache ich das?
}
}
?>
|
|
|
14.02.2007 20:48 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Suche brauch ich für meine Seite auch noch.. hab aber im mom keine Zeit dafür, dass gescheit zu coden..
Dein Ansatz ist richtig, musst halt mal fehlerausgaben machen lassen, also
PHP:
<?php
error_reporting(E_ALL);
// für MySQL Queries mal folgendes machen, statt :
$result = mysql_query($sql);
// folgendes hinzufügen:
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>".mysql_error());
?>
Ich denke mal, bei deinem Beispiel hat der mysql_query ne falsche Syntax, aber ich hab auch noch nichts mit LIKE gemacht, musst mal googlen wie sowas richtig aussieht.
|
|
|
14.02.2007 22:28 Uhr
|
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
Hallo,
dein Fehler liegt wohl in dieser Zeile:
PHP:
LIKE '%$suche%'
Du solltest durch diese Zeile kein Fehler bekommen, allerdings suchst du nicht nach dem Wert der Variable $suche, sonder nach einer Zeichenkette mit dem Inhalt "$suche", somit bekommst du nicht die gewünschten Ergebnisse.
PHP:
LIKE '%" . $suche . "%'
mit dieser Zeile wäre wohl dieser Fehler behoben.
Dazu habe ich mir mal die Arbeit gemacht, dir ein kleines Script zu schreiben.
Ach ja, deine Ansätze mit der Suche sind soweit Okay, ich mach es auch so. Du kann die suche natürlich auch beliebig erweitern, ich weis allerdings nicht ob du mit dem "_" Placeholder je Zeichen vertraut bist, damit könnte man komplexe Probleme lösen. Naja, hier das Script, bitte Verbindungsdaten eintragen UND eine TABELLE angeben.
PHP:
<?
$hostname = "localhost";
$username = "root";
$password = "";
$database = "hier datenbank";
$table = "hier tabelle";
// Verbindung herstellen etc.
$cnx = mysql_connect($hostname, $username, $password);
mysql_select_db($database);
// Felder der obigen Tabelle abfragen
$fields = mysql_list_fields($database, $table, $cnx);
// Anzahl der Felder ermitteln
$count = mysql_num_fields($fields);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title></title>
</head>
<body>
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="text" value="" name="f_search" />
<select name="select">
<?
for($j=0; $j < $count; $j++)
{
// Feldnamen ermitteln
$field = mysql_field_name($fields, $j);
echo '<option value="' . $field . '">' . $field . '</option>';
}
?>
</select>
<br /><input type="submit" name="submit" value="Suchen" />
</form>
<?
if(isset($_REQUEST['submit']))
{
$QUERY = "SELECT * FROM " . $table;
$QUERY .= " WHERE " . $_REQUEST['select'];
$QUERY .= " LIKE '%" . $_REQUEST['f_search'] . "%' LIMIT 30";
$result = mysql_query($QUERY);
while($row = mysql_fetch_array($result))
{
echo $row[$_REQUEST['select']] . '<br />';
}
}
?>
</body>
</html>
Gruß Negura
|
|
|
14.02.2007 23:18 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
wow vielen dank für deine Mühe, werd mich morgen mal näher damit befassen. Hm aber das mit meinem skript geht immernoch nicht, muss wohl irgendwo immernoch ein fehler sein, es kommt folgende fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' Album, Songname LIKE '%xyxc%'' at line 7
|
|
|
19.02.2007 09:20 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
@negura:
Wie könnte man deinen code so umformen, dass man nicht auswählen muss was man durchsuchen will, sondern, dass es einfach nur die mit den Interpreten durchsucht? Man könnte es nämlich nachher so programmieren, dass wenn was gefunden wurde, es einen link erstellt zu meiner index.php (wo die Interpreten drinstehen) und dann einfach noch an die url ?interpret=anfangsbuchstabe des ergebnisses anfügen.
mdean
|
|
|
19.02.2007 20:21 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Habs nach langem probieren doch selbst geschafft *stolz* .
PHP:
<?
if(isset($_REQUEST['search']))
{
$QUERY = "SELECT Interpret FROM notes";
$QUERY .= " WHERE Interpret";
$QUERY .= " LIKE '%" . $_REQUEST['search'] . "%' LIMIT 30";
$result = mysql_query($QUERY);
$path = "directory/index.php";
$link = substr($_GET['search'],0,1);
if (mysql_num_rows($result)==0) {
echo "Keine Suchergebnisse für '".$_GET['search']."' gefunden.";
}
while($row = mysql_fetch_array($result))
{
echo "<a href=\"".$path."?Interpret=".$link."\">".$row['Interpret']."</a>";
echo "</br>";
}
}
?>
Jetzt gibts aber doch noch ein Problem. Ich möchte dem Query noch die Befehle GROUP BY und ORDER BY hinzufügen, aber wenn ich das so mache:
PHP:
<?
$QUERY = "SELECT Interpret FROM notes";
$QUERY .= " WHERE Interpret";
$QUERY .= " LIKE '%" . $_REQUEST['search'] . "%' LIMIT 30";
$QUERY .= " ORDER BY Interpret ASC";
$QUERY .= " GROUP BY Interpret";
?>
Dann kommt immer folgender Fehler: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
Was muss ich da ändern?
|
|
|
19.02.2007 20:30 Uhr
|
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
PHP:
<?
$QUERY = "SELECT Interpret FROM notes";
$QUERY .= " WHERE Interpret";
$QUERY .= " LIKE '%" . $_REQUEST['search'] . "%' LIMIT 30";
$QUERY .= " ORDER BY Interpret ASC";
$QUERY .= " GROUP BY Interpret";
?>
versuch mal das LIMIT ans Ende der Query zu setzen, auf die schnell fällt mir nur das ein. Eventuell noch ORDER BY xyz AND GROUP BY xyz versuchen.
Dieser Beitrag wurde am 19.02.2007 um 20:31:11 Uhr von Negura zum 1. Mal editiert.
|
|
|
19.02.2007 20:43 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Danke, ja es lag an der Reihenfolge. Mir ist grad noch was aufgefallen. Ich schrieb:
PHP:
<?
$link = substr($_GET['search'],0,1);
?>
aber dabei muss ich ja nicht das was übermittelt wurde auf einen Buchstaben kürzen, sondern die Ausgabe, also das Ergebniss. Durch was muss ich $GET['search'] ersetzen?
|
|
|