Logo - MyWebsolution.de
User gesamt  :  1684254
User online  :  1
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

MyWebsolution.de Foren » Anfängerfragen PHP und MYSQL » DB durchsuchen

Seite: 1 Posts pro Seite: 5 10 20
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 fertigxD) 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?
                  
}
                 }
        
?>
Profil ansehen
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.


Profil ansehen Mail senden
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
Profil ansehen
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
Profil ansehen
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
Profil ansehen
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?
Profil ansehen
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.
Profil ansehen
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?
Profil ansehen
Seite: 1 no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik