dichti: Suchen nach verschiedenen Kriterien

Hallo zusammen

Ich steh wieder vor einem kleinen grösseren Problem.
Wenns schon mal ähnlich beantwortet wurde reicht mir natürlich auch einen Link, hab nur genug vom googlen.
Das Problem sieht wie folgt aus:

Ich habe ein Formular.. Dessen Daten werden an ein "Ausführ-Script" gesendet.
Nun möchte ich, dass es nur die Datensätze ausgibt auf welche die Einträge passen.
Leere Einträge sollen nicht verwendet werden.

<?php
         include 'inc/config.php';

$search   = $_GET['search'];
         $title   = $_POST["moviez_title"];
 $subtitle  = $_POST["moviez_subertitle"];
         $genre    = $_POST["moviez_genre"];
         $release   = $_POST["moviez_release"];
         $language   = $_POST["moviez_language"];

$db=mysql_connect($gl_datenbankhost, $gl_datenbankbenutzername, $gl_datenbankbenutzerpasswort);
 mysql_select_db($gl_datenbankname,$db);

$search_results = "SELECT *
             FROM moviez
                           WHERE (
                            Titel LIKE '%$title%'
    AND Untertitel LIKE '%$subtitle%'
    AND Genre LIKE '%$genre%'
                                 AND Erscheinungsdatum LIKE '%$release%'
                                 AND Sprache LIKE '%$language%')
                           ORDER BY $search";
         $result = mysql_query($search_results);
         while($row = mysql_fetch_object($result))
          {
                 echo
                 "<tr><td>",
                  $row->Titel,
                 "</td><td>",
                  $row->Untertitel,
                 "</td><td>",
                  $row->Genre,
                 "</td><td>",
                  $row->Erscheinungsdatum,
                 "</td><td>",
                  $row->Sprache,
                 "</td><td>",
                  $row->Bild,
                 "</td><td>",
                  $row->Ton,
                 "</td><td>",
                  "<a href="look_search_moviez.php?id=",$row->ID,""><img src="../../images/buttons/search/look.png" id="small_pic"></a>",
                 "</td><td>",
                  "<a href="del_search_moviez.php?id=",$row->ID,""><img src="../../images/buttons/search/del.png" id="small_pic"></a>",
                 "</td><td>",
                  "<a href="upd_search_moviez.php?id=",$row->ID,""><img src="../../images/buttons/search/upd.png" id="small_pic"></a>",
                 "</td></tr>",
                 "<tr><td colspan="10">",
                 "<div id="row_spacer"></div>",
                 "</td></tr>";
                 }
         ?>

Vielleicht kann mir ja jemand helfen. In diesem Sinne danke jetzt schon mal.

Dichti

  1. Hallo Dichti,

    Ich steh wieder vor einem kleinen grösseren Problem.

    Zerlege das größere Problem in kleinere.
    Baue zunächst eine SQL-Abfrage mit EINEM Auswahlkriterium.
    Fürchte Dich dabei vor SQL-Injection und sorge für richtige Behandlung
    der Formulardaten (Z.B. mit mysql_real_escape_string() ).

    "SELECT *" und LIKE "%someString%" sind nicht performant, aber das wird erst bei einer größeren Anzahl von Datensätzen problematisch.

    Viele Grüße

    Stefan

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Stefan,

      Ich weis, dass ihr nicht übermässig Zeit habt und so, finde den Job den ihr hier macht toll.
      Doch das Problem liegt darin, dass ich nicht gerade viel Ahnung habe von PHP und MySQL. Sofern fehlt mir einfach der springende Punkt wie ich sowas anstellen soll.

      Zerlege das größere Problem in kleinere.
      Baue zunächst eine SQL-Abfrage mit EINEM Auswahlkriterium.
      Fürchte Dich dabei vor SQL-Injection und sorge für richtige Behandlung
      der Formulardaten (Z.B. mit mysql_real_escape_string() ).

      Auch wenns gut gemeint ist, doch damit kann ich nichts anfangen.

      "SELECT *" und LIKE "%someString%" sind nicht performant, aber das wird erst bei einer größeren Anzahl von Datensätzen problematisch.

      Danke, werd ich mir merken.

      Dichti

      1. Hallo Dichti,

        Doch das Problem liegt darin, dass ich nicht gerade viel Ahnung habe von PHP und MySQL. Sofern fehlt mir einfach der springende Punkt wie ich sowas anstellen soll.

        Mmmmh, wieso sollst Du es dann wenn Du keine Ahnung hast?

        Auch wenns gut gemeint ist, doch damit kann ich nichts anfangen.

        Ich fürchte dann kannst Du mit dem folgenden auch nichts anfangen.
        So in etwas könnte man die WHERE Bedingung je nach vorliegenden Daten aus dem Formular zusammenbauen:

        <?php

        $map = array (

        Formfeld => Datenbankfeld

        'moviez_title' => 'Titel',
         'moviez_genre' => 'Genre',
        );

        $stack = array();

        foreach($map as $k => $v){

        if (!isset($_POST[$k]) or trim($_POST[$k]) == ''){
          continue;
         }
         $stack[] = sprintf(" %s LIKE '%s%%' ", $v, mysql_real_escape_string($_POST[$k]));
        }

        $where = join (' AND ', $stack);

        ?>

        Viele Grüße

        Stefan

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Stefan,

          Danke für deine Ausdauer.. hehe

          <?php

          $map = array (

          Formfeld => Datenbankfeld

          'moviez_title' => 'Titel',
          'moviez_genre' => 'Genre',
          );

          $stack = array();

          foreach($map as $k => $v){

          if (!isset($_POST[$k]) or trim($_POST[$k]) == ''){
            continue;
          }
          $stack[] = sprintf(" %s LIKE '%s%%' ", $v, mysql_real_escape_string($_POST[$k]));
          }

          $where = join (' AND ', $stack);

          ?>

          Hehe.. momentan wirft es nur mehr Rätsel auf.. aber ich werd mir denn mal die Ausdrück genauer ansehen und dann vielleicht.. vielleicht verstah ichs dann.
          Danke dir auf jeden Fall

          Dichti