Announcement

Collapse
No announcement yet.

Abfrage in 2 Spalten

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

  • Abfrage in 2 Spalten

    Hallo miteinander

    Vorwort: Ich bin ein PHP & MySQL Neuling.

    Ich habe hier ein Formular und möchte mittels POST eine Abrfage an der Datenbank machen:

    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="attore1">Attore</label>
      <input type="text" name="attore1" id="attore1" />
       <input type="submit" class="submit" name="submit" value="Cerca" />
    </form>
    cercato.php sieht so aus:

    PHP Code:
    <?php 
    $titolo 
    =  $_POST['titolo'];
    $attore1 $_POST['attore1']; 


    $abfrage "SELECT * FROM Filme WHERE 1 ".
    (!empty(
    $titolo) ? "AND Titolo LIKE '%$titolo%'" '').
    (!empty(
    $attore1) ? "AND Attore_1 LIKE '%$attore1%'" '');

    $ergebnis mysql_query($abfrage); 
    while(
    $row mysql_fetch_object($ergebnis))
    echo 
    "$row->Titolo";
    echo 
    "$row->Attore_1";
    ?>
    Ich habe in meiner Datenbank aber noch eine Attore_2 Spalte, möchte aber nur ein Suchfeld für beide haben. Wie kann ich meine SELECT Abfrage lösen?

    Mit folgenden Varianten hat es nicht geklappt, es wird dann überhaupt nichts ausgegeben. Auch nicht $titolo:

    PHP Code:
    $abfrage "SELECT * FROM Filme WHERE 1 ".
    (!empty(
    $titolo) ? "AND Titolo LIKE '%$titolo%'" '').
    (!empty(
    $attore1) ? "AND Attore_1, Attore_2 LIKE '%$attore1%'" ''); 
    PHP Code:
    $abfrage "SELECT * FROM Filme WHERE 1 ".
    (!empty(
    $titolo) ? "AND Titolo LIKE '%$titolo%'" '').
    (!empty(
    $attore1) ? "AND Attore_1 AND Attore_2 LIKE '%$attore1%'" ''); 
    PHP Code:
    $abfrage "SELECT * FROM Filme WHERE 1 ".
    (!empty(
    $titolo) ? "AND Titolo LIKE '%$titolo%'" '').
    (!empty(
    $attore1) ? "AND Attore_1 LIKE '%$attore1%'" '').
    (!empty(
    $attore1) ? "AND Attore_2 LIKE '%$attore1%'" ''); 
    Was mache ich falsch? Danke für die Feedbacks!

  • #2
    SELECT * FROM Filme WHERE 1 = 1

    Comment


    • #3
      Originally posted by ebis View Post
      SELECT * FROM Filme WHERE 1 = 1
      Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /[pfad]/cercato.php on line 63

      Comment


      • #4
        LIKE %xyz% findet alles, wenn der Suchstring leer ist,
        daher kannst du deine Abfrage erheblich vereinfachen.

        PHP Code:
        $abfrage =  "SELECT * FROM Filme WHERE ".
                    
        "Titolo LIKE '%$titolo%' ".
                    
        "AND (Attore_1 LIKE '%$attore1%' "
                    "OR Attore_2 LIKE '%
        $attore1%')" 

        Comment


        • #5
          Originally posted by Paul Bartulec View Post
          LIKE %xyz% findet alles, wenn der Suchstring leer ist,
          daher kannst du deine Abfrage erheblich vereinfachen.

          PHP Code:
          $abfrage =  "SELECT * FROM Filme WHERE ".
                      
          "Titolo LIKE '%$titolo%' ".
                      
          "AND (Attore_1 LIKE '%$attore1%' "
                      "OR Attore_2 LIKE '%
          $attore1%')" 

          Hi Paul

          Genial, vielen Dank! Habe das gleich angepasst und so übernommen. Grund für die empty Überprüfung vorher war weil ich früher noch keine Fragmentsuche mit LIKE verwendet hatte. Danach habe ich nicht mehr daran gedacht.

          Das mit dem OR hat auch wunderbar geklappt. Danke vielmals!

          PHP Code:
          $abfrage "SELECT * FROM Filme WHERE ".
                  
          "Titolo LIKE '%$titolo%'".
                  
          "AND (Attore_1 LIKE '%$attore1%' OR Attore_2 LIKE '%$attore1%')"

          Comment


          • #6
            Hallo,
            Originally posted by Paul Bartulec View Post
            LIKE %xyz% findet alles, wenn der Suchstring leer ist...
            Das ist nicht ganz richtig! Wenn du solch eine Behauptung aufstellst, solltest du auch die Randbedingungen dazu nennen!
            Wenn das abgefragte Feld leer ist, also einen NULL-Wert enthält, dann wird dieser NICHT gefunden, da NULL mit nichts übereinstimmt.

            Wenn also sichergestellt ist, dass Attore_1 und Attore_2 NIE NULL sind (weil es z.B. NOT NULL Felder sind), dann könnte man das so machen - wobei ich der Meinung bin, dass man auf jedes LIKE das verzichtbar ist, auch verzichten sollte.
            Sind jedoch NULL-Werte in den Feldern vorhanden, dann werden diese bei leerem Suchstring NICHT gefunden.

            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


            • #7
              Originally posted by Falk Prüfer View Post
              Hallo,


              Das ist nicht ganz richtig! Wenn du solch eine Behauptung aufstellst, solltest du auch die Randbedingungen dazu nennen!
              Wenn das abgefragte Feld leer ist, also einen NULL-Wert enthält, dann wird dieser NICHT gefunden, da NULL mit nichts übereinstimmt.

              Wenn also sichergestellt ist, dass Attore_1 und Attore_2 NIE NULL sind (weil es z.B. NOT NULL Felder sind), dann könnte man das so machen - wobei ich der Meinung bin, dass man auf jedes LIKE das verzichtbar ist, auch verzichten sollte.
              Sind jedoch NULL-Werte in den Feldern vorhanden, dann werden diese bei leerem Suchstring NICHT gefunden.

              Gruß Falk
              Das habe ich ganz vergessen, aber du hat Recht.
              Danke für die Richtigstellung / Ergänzung.

              ps.: Warum komme ich mir jetzt so getadelt vor? ^^

              Comment


              • #8
                Originally posted by Paul Bartulec View Post
                ...Warum komme ich mir jetzt so getadelt vor? ^^
                Weil du einem Anfänger der "Einfachheithalber" einen (unschönen) Tipp gegeben hast, ohne ihm die Konsequenzen zu nennen, die ihn ggfs. vor Probleme stellen über die ich ihm schonmal hinweggeholfen habe

                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


                • #9
                  Da ich die Unvollständigkeit meines Posts selbst nicht bemerkt habe, liegst du mit deiner Kritik falsch.

                  Allerdings fühle ich mich geschmeichelt, dass mir bei fehlerhaften / unvollständigen Beiträgen Vorsatz unterstellt wird

                  Comment

                  Working...
                  X