MySQL Datenbanksuchen mit PHP

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von DieTa, 11.09.2006.

  1. DieTa

    DieTa Thread Starter MacUser Mitglied

    Beiträge:
    3.278
    Zustimmungen:
    30
    MacUser seit:
    17.09.2003
    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
     
  2. balufreak

    balufreak MacUser Mitglied

    Beiträge:
    1.560
    Zustimmungen:
    28
    MacUser seit:
    12.10.2003
    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?
     
  3. ThaHammer

    ThaHammer MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    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!
     
  4. DieTa

    DieTa Thread Starter MacUser Mitglied

    Beiträge:
    3.278
    Zustimmungen:
    30
    MacUser seit:
    17.09.2003
    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?
     
  5. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.042
    Zustimmungen:
    1.317
    MacUser seit:
    13.09.2004
    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!
     
  6. Manjo

    Manjo MacUser Mitglied

    Beiträge:
    903
    Zustimmungen:
    22
    MacUser seit:
    25.07.2005
    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
     
Die Seite wird geladen...