2 Suchen Felder AND oder OR

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

  • 2 Suchen Felder AND oder OR

    Hallo,
    ich habe ein kleines problem mit meinem Suchen Script.
    Und zwar habe ich eine Suchfunktion nach Datum (Pulldown)
    und eine Suchfunktion als normales Textfeld.
    Man soll jetzt die möglichkeit haben entweder nach einem Datum zu suchen
    oder aber nach einem Begriff im Textfeld.
    Für beide Suchfunktionen gibt es NUR ein submit Button.
    Jetzt zum Problem: Wenn ich im sql eine OR verknüpfung mache dann bekomme ich alles sauber ausgelsen was ich im Textfeld eingeben hab.
    Gebe ich ein Datum ein tut sich gar nichts.
    Mache ich eine AND verknüpfung ist es genau umgekehrt.
    Gibt es noch eine Variante die mir beides anzeigt? Ich komme echt nicht weiter.
    Code:
       if (isset($submit)) {
             
       $beginn=$tyear."-".$tmonth."-".$tday;
       $titel=$eingabe;
    
    	if ((strlen($eingabe)<2 )) {
    
    echo "Bitte geben Sie ein Datum oder einen Suchbegriff<br>mit    mehr als zwei Buchstaben ein!";
    	
    	} else {
       
    $result=mysql_query("SELECT id,titel,kurztext,text,url,urlname,bild,logo, DATE_FORMAT(beginn, '%d.%m.%Y')beginn
    FROM programm WHERE beginn='$beginn' OR titel LIKE '%$titel%' ORDER BY id ASC");

  • #2
    DATE_FORMAT(beginn, '%d.%m.%Y')beginn

    Und du wunderst dich, dass du nichts findest, was so aussieht: 2005-02-24?

    Außerdem sehe ich bei dir nicht, dass du nur entweder nach Datum oder nach Text suchen lässt, dein SELECT versucht beides abzuarbeiten. Wo unterscheidest du, nach was gesucht wird?

    Lass dir die Abfragen mal ausgeben und poste sie.
    Wenn statt $beginn und $titel richtige Werte drinstehen, lässt es sich einfacher nachvollziehen.
    Bitte Poste unter die Abfrage auch Datensätze, die er finden sollte, aber nicht findet
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Also wenn ich mir mit:
      print_r($_GET); anzeigen lasse was nach dem submit übergeben wird
      und ich als Datum z.b 17.02.2005 eingebe erhalte ich:

      Array
      (
      [tday] => 17
      [tmonth] => 02
      [tyear] => 2005
      [eingabe] =>
      [submit] => Suchen
      )

      Also wird das Datum ja schon mal richtig übergeben.
      Aber ich bekomme nichts angezeigt. Ich habe mal das
      if ((strlen($eingabe)<2 )) { auskommentiert.
      Dann erhalte ich ALLES was in derDB steht.
      Ist ja auch logisch wegen LIKE '%$titel%'
      Zuerst hatte ich es ohne Like und alles funktionierte. Dann habe ich mir aber überlegt das man auch teilstrings in das feld eingeben soll.
      Weil wer weiss schon wie der Titel wortgenau in der DB steht.
      Und da viel mir ein das es ja unter sql LIKE %% gibt.

      Hier mal der Code mit ausgabe:

      PHP-Code:
      <?
      Das Datums-Pulldown:

      function dateselect($name,$date) {
          $tyear=substr($date,0,4);
          $tmonth=substr($date,4,2);
          $tday=substr($date,6,2);  
          echo "<table>"; 
          echo "<tr>";
          echo "  <td>$name</td>";
          echo "  <td><font size=\"2\" face=\"Arial\" color=\"#ffffff\">
          Suche nach Veranstaltungs-<br>Datum:</font><br>";
          echo "<select name=\"tday\">";
          echo "<option value=\"\">Tag</option>";
          for ($i=1;$i<32;$i++) {
              if ($i<10) {
                  echo "<option value=\"0$i\"";
                  if ($tday==$i) { echo " selected"; };
                  echo ">0$i";
              }
              else       {
                  echo "<option value=\"$i\"";
                  if ($tday==$i) { echo " selected"; };
                  echo ">$i";

      usw.......

           echo "<td width=\"15\"></td><td><font size=\"2\" face=\"Arial\" color=\"#ffffff\">Suche nach Künstler<br>oder Musikgruppe:</font><br>
            <INPUT id=\"suchen\" tabindex=\"1\" size=\"20\" name=\"eingabe\"></td>";
       
          echo "</table>";
          echo "<table><tr><td>";
          echo "<input type=\"submit\" name=\"submit\" value=\"Suchen\">";
          echo "</td></tr>\n";
      };

      echo "<table><form action=\"$PHP_SELF\">";
      dateselect("",substr($beginn,0,4).substr($beginn,5,2).substr($beginn,8,2));
      echo "</form></table>";
      echo "<br>";

          if (isset($submit)) {
                  
          $beginn=$tyear."-".$tmonth."-".$tday; 
          $titel=$eingabe;

          if ((strlen($eingabe)<2 )) {

          echo "Bitte geben Sie ein Datum oder einen Suchbegriff<br>mit mehr als zwei Buchstaben ein!";
          
          } else {
          
      $result=mysql_query("SELECT id,titel,kurztext,text,url,urlname,bild,logo, DATE_FORMAT(beginn, '%d.%m.%Y')beginn FROM programm WHERE beginn='$beginn' OR titel LIKE '%$titel%' ORDER BY id ASC");

      if (mysql_num_rows($result)<1) {
                  echo "Für diese Eingabe wurde kein Eintrag gefunden!";
           } else {
               
               
      for ($i=0;$i<mysql_num_rows($result);$i++) {
              $id=mysql_result($result,$i,"id");
              $beginn=mysql_result($result,$i,"beginn");
              $kurztext=mysql_result($result,$i,"kurztext");
              $text=mysql_result($result,$i,"text");
              $url=mysql_result($result,$i,"url");
              $urlname=mysql_result($result,$i,"urlname");
              $bild=mysql_result($result,$i,"bild");
              $logo=mysql_result($result,$i,"logo");

      UND DIE AUSGABE:

          <h1><?php echo $beginn?></h1>

          <img style="float:left; margin-right:15px; margin-bottom:5px;" src="<? echo "../../sites/programm_bild.php?id=$id" ?>" alt="" width="240" border="0">

          <img src="<? echo "../../sites/programm_logo.php?id=$id" ?>" alt="" width="150" border="0">

          <h2><?php echo $kurztext?></h2> 

          <?php echo $text?>

          <br>

          Homepage: <a href="<? echo $url; ?>"><? echo $urlname; ?></a>
      <?php    
      };
        };
           }; 
          };
      ?>
      Zuletzt geändert von wizzardxx; 24.02.2005, 08:29.

      Kommentar


      • #4
        Womit wir wieder bei
        Original geschrieben von mrhappiness
        DATE_FORMAT(beginn, '%d.%m.%Y')beginn

        Und du wunderst dich, dass du nichts findest, was so aussieht: 2005-02-24?
        wären

        Für das Datum 2005-02-24 lässt du die Spalte beginn umformatieren zu 24.02.2005 und das sieht anders aus als 2005-02-24 ergo findest du nichts
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Selbst wenn ich die Datums Formatierung raus nehme bekomme ich nichts angezeigt. Und wie gesagt wenn ich ohne LIKE arbeite dann
          bekomme ich auch die / das gewünschte Datum trotz Formatierung.
          Also daran kann es nicht liegen.

          Kommentar


          • #6
            Original geschrieben von mrhappiness
            Lass dir die Abfragen mal ausgeben und poste sie.
            Wenn statt $beginn und $titel richtige Werte drinstehen, lässt es sich einfacher nachvollziehen.
            Bitte Poste unter die Abfrage auch Datensätze, die er finden sollte, aber nicht findet
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              ich habe es jetzt mit 2 querys hinbekommen.
              PHP-Code:
              <?
                  if($eingabe !="") {

              $result=mysql_query("SELECT id,titel,kurztext,text,url,urlname,bild,logo, DATE_FORMAT(beginn, '%d.%m.%Y')beginn FROM programm WHERE titel LIKE '%$titel%' ORDER BY id ASC");

                  } else 
                  
              $result=mysql_query("SELECT id,titel,kurztext,text,url,urlname,bild,logo, DATE_FORMAT(beginn, '%d.%m.%Y')beginn FROM programm WHERE beginn='$beginn' ORDER BY id ASC");

              ?>
              Ich bin mir zwar nicht ganz sicher ob das die eleganteste Lösung ist, aber immerhin wird jetzt das ausgegeben was ich möchte.

              Danke für deine Mühe mrhappiness.

              Kommentar

              Lädt...
              X