Ankündigung

Einklappen
Keine Ankündigung bisher.

Online-Shop - Programmierung - Suchen in DB

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Online-Shop - Programmierung - Suchen in DB

    Hallo liebe Community,

    kurz zu meinem Problem:

    Ich muss einen Online-Shop im Rahmen einer Hausarbeit programmieren.
    Mein Problem ist, dass ich nicht besonders viel PHP- / Oracle Kenntnisse habe.

    Jedenfalls bin ich an einem Punkt angekommen, an dem ich Hilfe von einem Experten brauche

    Ich möchte etwas ähnliches wie "Autoscout" programmieren und habe auf meiner Hauptseite den Quellcode mit der Suchmaske soweit erstellt (Es funktiert sogar).
    Die Hauptseite greit auf eine andere Datei zu, die wiederrum die Datenbank-Inhalte darstellt.
    Jetzt ist mein Problem, dass ich keine Idee habe wie ich mir nur die Autos anzeigen lassen kann,
    die vorher in der Suchmaske voreingestellt worden sind. (Screenshot der Suchmaske ist im Anhang)

    Hier der Quellcode, der die Tabellen darstellt:

    <html>
    <body>

    <?php

    $conn = oci_connect ('*****', '*****', '*****');

    $sql_string = "SELECT AUTONR, MARKE, MODELL, ERSTZULASSUNG,
    PREIS, KILOMETER, LEISTUNG_PS_, KRAFTSTOFF FROM AUTO
    ORDER BY MARKE";

    $stmnt = oci_parse ($conn, $sql_string);
    oci_execute($stmnt, OCI_DEFAULT);
    echo "<table><tr><th>Daten</th><th>Ansicht</th></tr>";
    $i=0;
    while ($row = oci_fetch_array ($stmnt, OCI_BOTH))

    {
    echo "<tr><td>
    Marke: $row[1]<br>
    Modell: $row[2]<br>
    Erstzulassung: $row[3]<br>
    Preis: $row[4]<br>
    Kilometerstand: $row[5]<br>
    Leistung (PS): $row[6]<br>
    Kraftstoff: $row[7]</td>";

    echo "<td><img src=bilder.php?id=$row[0] alt=$row[1]/$row[2]>
    </td></tr>";

    $i+=1;
    }
    if($i==0)
    {
    echo "Aktuell sind keine Fahrzeuge mit Ihren Wunschkriterien
    vorhanden";
    }
    echo "</table>";
    oci_free_statement($stmnt);
    flush();
    oci_close($conn);
    ?>
    </body>
    </html>

    Vielen Dank für eure Hilfe
    Angehängte Dateien

  • #2
    Hallo,

    willkommen im Forum! Bitte benutze zukünftig die "[PHP\][\/PHP]"-Tags. Zu deinem Problem:
    Du musst deinen SQL-Query " $sql_string" um ein WHERE-Statment erweitern das abhängig von den übertragenen Werten die Daten einschränkt. Würdest du PDO nutzen würde ich dir zu prepared-Statements raten!
    Gruß,
    SebTM

    Kommentar


    • #3
      Danke für die schnelle Antwort
      Meinst du in etwa so:

      PHP-Code:
          $sql_string "SELECT AUTONR, MARKE, MODELL, ERSTZULASSUNG, PREIS,
          KILOMETER, LEISTUNG_PS_, KRAFTSTOFF FROM AUTO WHERE (MARKE LIKE 
      $_POST["MARKE"] AND MODELL LIKE $_POST["MODELL"] AND ERSTZULASSUNG LIKE $_POST["ERSTZULASSUNG"]
          AND PREIS LIKE 
      $_POST["PREIS"] AND KILOMETER LIKE $_POST["KILOMETER"] AND LEISTUNG_PS_ LIKE $_POST["LEISTUNG_PS_"] AND KRAFTSTOFF LIKE $_POST["KRAFTSTOFF"]
          ORDER BY MARKE"

      Es funktioniert leider nicht und ich bekomme die Fehlermeldung:
      Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /data/webcontent/projekte/proj_17_hb14/fahrzeug_anzeige_mitbild.php on line 9

      Was ich noch erschwerend finde ist, dass die Variablen dynamisch übergeben werden sollen (damit meine ich, dass ich nichts bestimmtes in meinem Query vorgeben will) und das Parameter wie "<=" z.B. beim Preis mitberücksichtigt werden müssen

      Bin dankbar für jeden Tipp.
      Anatolij

      Kommentar


      • #4
        Zitat von Anatolij Beitrag anzeigen
        Es funktioniert leider nicht und ich bekomme die Fehlermeldung:
        Das sind absolute Grundlagen. Strings verknüpfen und so...

        Zitat von Anatolij Beitrag anzeigen
        Was ich noch erschwerend finde ist, dass die Variablen dynamisch übergeben werden sollen (damit meine ich, dass ich nichts bestimmtes in meinem Query vorgeben will) und das Parameter wie "<=" z.B. beim Preis mitberücksichtigt werden müssen
        Du musst aus der Eingabe ein entsprechenden Query erzeugen. Das ist auch für ein Anfänger machbar. Für den einfachsten Ansatz reichen ein paar ifs und Stringverknüpfungen.

        Kommentar


        • #5
          Hallo,

          so wie du das machst spuckt dir PHP nur einen Fehler aus da es nicht Syntax konform ist!

          http://www.php.de/php-einsteiger/489...nsammlung.html

          Auch Sicherheitstechnisch ist das nicht gut was du machst, weil du die Parameter nichmal irgendwie escapest o.ä. damit man nicht einfach den Query verändern kann!

          Ich würde die Sache so in etwa angehen:
          PHP-Code:
          <?php

          $sql_string 
          'SELECT AUTONR, MARKE, MODELL, ERSTZULASSUNG,
          PREIS, KILOMETER, LEISTUNG_PS_, KRAFTSTOFF FROM AUTO'
          ;

          $orderBy 'ORDER BY MARKE';

          $validFields = array(
              
          'MODELL' => array('operator' => 'LIKE''validateValue' => 'strval'),
              
          'ERSTZULASSUNG' => array('operator' => 'LIKE''validateValue' => 'intval'),
              
          'PREIS' => array('operator' => '<=''validateValue' => 'intval'),
              
          'KILOMETER' => array('operator' => 'LIKE''validateValue' => 'intval'),
              
          'LEISTUNG_PS_' => array('operator' => 'LIKE''validateValue' => 'intval'),
              
          'KRAFTSTOFF' => array('operator' => 'LIKE''validateValue' => 'strval')
          );

          $where '';

          foreach (
          $validFields as $fieldName => $fieldConfig)
          {
              if (isset(
          $_POST[$fieldName]) && !empty($_POST[$fieldName])) {
                  
          $where .= $fieldName ' ' $fieldConfig['operator'] . ' "' call_user_func($fieldConfig['validateValue'], $_POST[$fieldName]) . '"';
              }
          }

          $sql_string $sql_string ' ' $where ' ' $orderBy;
          ACHTUNG: Ich habe keine Ahnung von Oracle und mache nicht die ganze Arbeit für dich - daher musst du das Script noch insofern anpassen das die Eingaben des Users entsprechend abgesichert werden das keine SQL-Injection o.ä. möglich ist. Am besten wäre es, prepared Statements zu nutzen - weiß aber auch hier nicht ob Oracle dies kann.
          Gruß,
          SebTM

          Kommentar


          • #6
            Ich frag mal ganz dumm nach:
            Ich muss einen Online-Shop im Rahmen einer Hausarbeit programmieren.
            Im Ernst
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Zitat von SebTM Beitrag anzeigen
              ...Ich habe keine Ahnung von Oracle und mache nicht die ganze Arbeit für dich...
              Um Gottes Willen, das verlange ich gar nicht

              Aber der Vorschlag mit dem Quellcode ist gut. Es ist aber leider noch der Wurm drin in der Syntax.
              Ich schaue es mir heute Abend in Ruhe noch mal an und melde mich dann noch mal (hoffentlich mit neuen Erkenntnissen).

              Zitat von Arne Drews Beitrag anzeigen
              Im Ernst
              Ja Zählt mit 60% in die Gesamtnote im Informatik-Modul.

              Kommentar

              Lädt...
              X