Announcement

Collapse
No announcement yet.

Fragmentsuche mit %%

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fragmentsuche mit %%

    Hallo miteinander!

    Ich habe hier eine funktionierende Suchfunktion das aber nur mit vollständig ausgefüllten Feldern bei der Suchabfrage funktioniert.

    Suchformular:
    HTML Code:
    <form id="cercare" method="POST" action="cercato.php" enctype="multipart/form-data">
    <label for="titolo">Titolo</label>
      <input type="text" name="titolo" id="titolo" />
      <label for="lingua">Lingua</label>
      <select name="lingua" id="lingua">
        <option></option>
        <option>Italiano</option>
        <option>Tedesco</option>
      </select>
      <label for="genere">Genere</label>
      <select name="genere" id="genere">
        <option></option>
        <option>Azione</option>
        <option>Since Fiction</option>
    	<option>Fantasia</option>
        <option>Commedia</option>
        <option>Amore</option>
        <option>Drama</option>
        <option>Horror</option>
      </select>
      <label for="attore1">Attore 1</label>
      <input type="text" name="attore1" id="attore1" />
      <label for="attore2">Attore 2</label>
      <input type="text" name="attore2" id="attore2" />
      <label for="anno">Anno</label>
      <input type="text" name="anno" id="anno" />
      <label for="tipo_disco">Tipo Disco</label>
      <select name="tipo_disco" id="tipo_disco">
        <option></option>
    	<option>Blu-Ray</option>
        <option>DVD</option>
        <option>DivX</option>
      </select>
      <label for="divx">Qualià DivX</label>
      <select name="divx" id="divx">
        <option></option>
        <option>Alta</option>
        <option>Media</option>
        <option>Bassa</option>
      </select>
      <label for="visto_amedeo">Visto Amedeo</label>
        <select name="visto_amedeo" id="visto_amedeo">
        <option></option>
        <option>Si</option>
    	<option>No</option>
      </select>
        <label for="visto_fabian">Visto Fabian</label>
      <select name="visto_fabian" id="visto_fabian">
        <option></option>
        <option>Si</option>
    	<option>No</option>
      </select>
        <label for="visto_gerardina">Visto Gerardina</label>
      <select name="visto_gerardina" id="visto_gerardina">
        <option></option>
        <option>Si</option>
    	<option>No</option>
      </select>
       <label for="commento">Commento</label>
      <input type="text" name="commento" id="commento" />
        <input type="submit" class="submit" name="submit" value="Cerca" />
    </form>
    Abfrage & Ausgabe:
    PHP Code:
    <?php
    //Verbindung zur Datenbank herstellen.
    $server "***";
    $user "***";
    $pw "***";

    $verdindung_server mysql_connect ("$server""$user""$pw") or die ("connection failed");

    mysql_select_db ("film_db") or die ("no database");

    ?>

    <?php
    $titolo 
    =  $_POST['titolo'];
    $lingua =  $_POST['lingua'];
    $genere =  $_POST['genere']; 
    $attore1 $_POST['attore1'];
    $attore2 $_POST['attore2']; 
    $anno $_POST['anno']; 
    $tipo_disco $_POST['tipo_disco']; 
    $divx $_POST['divx']; 
    $visto_amedeo $_POST['visto_amedeo']; 
    $visto_fabian $_POST['visto_fabian']; 
    $visto_gerardina $_POST['visto_gerardina'];  
    $commento $_POST['commento']; 
    ?>


    <table>
    <?php
    $abfrage 
    "SELECT * FROM Filme WHERE 1 ".
    (!empty(
    $titolo) ? "AND Titolo = '$titolo'" '').
    (!empty(
    $lingua) ? "AND Lingua = '$lingua'" '').
    (!empty(
    $genere) ? "AND Genere = '$genere'" '').
    (!empty(
    $attore1) ? "AND Attore_1 = '$attore1'" '').
    (!empty(
    $attore2) ? "AND Attore_2 = '$attore2'" '').
    (!empty(
    $anno) ? "AND Anno = '$anno'" '').
    (!empty(
    $tipo_disco) ? "AND Tipo_disco = '$tipo_disco'" '').
    (!empty(
    $divx) ? "AND DivX = '$divx'" '').
    (!empty(
    $visto_amedeo) ? "AND Visto_Amedeo = '$visto_amedeo'" '').
    (!empty(
    $visto_fabian) ? "AND Visto_Fabian = '$visto_fabian'" '').
    (!empty(
    $visto_gerardina) ? "AND Visto_Gerardina = '$visto_gerardina'" '').
    (!empty(
    $commento) ? "AND Commento = '$commento'" '');

    $ergebnis mysql_query($abfrage);
    while(
    $row mysql_fetch_object($ergebnis))
        {                                
        echo 
    "<tr><td><p class=fett>ID</p><p>$row->id</p></td>";
        echo 
    "<td><p class=fett>Locandina</p><p><a href=uploads/$row->Immagine rel=lytebox><img src=uploads/$row->Immagine /></a></p></td>";
        echo 
    "<td><p class=fett>Titolo</p><p>$row->Titolo</p></td>";
        echo 
    "<td><p class=fett>Lingua</p><p>$row->Lingua</p></td>";
        echo 
    "<td><p class=fett>Genere</p><p>$row->Genere</p></td>";
        echo 
    "<td><p class=fett>Attore 1</p><p>$row->Attore_1</p></td>";
        echo 
    "<td><p class=fett>Attore 2</p><p>$row->Attore_2</p></td>";
        echo 
    "<td><p class=fett>Anno</p><p>$row->Anno</p></td>";
        echo 
    "<td><p class=fett>Media</p><p>$row->Tipo_disco</p></td>";
        echo 
    "<td><p class=fett>Qualità DivX</p><p>$row->DivX</p></td>";
        echo 
    "<td><p class=fett>Visto Amedeo</p><p>$row->Visto_Amedeo</p></td>";
        echo 
    "<td><p class=fett>Visto Fabian</p><p>$row->Visto_Fabian</p></td>";
        echo 
    "<td><p class=fett>Visto Gerardina</p><p>$row->Visto_Gerardina</p></td>";
        echo 
    "<td><p class=fett>Commento</p><p>$row->Commento</p></td></tr>";
        }
    ?>


    </table>
    Wenn man zum Beispiel beim Input "Attore" Jonny Depp eingibt werden alle Datensätze ausgegeben die bei dieser Spalte dieser genaue Wert enthaltet.
    Was aber nicht funktionert ist das wenn man nur Jonny darin eingibt, wird überhaupt nichts ausgegeben, bzw. nur das:

    HTML Code:
    <table></table>
    Ich habe darum recherchiert und gelesen man soll vor und nach der Variabel die % Zeichen einsetzen damit eine "Fragmentsuche" darin gewährleistet wird.

    Mit folgenden Anpassungen habe ich es probiert, dan wird aber auch wieder nichts ausgegeben:

    Hier bei einer der Select Abfragen:
    PHP Code:
    (!empty($attore1) ? "AND Attore_1 = '%$attore1%'" ''). 
    PHP Code:
    (!empty($attore1) ? "AND Attore_1 = %'$attore1'%" ''). 
    PHP Code:
    (!empty($attore1) ? "AND Attore_1 = '%%$attore1%%'" ''). 
    Diese Varianten haben bei mir nicht funktioniert. Was mache ich falsch?

    Danke für die Feedbacks!

  • #2
    http://dev.mysql.com/doc/refman/5.1/...-matching.html

    % in Verbindung mit LIKE

    oder

    http://dev.mysql.com/doc/refman/5.1/de/regexp.html
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Hi, vielen Dank für die Links

      Habe es mit LIKE versucht, aber leider nicht hinbekommen:

      1. Versuch direkt bei Variabel attore1:
      PHP Code:
      $abfrage "SELECT * FROM Filme WHERE 1 LIKE ".
      (!empty(
      $titolo) ? "AND Titolo = '$titolo'" '').
      (!empty(
      $lingua) ? "AND Lingua = '$lingua'" '').
      (!empty(
      $genere) ? "AND Genere = '$genere'" '').
      (!empty(
      $attore1) ? "AND Attore_1 = '%$attore1%'" '').
      (!empty(
      $attore2) ? "AND Attore_2 = '$attore2'" '').
      (!empty(
      $anno) ? "AND Anno = '$anno'" '').
      (!empty(
      $tipo_disco) ? "AND Tipo_disco = '$tipo_disco'" '').
      (!empty(
      $divx) ? "AND DivX = '$divx'" '').
      (!empty(
      $visto_amedeo) ? "AND Visto_Amedeo = '$visto_amedeo'" '').
      (!empty(
      $visto_fabian) ? "AND Visto_Fabian = '$visto_fabian'" '').
      (!empty(
      $visto_gerardina) ? "AND Visto_Gerardina = '$visto_gerardina'" '').
      (!empty(
      $commento) ? "AND Commento = '$commento'" ''); 
      Gibt folgende Fehlermeldung aus:
      HTML Code:
      Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in [..richtiger pfd..]/cercato.php on line 60
      2. Versuch direkt nach LIKE
      PHP Code:
      $abfrage "SELECT * FROM Filme WHERE 1 LIKE "%.
      (!empty(
      $titolo) ? "AND Titolo = '$titolo'" '').
      (!empty(
      $lingua) ? "AND Lingua = '$lingua'" '').
      (!empty(
      $genere) ? "AND Genere = '$genere'" '').
      (!empty(
      $attore1) ? "AND Attore_1 = '$attore1'" '').
      (!empty(
      $attore2) ? "AND Attore_2 = '$attore2'" '').
      (!empty(
      $anno) ? "AND Anno = '$anno'" '').
      (!empty(
      $tipo_disco) ? "AND Tipo_disco = '$tipo_disco'" '').
      (!empty(
      $divx) ? "AND DivX = '$divx'" '').
      (!empty(
      $visto_amedeo) ? "AND Visto_Amedeo = '$visto_amedeo'" '').
      (!empty(
      $visto_fabian) ? "AND Visto_Fabian = '$visto_fabian'" '').
      (!empty(
      $visto_gerardina) ? "AND Visto_Gerardina = '$visto_gerardina'" '').
      (!empty(
      $commento) ? "AND Commento = '$commento'" '')%; 
      Gibt folgende Fehlermeldung aus:
      HTML Code:
      Parse error: syntax error, unexpected '.' in /home/httpd/vhosts/djsansire.ch/httpdocs/DATES/IFILM/erweiterte-suchfunktion-machen/cercato.php on line 45
      Ich weiss leider nicht wo genau ich die %% setzen muss, da ja viele Variabel Überprüfungen kommen. Ich denke Variante 1 ist am richtigsten, geht aber halt nicht. Ansonsten verstehe ich den Code, ausser weiss ich nicht wofür das 1 Steht bei WHERE 1

      Was mache ich falsch? Wäre für Feedbacks sehr dankbar!

      Comment


      • #4
        Es sind doch Beispiele auf der Seite... Das LIKE gilt nicht für den ganzen Ausdruck, sondern der Vergleich wird damit gemacht

        ..where A=B AND C LIKE %hans% AND D LIKE %haus%....

        Wo ist der Unterschied zwischen 1. und 2.?
        Zuletzt editiert von Christian Marquardt; 20.06.2011, 14:46.
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Es sind doch Beispiele auf der Seite...
          Ja tut mir leid wenn ich es nicht raffe, ich bin kein erfahrener Programmierer. Bei den Beispielen Fragt er einfach nur eine Variable ab, bei mir sind es mehrere die zusätzlich eine überprüfung haben.

          Originally posted by Christian Marquardt View Post
          Das LIKE gilt nicht für den ganzen Ausdruck, sondern der Vergleich wird damit gemacht
          Danke jetzt verstehe ichs besser.

          Originally posted by Christian Marquardt View Post
          ..where A=B AND C LIKE %hans% AND D LIKE %haus%....
          Das verstehe ich leider nicht.

          Originally posted by Christian Marquardt View Post
          Wo ist der Unterschied zwischen 1. und 2.?
          Variante 1 Prozentzeichen um der Variabel (wie im Beispiel), Variante 2 nach dem ganzen LIKE zwischen den "" (auch wie im Beispiel).

          Könntest du vielleicht ein Beispiel mit meinem Code machen? Würde mir sehr weiterhelfen. Vielen Dank.

          Comment


          • #6
            Das verstehe ich leider nicht.
            ????

            "AND Attore_1 LIKE %'$attore1'%"
            : '').
            Christian

            Comment


            • #7
              Originally posted by Christian Marquardt View Post
              ????

              "AND Attore_1 LIKE %'$attore1'%"
              : '').
              Nun verstehe ichs danke. Die Prozent zeichen noch direkt vor der Variabel gesetzt, funktioniert nun!

              PHP Code:
              AND Attore_1 LIKE '%$attore1%'" : '') 
              Vielen Dank

              Comment


              • #8
                Hallo,

                Anmerkung: Die Verwendung von <FELD> LIKE '%Term%' sollte man, wann immer es geht, vermeiden. Zumindest sollte diese Variante nicht "pro forma" eingesetzt werden. Warum? Bei diesem Konstrukt ist es dem MySQL-Server nicht möglich evtl. vorhandene Indizes zu verwenden, da ja beliebig viele Zeichen am Anfang des Feldinhaltes stehen können. Man sollte also gut überlegen, ob man das '%Term%' wirklich benötigt oder ein 'Term%' (hierbei kann nämlich ein Index verwendet werden) nicht auch möglich ist. Ansonsten hat man bei komplexen Abfragen und vielen Daten ganz schnell ein Performanceproblem!
                Bei komplexen Suchabfragen lohnt sich auch ein Blick auf das Thema Volltextsuche.

                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment

                Working...
                X