Sascha: Was ist daran falsch?

Hallo,

ich habe nach wie vor noch nicht die richtige Lösung für mein Suchformular das ich gerade bastel gefunden.

Ich bekomme  im moment nach Änderung meiner IF-Anweisung-Verschachtelung  einen Fehler, und zwar folgenden:

Warning: Supplied argument is not a valid MySQL result resource in

und weist auf diese Zeile da hin:
=> while($row = mysql_fetch_array($daten)) { ...

Ich möchte, das wenn 2 Wörter nur eingeben sind, aber der Operator 1 im Forumlar nicht gewählt wurde, das er automatisch ein AND wählt bzw. bei 3 Suchbegriffen halt AND und AND setzt ...

Ich gebe mal am besten hier den wichtigsten Code:

//Anfang Suchformular:

<form method="POST" action="index.php4">
<input type=hidden name="session" value="gefunden.php4">
    <p><font face="Arial" color="#FFFF00" size="2">Nach welchem Begriff soll gesucht werden?<br><br>
1. Suchbegriff:  
<input type="text" name="wort1" size="40" maxlength="490"><br>
<br>
Operator 1 (Bitte wählen!):   <select name="operator1" size="1">
    <option value="">----
    <option value="UND">UND
    <option value="ODER">ODER
   </option>
  </select><br><br>
2. Suchbegriff:  
<input type="text" name="wort2" size="40" maxlength="490"><br>
<br>
Operator 2 (Bitte wählen!):   <select name="operator2" size="1">
    <option value="">----
    <option value="UND">UND
    <option value="ODER">ODER
   </option>
  </select><br><br>
3. Suchbegriff:  
<input type="text" name="wort3" size="40" maxlength="490"><br>
<br>
  <p><font face="Arial" size="2"><input type="submit" value="Abschicken" name="B1"><input type="reset" value="Zurücksetzen" name="B2"></font></p>
</form>

//Ende Suchformular

// Anfang Verarbeitungsscript => wichtigster Teil:

[...]

//wenn nur 1 Wort angeben wurde und Wort 2 und 3 keinen
//Wert enthalten!

if ( isset($wort1) AND ($wort2 == "0") AND ($wort3 == "0") )
{$daten = MYSQL_QUERY( "SELECT * FROM downloadprogramme
       WHERE titel LIKE '%$wort1%'
           OR beschreibung LIKE '%$wort1%'",$verbindung);}

//wenn nur 2 Wörter angeben wurde und Wort 3 keinen
//Wert enthält!
if ( isset($wort1) AND ($wort2) AND ($wort3 == "0") )
 {// Suche für 2 Wörter mit Operator AND
   if ($operator1 == "UND"){
     $daten = MYSQL_QUERY("SELECT * FROM downloadprogramme
       WHERE (titel LIKE '%$wort1%'
           OR beschreibung LIKE '%$wort1%')
       AND (titel LIKE '%$wort2%'
           OR beschreibung LIKE '%$wort2%')",$verbindung);}

// Suche für 2 Wörter mit Operator AND
   if ($operator1 == ""){
     $daten = MYSQL_QUERY("SELECT * FROM downloadprogramme
       WHERE (titel LIKE '%$wort1%'
           OR beschreibung LIKE '%$wort1%')
       AND (titel LIKE '%$wort2%'
           OR beschreibung LIKE '%$wort2%')",$verbindung);}

// Suche für 2 Wörter mit Operator OR
     if ($operator1 == "ODER"){
       $daten = MYSQL_QUERY( "SELECT * FROM downloadprogramme
         WHERE (titel LIKE '%$wort1%'
             OR beschreibung LIKE '%$wort1%')
         OR (titel LIKE '%$wort2%'
             OR beschreibung LIKE '%$wort2%')",$verbindung);}
 }

//wenn 3 Wörter angeben wurden
if ( isset($wort1) AND ($wort2) AND ($wort3) )
 {// Suche für 3 Wörter mit 2x Operator AND
    if ($operator1 == "UND" AND $operator2 == "UND"){
      $daten = MYSQL_QUERY("SELECT * FROM downloadprogramme
        WHERE (titel LIKE '%$wort1%'
            OR beschreibung LIKE '%$wort1%')
        AND (titel LIKE '%$wort2%'
            OR beschreibung LIKE '%$wort2%')
        AND (titel LIKE '%$wort3%'
           OR beschreibung LIKE '%$wort3%')",$verbindung);}

// Suche für 3 Wörter mit 2x Operator AND
    if ($operator1 == "0" AND $operator2 == "0"){
      $daten = MYSQL_QUERY("SELECT * FROM downloadprogramme
        WHERE (titel LIKE '%$wort1%'
            OR beschreibung LIKE '%$wort1%')
        AND (titel LIKE '%$wort2%'
            OR beschreibung LIKE '%$wort2%')
        AND (titel LIKE '%$wort3%'
           OR beschreibung LIKE '%$wort3%')",$verbindung);}

// Suche für 3 Wörter mit 1x Operator AND und 1x Operator OR
    if ($operator1 == "UND" AND $operator2 == "ODER"){
      $daten = MYSQL_QUERY("SELECT * FROM downloadprogramme
        WHERE (titel LIKE '%$wort1%'
            OR beschreibung LIKE '%$wort1%')
        AND (titel LIKE '%$wort2%'
           OR beschreibung LIKE '%$wort2%')
        OR (titel LIKE '%$wort3%'
           OR beschreibung LIKE '%$wort3%')",$verbindung);}

// Suche für 3 Wörter mit 2x Operator OR
    if ($operator1 == "ODER" AND $operator2 == "ODER"){
      $daten = MYSQL_QUERY( "SELECT * FROM downloadprogramme
          WHERE (titel LIKE '%$wort1%'
              OR beschreibung LIKE '%$wort1%')
          OR (titel LIKE '%$wort2%'
              OR beschreibung LIKE '%$wort2%')
          OR (titel LIKE '%$wort3%'
              OR beschreibung LIKE '%$wort3%')",$verbindung);}

// Suche für 3 Wörter mit 1x Operator OR und 1x Operator AND
     if ($operator1 == "ODER" AND $operator2 == "UND"){
       $daten = MYSQL_QUERY( "SELECT * FROM downloadprogramme
           WHERE (titel LIKE '%$wort1%'
               OR beschreibung LIKE '%$wort1%')
           OR (titel LIKE '%$wort2%'
               OR beschreibung LIKE '%$wort2%')
           AND (titel LIKE '%$wort3%'
               OR beschreibung LIKE '%$wort3%')",$verbindung);}
}

echo "<div align=center><font color="#ffff00"><h3>Es wurden folgende Einträge gefunden ... </h3></font></div>";

while($row = mysql_fetch_array($daten)) {[...]}

Wer kann mir sagen, was daran falsch ist, bzw. mir einen brauchbaren Tipp geben, wie ich das Problem entgültig beseitigen kann. Über eine Hilfe wäre ich sehr dankbar.

Im voraus besten Dank.

Mfg.

Sascha

  1. Hi,

    => while($row = mysql_fetch_array($daten)) { ...

    lasse Dir _vor_ dieser Zeile mal $daten ausgeben und überprüfe, ob die Syntax _wirklich_ stimmt.

    Cheatah

    1. Hallo,

      habe mal vor das while ... folgendes gesetzt:

      echo "$daten";

      Nur da wurde nichts ausgeben, nur das was sonst auch kam, halt alles unter while ...

      Mfg.

      Sascha

      Hi,

      => while($row = mysql_fetch_array($daten)) { ...

      lasse Dir _vor_ dieser Zeile mal $daten ausgeben und überprüfe, ob die Syntax _wirklich_ stimmt.

      Cheatah

      1. Hi,

        echo "$daten";

        Nur da wurde nichts ausgeben,

        dann unterstelle ich, daß keiner Deiner if-Bedingungen zutrifft. Mache da am besten ein "if-elsif-else"-Konstrukt draus, so daß garantiert $daten gefüllt wird.

        Stimmt eigentlich 'AND ($wort2 == "0")'?

        Cheatah

        1. Hallo,

          also zu

          Stimmt eigentlich 'AND ($wort2 == "0")'?

          == "0"  => bedeutet doch, wenn das Feld leer gelassen wurde, also keinen Wert enthält oder? - oder hab ich da was falsch in den verstanden? Wenn ich das richtig verstanden habe, dann ist das schon richtig.

          Falls nicht, soll ich dann lieber

          => AND ($wort2 == "")

          verwenden?

          Mfg.

          Sascha

          Hi,

          echo "$daten";

          Nur da wurde nichts ausgeben,

          dann unterstelle ich, daß keiner Deiner if-Bedingungen zutrifft. Mache da am besten ein "if-elsif-else"-Konstrukt draus, so daß garantiert $daten gefüllt wird.

          Stimmt eigentlich 'AND ($wort2 == "0")'?

          Cheatah

          1. Hi,

            == "0"  => bedeutet doch, wenn das Feld leer gelassen wurde, also keinen Wert enthält oder?

            nein, "0" ist ein String, der (nur) aus dem Zeichen chr(48) besteht.

            Falls nicht, soll ich dann lieber
            => AND ($wort2 == "")
            verwenden?

            Klingt vielversprechend.

            Cheatah

            1. Hallo,

              es hörte sich nicht nur vielversprechend an, sondern es war vielversprechend!

              So hatte ich es Anfangs ja gehabt, bis mir jemand in der Newsgroupe sagte, das sei falsch! - darauf hin hatte ich es geändert!

              Nunja somit wäre das Problem behoben!
              Besten Dank nochmals an dich!

              Noch eine letzte Frage, vielleicht kannst du mir da ja auch helfen?

              Also wenn der nichts gefunden hat, gibt er mir  Resource id #6  aus!
              Kann man diese Meldung auch entfernen irgendwie oder durch etwas anderes ersetzen, wie es wurde nicht gefunden oder so?

              Mfg.

              Sascha

              Hi,

              == "0"  => bedeutet doch, wenn das Feld leer gelassen wurde, also keinen Wert enthält oder?

              nein, "0" ist ein String, der (nur) aus dem Zeichen chr(48) besteht.

              Falls nicht, soll ich dann lieber
              => AND ($wort2 == "")
              verwenden?

              Klingt vielversprechend.

              Cheatah

              1. Hi,

                Also wenn der nichts gefunden hat, gibt er mir  Resource id #6  aus!
                Kann man diese Meldung auch entfernen irgendwie oder durch etwas anderes ersetzen,

                Du kannst die Zahl der gefundenen Zeilen ermitteln. Wenn es 0 sind, sind's zu wenig.

                Cheatah