MySQL Datenbanksuchen mit PHP

DieTa

DieTa

Aktives Mitglied
Thread Starter
Dabei seit
17.09.2003
Beiträge
3.388
Reaktionspunkte
32
Guten Morgen,

ich brech mir gerade einen bei dem Bau einer Suchfunktion ab.

Eine Datenbank mit Kundendaten ist in MySQL gespeichert und ich möchte nun mit einem einfachen Formular (ein Feld) nach verschiedenen Ergebnissen suchen. z.B. Name, Stadt, PLZ, Kundennummer etc.

Ich habe durch Google-Suche folgendes Script gefunden, was mir allerdings kein Ergebnis auswirft. Ich glaube da fehlt eigentlich nur die Ausgabe der Suche.. hat jemand eine Idee?

PHP:
         <?PHP
               echo "Suche nach: ". $keywords . "<br>";
               
                include('config.inc.php');
                                $db2 = mysql_select_db($db_name);

                $association = 'AND';
                $keywords = explode(" ",$keywords);
                $query = array();

foreach($keywords as $keyword) {
    $query[] = "(kdnr LIKE '%".$keyword."%'
                OR rnr LIKE '%".$keyword."%'
                OR anrede LIKE '%".$keyword."%'
                OR firma LIKE '%".$keyword."%')
                ";
}

$query = implode("\n ".$association." ",$query);

$sql = "SELECT * FROM kundenverwaltung WHERE ".$query;

$res = mysql_query($sql);

if (!$res) {
    /**
     * Diese Zeilen geben das SQL-Statement in recht lesbarer Form aus.
     */
    print '<pre>';
    print $sql;
    print '</pre>';
    /**
     * E_USER_ERROR führt zum Abbruch des Scripts.
     * E_USER_NOTICE und E_USER_WARNING, lassen das Script weiterlaufen
     */
    trigger_error('Datenbankanfrage schlug fehl: '.mysql_error(), E_USER_ERROR);
} else {

    echo "Suche nach: " . $keywords;
}

PS. Bei der "keywords" oben wirft der noch das Suchwort aus, unten allerdings "array"?

Hier noch das Formular:
PHP:
<html>
<head>
    <title>The Sponged.net Kundenverwaltung</title>
  	<link rel="stylesheet" type="text/css" href="billgen.css" title="style" media="screen">
</head>
<body>
    <center><h1>The Sponged.net Suche</h1></center>
    
        
    <form action="sufu.php" method="post">
    <input type="text" value="" class="billgen2" name="keywords">
    <input type="submit" value="Suchen">
    </form>
    
    </body>
</html>

Vielen Dank schonmal!

Gruss
Dennis
 
Bei diesem Teil hier
PHP:
$sql = "SELECT * FROM kundenverwaltung WHERE ".$query;
hängst du an einen String ein Array an. Ich glaube das ist der grund warum es nicht funktioniert. Oder lieg ich da falsch?
 
Ich gebe vor dem eigentlichen Datenbankeinträgen den SQL String immer erst aus. Weil wenn da ein fehler drin ist, kopiere ich den String und gebe den in phpmyadmin ein. Dort gibt es exakte Fehlermeldungen für den String!
 
Danke für das Feedback.

@balufreak: Na er sollte mir doch wenn überhaupt den Inhalt ausgeben und nicht nur das Wort "array", oder irre ich?

@ThaHammer: Was meinst Du mit den SQL String ausgeben? Ich möchte ja nichts reinschreiben sondern abrufen bzw. suchen?
 
DieTa schrieb:
Ich möchte ja nichts reinschreiben sondern abrufen bzw. suchen?

Ja und das machst Du mit einer Abfrage! Die wird dynamisch generiert und steht in einem String! In Deinem obigenb Beispiel ist die Abfrage defekt, weil Du einen String aus String und einem Array konkatenieren willst. Das geht nat. nicht.
Es gibt auch noch zig andere Gründe warum dynamische Abfragen falsch konstruiert werden könnten. Es bietet sich also an so etwas wie eine Variable:

$SQL_DEBUG=true;

am Anfang zu definieren und vor jeder ausgeführten SL-Anweisung sowas wie ein

if ($SQL_DEBUG)
print "Führe Anweisung *".$sql."* aus";

besonders sinnvoll ist es das in einer SQL-Klasse zu kapseln!
 
Hallo,

@balufreak: $query = implode("\n ".$association." ",$query); macht Array zu String!

Richtig, es wird nur die Anfrage ausgeführt. Die Ausgabe erfolgt jedoch nicht. Mit mysql_fetch_array kannst Du Dir die Daten holen. Gibt ein Array zurück, solange Daten vorliegen, sprich für jeden Treffer ein Array, also so lange aufrufen, bis false zurückkommt.

Wie das geht? Schau unter php.net

Gruß
Manjo
 
Zurück
Oben Unten