ilch Forum » Allgemein » HTML, PHP, SQL,... » SELECT * FROM `tabelle` WHERE `feld` =

Geschlossen
  1. #31
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ok bei den ifs steht überall $wert, dass musst du $_POST[$fieldName] ersetzen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  2. #32
    User Pic
    CeeJay Hall Of Fame
    Registriert seit
    23.03.2007
    Beiträge
    2.425
    Beitragswertungen
    18 Beitragspunkte
    Hallo Mairu,

    danke für den Tipp - jetzt läuft die Abfrage zumindest schonmal an lächeln

    Bekanntlicherweise folgt aber ein Problem nach dem Anderen, ich bin dir wirklich dankbar für deine Hilfe bis hierhin.

    Meine Idee war es ja, das Statement so aufzubauen, das nur angefragte Variablen auch in den Suchstring mit reinkommen. Momentan ist es aber so, das ich JEDE Variable, die ich in meinem Array habe, in den String eingebaut bekomme... folglich bekomme ich keine Ergebnisse und einen MySQL Fehler.

    Ich will dich auch nicht täglich damit nerven - hast du vielleicht gute Quellen, wo genau solche Statements bearbeitet oder erklärt werden? Ich weiss nicht mehr, wonach ich noch Googlen soll... ich probier es immer mit "Komplizierte Statements" oder "erweiterte Abfrage" usw. , bekomme aber nur einfache Tutorials wie "Select * from ... " irgendwie fehlt mir da der richtige Ansatz.

    <?php
     
    #   Copyright by: CeeJay
    #   Support: www.ilch.de
    defined('main') or die('no direct access');
    mysql_set_charset('utf8');
    //Headerdaten
    $title = $allgAr['title'] . ' :: Suchergebnisse';
    $hmenu = 'Suchergebnisse';
    $design = new design($title, $hmenu);
    $design->header();
    //Templatedaten
    $tpl = new tpl('gebrauchtwagensuchergebnis.htm');
    $tpl->out(0);
    $class = 'Cnorm';
    //Fehlerbehandlung
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    // Formulardaten in Arrays packen
    $integerFields = array('id', 'airbag', 'allrad', 'alufelgen', 'anhaengerkupplung', 'antiblockiersystem', 'behindertengerecht', 'bordcomputer', 'dachreling', 'einparkhilfe', 'elektronischefensterheber', 'elektronischverstellbaresitze', 'esp', 'klima', 'kurvenlicht', 'multifunktionslenkrad', 'navi', 'nebelscheinwerfern', 'nichtraucherfahrzeug', 'panoramadach', 'radio', 'regensensor', 'rueckfahrkamera', 'schiebedach', 'servo', 'sitzheizung', 'skisack', 'sportfahrwerk', 'sportpaket', 'sportsitze', 'startstopautomatik', 'tagfahrlicht', 'tempomat', 'xenonscheinwerfern', 'zentralverriegelung');
    $stringFields = array('farbe', 'getriebe', 'karosserie', 'kraftstoff', 'marke', 'model', 'id');    
    $betweenFields = array('baujahrvon', 'baujahrbis', 'preisvon', 'preisbis', 'leistungvon', 'leistungbis');                 
    
    // SQL Abfrage
    $queryString = ('SELECT `id`, `airbag`, `allrad`, `alufelgen`, `anhaengerkupplung`, `antiblockiersystem`, `baujahr`, `baumonat`, `behindertengerecht`, `bild1`, `bordcomputer`, `dachreling`, `datetime`, `einparkhilfe`, `elektronischefensterheber`, `elektronischverstellbaresitze`, `esp`, `farbe`, `getriebe`, `karosserie`, `kilometerstand`, `klima`, `kraftstoff`, `kurvenlicht`, `marke`, `maengelbeschreibung`, `model`, `multifunktionslenkrad`, `navi`, `nebelscheinwerfer`, `nichtraucherfahrzeug`, `panoramadach`, `preis`, `ps`, `radio`, `regensensor`, `rueckfahrkamera`, `schiebedach`, `servo`, `sitzheizung`, `skisack`, `sportfahrwerk`, `sportpaket`, `sportsitze`, `standheizung`, `startstopautomatik`, `tagfahrlicht`, `tempomat`, `tuvaubismonat`, `tuvaubisjahr`, `xenonscheinwerfer`, `zentralverriegelung` FROM `prefix_gebrauchtwagen` WHERE ');
    $ands = array('1=1');
    foreach ($stringFields as $fieldName) {
        if (!empty($_POST[$fieldName])) {
    		$ands[] = $name . ' = "' . escape($_POST[$fieldName], 'string') . '"';
        }
    }
    foreach ($integerFields as $fieldName) {
        if (!empty($_POST[$fieldName]) && $_POST[$fieldName] !== '0') {
            $ands[] = $name . ' = ' . escape($_POST[$fieldName], 'integer');
        }
    }
    /*
    foreach ($betweenFields as $fieldName) {
        if (!empty($_POST[$fieldName]) && $_POST[$fieldName] !== '0') {
            $ands[] = $name . ' BETWEEN ' . escape($_POST[$fieldName], 'integer');
        }
    }
    */
    $queryString .= implode(' AND ', $ands) . ' ORDER BY `preis` ASC';
    $query = db_query($queryString);
    if ($query === FALSE) {
        die(mysql_error()); // Fehlerbehandlung
    }
    echo '<br><br><b>Abfragestring START</b><br><br>';
    print $queryString; //Abfrage abbilden
    echo '<br><br><b>Abfragestring ENDE</b><br><br>';
    /*`marke` LIKE '$marke'
    AND `preis` BETWEEN '$preisvon' AND '$preisbis' 
    AND `baujahr` BETWEEN '$baujahrvon' AND '$baujahrbis'
    AND `ps` BETWEEN '$leistungvon' AND '$leistungbis'
    ORDER BY `datetime` DESC");
    */
    // Treffer anzeigen
    $anzerg = db_num_rows($query);
    // Wenn Treffer gefunden wurden, wollen wir wissen wie viele Treffer es sind
    echo 'Ihre Suche hat <b>' . $anzerg . '</b> Treffer ergeben!';
    //error_reporting(E_ALL); 
     
     
    ?>
    <div class="suchergebnisse">
        <table>
    	<?php while ($row = db_fetch_object($query)) {?>
            <thead>
                <tr>
                    <th colspan="3"><?php echo "" . $row->marke . ""; ?> <?php echo "" . $row->model . ""; ?></th>
    				<th><?php echo "" . $row->kraftstoff . ""; ?></th>
    				<th><?php echo "" . $row->baumonat . ""; ?>/<?php echo "" . $row->baujahr . ""; ?></th>
    				<th><?php echo "" . $row->ps . ""; ?></th>
    				<th><?php echo "" . $row->preis . ""; ?> &euro;</th>
    				
                </tr>
            </thead>
                    <tbody>
                        <tr width="150" height="120">
                            <td class="suchergebnisbilder"><?php echo '<div class="suchergebnisbilder"><img src="include/images/gebrauchtwagen/'.$row->bild1.'" width="100" height="100"></img></div>'; ?></td>
                            <td width="200" height="120" class="maengelbeschreibung" rowspan="6" colspan="3"><?php
                            $maengelbeschreibung = $row->maengelbeschreibung;
                            $maengelbeschreibung_umbruch = wordwrap( $maengelbeschreibung, 50, "<br />\n" );
                            echo $maengelbeschreibung_umbruch; ?>
                            </td>
                            <td width="120" height="120">
                                <div class="gebrauchtwagenanzeigen">
                                    Marke:      <?php echo "" . $row->marke . ""; ?> <?php echo "" . $row->model . ""; ?><br><br>
                                    PS:         <?php echo "" . $row->ps . ""; ?><br>
                                    Kraftstoff: <?php echo "" . $row->kraftstoff . ""; ?><br>
                                    Tüv/AU bis: <?php echo "" . $row->tuvaubisjahr . ""; ?><br>
                                    Farbe:      <?php echo "" . $row->farbe . ""; ?><br>
                                    <a href="index.php?gebrauchtwagenanzeigen"><input type="submit" class="button" name="gebrauchtwagenanzeigen" value="Inserat anzeigen"></a>
                                </div>
                            </td width="150">
                        </tr>
                        <tr class="alt">
                            <td>ID: <?php echo "" . $row->id . ""; ?><br><?php echo "" . $row->datetime . ""; ?></td>
                        </tr>
                        <tr>
    <?php } ?>
                        </tr>
                    </tbody>
                <tfoot>
                <tr>
                    <td colspan="5">
                        <div id="paging">
                            <ul>
                                <li><a href="#"><span>zur&uuml;ck</span></a></li>
                                <li><a href="#" class="active"><span>1</span></a></li>
                                <li><a href="#"><span>vorw&auml;rts</span></a></li>
                            </ul>
                        </div>
                </tr>
                </tfoot>
        </table>
    </div>
    Nichts ist so sicher, wie die Änderung.
    0 Mitglieder finden den Beitrag gut.
  3. #33
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Das hat ja nicht direkt etwas mit den Statements zu tun, das sind ja im Grunde nur Textmanipulationen (einfügen, zusammenführen, etc.), um am Ende eine Query zu haben (einen Text / String).

    Mit der !empty() Funktion wird eigentlich abgefragt, dass die Felder nicht leer sein dürfen, damit sie in der Query landen. Und z.B. '0' sollte auch als leer zählen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  4. #34
    User Pic
    CeeJay Hall Of Fame
    Registriert seit
    23.03.2007
    Beiträge
    2.425
    Beitragswertungen
    18 Beitragspunkte
    Hmm... ich hab ja viele Felder, die mit 0 als Wert in den Array wandern... kann ich die 0-Felder aus dem Query rausoperieren? lächeln
    Nichts ist so sicher, wie die Änderung.
    0 Mitglieder finden den Beitrag gut.
  5. #35
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Sie dürften eigentlich nicht drin landen, !empty('0') ist false und somit dürfte er nicht ins $ands Array eingefügt werden.

    Ich hab mir gerade nochmal dein HTML Code angeschaut, du hast bei den hidden Feldern vor einigen Checkboxen, als value nicht 0 sondern, den Namen verwendet, der ist ja nicht leer, deswegen werden die dann eingefügt.

    Überhaupt brauchst du bei diesen Multifield checkboxen, also mit name="xxx[]" keine hidden Feld setzen, da diese ja eh anders behandelt werden müssen, das ist ja dann ein Array mit den Werten der gewählten Checkboxen, das kannst du nicht wie ein Textfeld behandeln.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  6. #36
    User Pic
    CeeJay Hall Of Fame
    Registriert seit
    23.03.2007
    Beiträge
    2.425
    Beitragswertungen
    18 Beitragspunkte
    Okay das mit den HIDDENVALUES ist jetzt mal raus zunge die Suche mit den Stringfeldern funktioniert wunderbar (z.B. Marke). Probleme habe ich noch mit den Array´s (z.B. Farbe oder Kraftstoff) - wie muss ich denn die Array´s behandeln? Wahrscheinlich muss ich die auseinanderfriemeln und dann in die Abfrage mit reinnehmen oder?

    <?php
    #   Copyright by: CeeJay
    #   Support: www.ilch.de
    #   Entwickelt für: www.yagmurcu.de
    defined('main') or die('no direct access');
    mysql_set_charset('utf8');
    $title = $allgAr['title'] . ' :: Suchergebnisse';
    $hmenu = 'Suchergebnisse';
    $design = new design($title, $hmenu);
    $design->header();
    $tpl = new tpl('gebrauchtwagensuchergebnis.htm');
    $tpl->out(0);
    $class = 'Cnorm';
    /*
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    */
    // Zahlenfelder
    $integerFields = array('id', 'airbag', 'allrad', 'alufelgen', 'anhaengerkupplung', 'antiblockiersystem', 'behindertengerecht', 'bordcomputer', 'dachreling', 'einparkhilfe', 'elektronischefensterheber', 'elektronischverstellbaresitze', 'esp', 'klima', 'kurvenlicht', 'multifunktionslenkrad', 'navi', 'nebelscheinwerfern', 'nichtraucherfahrzeug', 'panoramadach', 'radio', 'regensensor', 'rueckfahrkamera', 'schiebedach', 'servo', 'sitzheizung', 'skisack', 'sportfahrwerk', 'sportpaket', 'sportsitze', 'startstopautomatik', 'tagfahrlicht', 'tempomat', 'xenonscheinwerfern', 'zentralverriegelung');
    // Zeichenfelder
    $stringFields = array('farbe', 'getriebe', 'karosserie', 'kraftstoff', 'marke', 'model', 'id'); 
    // Zahl zwischen - Felder   
    $betweenFields = array('baujahrvon', 'baujahrbis', 'preisvon', 'preisbis', 'leistungvon', 'leistungbis');                 
    // SQL Abfrage
    $queryString = ('SELECT `id`, `airbag`, `allrad`, `alufelgen`, `anhaengerkupplung`, `antiblockiersystem`, `baujahr`, `baumonat`, `behindertengerecht`, `bild1`, `bordcomputer`, `dachreling`, `datetime`, `einparkhilfe`, `elektronischefensterheber`, `elektronischverstellbaresitze`, `esp`, `farbe`, `getriebe`, `karosserie`, `kilometerstand`, `klima`, `kraftstoff`, `kurvenlicht`, `marke`, `maengelbeschreibung`, `model`, `multifunktionslenkrad`, `navi`, `nebelscheinwerfer`, `nichtraucherfahrzeug`, `panoramadach`, `preis`, `ps`, `radio`, `regensensor`, `rueckfahrkamera`, `schiebedach`, `servo`, `sitzheizung`, `skisack`, `sportfahrwerk`, `sportpaket`, `sportsitze`, `standheizung`, `startstopautomatik`, `tagfahrlicht`, `tempomat`, `tuvaubismonat`, `tuvaubisjahr`, `xenonscheinwerfer`, `zentralverriegelung` FROM `prefix_gebrauchtwagen` WHERE ');
    // Die AND - Bedingungen definieren - wenn Feld leer, dann nicht in Statement aufnehmen. Ansonsten wird daraus ein AND - definiert.
    $ands = array('1=1');
    foreach ($stringFields as $fieldName) {
        if (!empty($_POST[$fieldName])) {
    		$ands[] = $fieldName . ' = "' . escape($_POST[$fieldName], 'string') . '"';
        }
    }
    foreach ($integerFields as $fieldName) {
        if (!empty($_POST[$fieldName]) && $_POST[$fieldName] !== '0') {
            $ands[] = $fieldName . ' = ' . escape($_POST[$fieldName], 'integer');
        }
    }
    /*
    // Preis, PS, Baujahr als BETWEEN-Abfrage
    foreach ($betweenFields as $fieldName) {
        if (!empty($_POST[$fieldName]) && $_POST[$fieldName] !== '0') {
            $ands[] = $fieldName . ' BETWEEN ' . escape($_POST[$fieldName], 'integer');
        }
    }
    */
    $queryString .= implode(' AND ', $ands) . ' ORDER BY `preis` ASC';
    $query = db_query($queryString);
    if ($query === FALSE) {
        die(mysql_error()); // Fehlerbehandlung
    }
    /*
    echo '<br><br><b>Abfragestring START</b><br><br>';
    print $queryString; //Abfrage abbilden
    echo '<br><br><b>Abfragestring ENDE</b><br><br>';
    */
    // Wenn Treffer gefunden wurden, wollen wir wissen wie viele Treffer es sind
    $anzerg = db_num_rows($query);
    if ($anzerg = 0) {
    echo 'Ihre Suche hat leider keine Treffer erzielt. Versuchen Sie es bitte mit weniger Suchkriterien.';
    }
    echo 'Ihre Suche hat <b>' . $anzerg . '</b> Treffer ergeben!';
    //error_reporting(E_ALL); 
    ?>
    <div class="suchergebnisse">
        <table>
    	<?php while ($row = db_fetch_object($query)) {?>
            <thead>
                <tr>
                    <th colspan="3"><?php echo "" . $row->marke . ""; ?> <?php echo "" . $row->model . ""; ?></th>
    				<th><?php echo "" . $row->kraftstoff . ""; ?></th>
    				<th><?php echo "" . $row->baumonat . ""; ?>/<?php echo "" . $row->baujahr . ""; ?></th>
    				<th><?php echo "" . $row->ps . ""; ?></th>
    				<th><?php echo "" . $row->preis . ""; ?> &euro;</th>
    				
                </tr>
            </thead>
                    <tbody>
                        <tr width="150" height="120">
                            <td class="suchergebnisbilder"><?php echo '<div class="suchergebnisbilder"><img src="include/images/gebrauchtwagen/'.$row->bild1.'" width="100" height="100"></img></div>'; ?></td>
                            <td width="200" height="120" class="maengelbeschreibung" rowspan="6" colspan="3"><?php
                            $maengelbeschreibung = $row->maengelbeschreibung;
                            $maengelbeschreibung_umbruch = wordwrap( $maengelbeschreibung, 50, "<br />\n" );
                            echo $maengelbeschreibung_umbruch; ?>
                            </td>
                            <td width="120" height="120">
                                <div class="gebrauchtwagenanzeigen">
                                    Marke:      <?php echo "" . $row->marke . ""; ?> <?php echo "" . $row->model . ""; ?><br><br>
                                    PS:         <?php echo "" . $row->ps . ""; ?><br>
                                    Kraftstoff: <?php echo "" . $row->kraftstoff . ""; ?><br>
                                    Tüv/AU bis: <?php echo "" . $row->tuvaubisjahr . ""; ?><br>
                                    Farbe:      <?php echo "" . $row->farbe . ""; ?><br>
                                    <a href="index.php?gebrauchtwagenanzeigen"><input type="submit" class="button" name="gebrauchtwagenanzeigen" value="Inserat anzeigen"></a>
                                </div>
                            </td width="150">
                        </tr>
                        <tr class="alt">
                            <td>ID: <?php echo "" . $row->id . ""; ?><br><?php echo "" . $row->datetime . ""; ?></td>
                        </tr>
                        <tr>
    <?php } ?>
                        </tr>
                    </tbody>
                <tfoot>
                <tr>
                    <td colspan="5">
                        <div id="paging">
                            <ul>
                                <li><a href="#"><span>zur&uuml;ck</span></a></li>
                                <li><a href="#" class="active"><span>1</span></a></li>
                                <li><a href="#"><span>vorw&auml;rts</span></a></li>
                            </ul>
                        </div>
                </tr>
                </tfoot>
        </table>
    </div>
    Nichts ist so sicher, wie die Änderung.
    0 Mitglieder finden den Beitrag gut.
  7. #37
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Bei einem Array kannst du der Einfachheit halber die IN Notation verwenden.

    So in dem Prinzip.
        if (!empty($_POST[$fieldName])) {
            if (is_array($_POST[$fieldName])) {
                $values = array();
                foreach ($_POST[$fieldName] as $fieldValue) {
                   $values = '"' . escape($fieldValue, 'string') . '"';
                }
                $ands[] = $fieldName . ' IN (' . implode(', ', $values) . ')';
            } else {
               $ands[] = $fieldName . ' = "' . escape($_POST[$fieldName], 'string') . '"';
            }
        }
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  8. #38
    User Pic
    CeeJay Hall Of Fame
    Registriert seit
    23.03.2007
    Beiträge
    2.425
    Beitragswertungen
    18 Beitragspunkte
    Danke Mairu,

    hier mal die Meldung:

    Warning: strip_tags() expects parameter 1 to be string, array given in /var/www/clients/client1053/web10909/web/usr_web/include/includes/func/escape.php on line 24

    Die Abfrage sieht so aus:

    Abfragestring START

    SELECT `id`, `airbag`, `allrad`, `alufelgen`, `anhaengerkupplung`, `antiblockiersystem`, `baujahr`, `baumonat`, `behindertengerecht`, `bild1`, `bordcomputer`, `dachreling`, `datetime`, `einparkhilfe`, `elektronischefensterheber`, `elektronischverstellbaresitze`, `esp`, `farbe`, `getriebe`, `karosserie`, `kilometerstand`, `klima`, `kraftstoff`, `kurvenlicht`, `marke`, `maengelbeschreibung`, `model`, `multifunktionslenkrad`, `navi`, `nebelscheinwerfer`, `nichtraucherfahrzeug`, `panoramadach`, `preis`, `ps`, `radio`, `regensensor`, `rueckfahrkamera`, `schiebedach`, `servo`, `sitzheizung`, `skisack`, `sportfahrwerk`, `sportpaket`, `sportsitze`, `standheizung`, `startstopautomatik`, `tagfahrlicht`, `tempomat`, `tuvaubismonat`, `tuvaubisjahr`, `xenonscheinwerfer`, `zentralverriegelung` FROM `prefix_gebrauchtwagen` WHERE 1=1 AND karosserie = "" ORDER BY preis ASC

    Abfragestring ENDE

    Der Array für z.B. die Karosserie wird nicht aufgelistet... es soll ja auch möglich sein, nach verschiedenen Karosserietypen zu suchen, also müsste ja am Ende sowas wie "AND karosserie = "WERT1" OR "WERT2"... " rauskommen.
    Nichts ist so sicher, wie die Änderung.
    0 Mitglieder finden den Beitrag gut.
  9. #39
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Das geht wie schon geschrieben einfacher mit der IN Notation.

    Ich weiß ja nicht, wie jetzt dein kompletter Code aussieht, auf jeden Fall wird ein Array bei escape übergeben, was nicht passieren sollte. Am besten du postest nochmal deinen kompletten Code.

    Alternativ auch als gist oder bei collabedit oder pastbin oder sowas.


    Zuletzt modifiziert von Mairu am 16.10.2013 - 22:19:32
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  10. #40
    User Pic
    CeeJay Hall Of Fame
    Registriert seit
    23.03.2007
    Beiträge
    2.425
    Beitragswertungen
    18 Beitragspunkte
    Der code sieht so aus:

    <?php
    #   Copyright by: CeeJay
    #   Support: www.ilch.de
    #   Entwickelt für: www.yagmurcu.de
    defined('main') or die('no direct access');
    mysql_set_charset('utf8');
    $title = $allgAr['title'] . ' :: Suchergebnisse';
    $hmenu = 'Suchergebnisse';
    $design = new design($title, $hmenu);
    $design->header();
    $tpl = new tpl('gebrauchtwagensuchergebnis.htm');
    $tpl->out(0);
    $class = 'Cnorm';
    /*
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    */
    
    
    // Variablen, die nicht anders verarbeitet werden können, escapen
    $baujahrvon = escape($_POST['baujahrvon'],'integer');
    $baujahrbis = escape($_POST['baujahrbis'],'integer');
    $preisvon = escape($_POST['preisvon'],'integer');
    $preisbis = escape($_POST['preisbis'],'integer');
    $leistungvon = escape($_POST['leistungvon'],'integer');
    $leistungbis = escape($_POST['leistungbis'],'integer');
    //$karosserie = escape($_POST['karosserie']);// Diese Zeile nachher löschen!!
    
    
    // Zahlenfelder
    $integerFields = array('id', 'airbag', 'allrad', 'alufelgen', 'anhaengerkupplung', 'antiblockiersystem', 'behindertengerecht', 'bordcomputer', 'dachreling', 'einparkhilfe', 'elektronischefensterheber', 'elektronischverstellbaresitze', 'esp', 'klima', 'kurvenlicht', 'multifunktionslenkrad', 'navi', 'nebelscheinwerfern', 'nichtraucherfahrzeug', 'panoramadach', 'radio', 'regensensor', 'rueckfahrkamera', 'schiebedach', 'servo', 'sitzheizung', 'skisack', 'sportfahrwerk', 'sportpaket', 'sportsitze', 'startstopautomatik', 'tagfahrlicht', 'tempomat', 'xenonscheinwerfern', 'zentralverriegelung');
    
    
    
    // Zeichenfelder
    $stringFields = array('farbe', 'getriebe', 'karosserie', 'kraftstoff', 'marke', 'model', 'id');   
    
    
    ###########################################
    // SQL Abfrage S T A R T
    ###########################################
    $queryString = ('SELECT `id`, `ort`, `airbag`, `allrad`, `alufelgen`, `anhaengerkupplung`, `antiblockiersystem`, `baujahr`, `baumonat`, `behindertengerecht`, `bild1`, `bordcomputer`, `dachreling`, `datetime`, `einparkhilfe`, `elektronischefensterheber`, `elektronischverstellbaresitze`, `esp`, `farbe`, `getriebe`, `karosserie`, `kilometerstand`, `klima`, `kraftstoff`, `kurvenlicht`, `marke`, `maengelbeschreibung`, `model`, `multifunktionslenkrad`, `navi`, `nebelscheinwerfer`, `nichtraucherfahrzeug`, `panoramadach`, `preis`, `ps`, `radio`, `regensensor`, `rueckfahrkamera`, `schiebedach`, `servo`, `sitzheizung`, `skisack`, `sportfahrwerk`, `sportpaket`, `sportsitze`, `standheizung`, `startstopautomatik`, `tagfahrlicht`, `tempomat`, `tuvaubismonat`, `tuvaubisjahr`, `xenonscheinwerfer`, `zentralverriegelung` FROM `prefix_gebrauchtwagen` WHERE ');
    $preisFields = array('preisvon', 'preisbis');
    
    
    
    // Zeichenfelder abfragen und in den Suchstring packen, wenn was eingegeben wurde
    $ands = array('1=1');
    foreach ($stringFields as $fieldName) {
        if (!empty($_POST[$fieldName])) {
    		$ands[] = $fieldName . ' = "' . escape($_POST[$fieldName], 'string') . '"';
        }
    }
    
    
    /*
    // Array´s mit der IN-Notation behandeln, als Abfrage OR
    if (!empty($_POST[$fieldName])) {
        if (is_array($_POST[$fieldName])) {
            $values = array($_POST[$fieldName]);
            foreach ($_POST[$fieldName] as $fieldValue) {
               $values = '"' . escape($fieldValue, 'string') . '"';
            }
            $ands[] = $fieldName . ' IN (' . implode(', ', $values) . ')';
        } else {
           $ands[] = $fieldName . ' OR "' . escape($_POST[$fieldName], 'string') . '"';
        }
    }
    */
    
    
    // Zahlenfelder abfragen und in den Suchstring packen, wenn was eingegeben wurde
    foreach ($integerFields as $fieldName) {
        if (!empty($_POST[$fieldName]) && $_POST[$fieldName] !== '0') {
            $ands[] = $fieldName . ' = ' . escape($_POST[$fieldName], 'integer');
        }
    }
    
    
    
    // Abfrage zu einem String zusammenführen
    $queryString .= implode(' AND ', $ands) . ' ORDER BY preis ASC ';
    $query = db_query($queryString);
    if ($query === FALSE) {
        die(mysql_error()); // Fehlerbehandlung
    }
    
    
    
    // Sortieren
    echo '<a href="' . $_SERVER['PHP_SELF'] . '?gebrauchtwagensuchergebnisneu-sort=desc">Absteigend</a><br>';
    
    echo '<a href="' . $_SERVER['PHP_SELF'] . '?gebrauchtwagensuchergebnisneu-sort=asc">Aufsteigend</a>';
    
    
    
    // Sortierfunktion PHP
    if( $_GET['sort'] == 'desc' )
    {
      $queryString .= ' desc';
    } else {
      $queryString .= ' asc';
    }
    
    
    /*
    // Abfrage ausgeben lassen (wieder auskommentieren!!!)
    echo '<br><br><b>Abfragestring START</b><br><br>';
    print $queryString;
    echo '<br><br><b>Abfragestring ENDE</b><br><br>';
    */
    ################################################
    // SQL Abfrage E N D E
    ################################################
    
    
    // Wenn Treffer gefunden wurden, wollen wir wissen wie viele Treffer es sind
    $anzerg = db_num_rows($query);
    echo 'Ihre Suche hat <b>' . $anzerg . '</b> Treffer ergeben!';
    //error_reporting(E_ALL); 
    
    
    
    // Tabelle mit den Suchergebnissen ausgeben
    ?>
    <div class="suchergebnisse">
        <table>
    	<?php while ($row = db_fetch_object($query)) {?>
            <thead>
                <tr>
                    <th colspan="3"><?php echo "" . $row->marke . ""; ?> <?php echo "" . $row->model . ""; ?><?php echo "" . $row->kraftstoff . ""; ?></th>
    				<th>Baujahr: <?php echo "" . $row->baumonat . ""; ?>/<?php echo "" . $row->baujahr . ""; ?></th>
    				<th><?php echo "" . $row->ps . ""; ?> PS</th>
    				<th><?php echo "" . $row->preis . ""; ?> &euro;</th>
    				<th>Standort: <?php echo "" . $row->ort . ""; ?></th>
    				
                </tr>
            </thead>
                    <tbody>
                        <tr width="150" height="120">
                            <td class="suchergebnisbilder"><?php echo '<div class="suchergebnisbilder"><img src="include/images/gebrauchtwagen/'.$row->bild1.'" width="100" height="100"></img></div>'; ?></td>
                            <td width="200" height="120" class="maengelbeschreibung" rowspan="6" colspan="3"><?php
                            $maengelbeschreibung = $row->maengelbeschreibung;
                            $maengelbeschreibung_umbruch = wordwrap( $maengelbeschreibung, 50, "<br />\n" );
                            echo $maengelbeschreibung_umbruch; ?>
                            </td>
                            <td width="120" height="120">
                                <div class="gebrauchtwagenanzeigen">
                                    Marke:      <?php echo "" . $row->marke . ""; ?> <?php echo "" . $row->model . ""; ?><br><br>
                                    PS:         <?php echo "" . $row->ps . ""; ?><br>
                                    Kraftstoff: <?php echo "" . $row->kraftstoff . ""; ?><br>
                                    Tüv/AU bis: <?php echo "" . $row->tuvaubisjahr . ""; ?><br>
                                    Farbe:      <?php echo "" . $row->farbe . ""; ?><br>
                                    <form method="post" action="index.php?gebrauchtwagenanzeigen"><a href="index.php?gebrauchtwagenanzeigen-<?php echo '$id' ?>"><input type="submit" class="button" name="gebrauchtwagenanzeigen" value="Inserat anzeigen"></a><form>
                                </div>
                            </td width="150">
                        </tr>
                        <tr class="alt">
                            <td>ID: <?php echo "" . $row->id . ""; ?><br><?php echo "" . $row->datetime . ""; ?></td>
                        </tr>
                        <tr>
    <?php } ?>
                        </tr>
                    </tbody>
                <tfoot>
                <tr>
                    <td colspan="5">
                        <div id="paging">
                            <ul>
                                <li><a href="#"><span>zur&uuml;ck</span></a></li>
                                <li><a href="#" class="active"><span>1</span></a></li>
                                <li><a href="#"><span>vorw&auml;rts</span></a></li>
                            </ul>
                        </div>
                </tr>
                </tfoot>
        </table>
    </div>


    Die POST-Daten vom HTML-Formular werden richtig übergeben (als Array) - ich vermute einfach, das für jeden Arraywert eine eigene Suchanfrage erzeugt werden muss... zu der IN Notation hab ich bei Google leider nicht viel gefunden - hast du vielleicht Quellen für mich Mairu?
    Nichts ist so sicher, wie die Änderung.
    0 Mitglieder finden den Beitrag gut.
  11. #41
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Also hier mal ein Link zur Doku: dev.mysql.com/doc/refman/5.1/de/comparison-operators.html#idm47333686506640

    Du hast es ja auskommentiert, hattest du es so drin?

    ###########################################
    // SQL Abfrage S T A R T
    ###########################################
    $queryString = ('SELECT `id`, `ort`, `airbag`, `allrad`, `alufelgen`, `anhaengerkupplung`, `antiblockiersystem`, `baujahr`, `baumonat`, `behindertengerecht`, `bild1`, `bordcomputer`, `dachreling`, `datetime`, `einparkhilfe`, `elektronischefensterheber`, `elektronischverstellbaresitze`, `esp`, `farbe`, `getriebe`, `karosserie`, `kilometerstand`, `klima`, `kraftstoff`, `kurvenlicht`, `marke`, `maengelbeschreibung`, `model`, `multifunktionslenkrad`, `navi`, `nebelscheinwerfer`, `nichtraucherfahrzeug`, `panoramadach`, `preis`, `ps`, `radio`, `regensensor`, `rueckfahrkamera`, `schiebedach`, `servo`, `sitzheizung`, `skisack`, `sportfahrwerk`, `sportpaket`, `sportsitze`, `standheizung`, `startstopautomatik`, `tagfahrlicht`, `tempomat`, `tuvaubismonat`, `tuvaubisjahr`, `xenonscheinwerfer`, `zentralverriegelung` FROM `prefix_gebrauchtwagen` WHERE ');
    $preisFields = array('preisvon', 'preisbis');
     
    // Zeichenfelder abfragen und in den Suchstring packen, wenn was eingegeben wurde
    $ands = array('1=1');
    foreach ($stringFields as $fieldName) {
        if (!empty($_POST[$fieldName])) {
            if (is_array($_POST[$fieldName])) {
                $values = array();
                foreach ($_POST[$fieldName] as $fieldValue) {
                   $values = '"' . escape($fieldValue, 'string') . '"';
                }
                $ands[] = $fieldName . ' IN (' . implode(', ', $values) . ')';
            } else {
                $ands[] = $fieldName . ' = "' . escape($_POST[$fieldName], 'string') . '"';
            }
        }
    }
     
    // Zahlenfelder abfragen und in den Suchstring packen, wenn was eingegeben wurde
    ...



    Zuletzt modifiziert von Mairu am 18.10.2013 - 09:13:07
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten