Falk: Variablenübergabe?

Hallo,

ich möchte mit PHP einen Datenbankzugriff realisieren. In einem Formularfeld sollen User Schlagwörter eingeben, die dann von der DB ausgewertet werden und entspr. Ergebnisse liefern.
Bei mehreren Wörtern darf nun zwischen jedem Wort im Formularfeld nur ein Leerzeichen sein. Jetzt wollte ich mit folgendem Script überflüssige Leerzeichen entfernen:

$worte=array_unique(explode(" ",$sb));
if(in_array("",$worte)){
$nichts=array_search("",$worte);
unset($worte[$nichts]);
}
echo implode(":",$worte); //zum testen

Das hat auch funktioniert.
Jetzt will ich die Variable $worte an eine Funktion übergeben, die eine SQL-Where Bedingung erzeugt:

function where($a){
global $worte;
for($n=0;$n<count($worte);$n++){
if($sql_out){
$sql_out.=$a;
}
$sql_out.= "tab_schlagworte.Schlagwort LIKE '%".$worte[$n]."%'";
}
return $sql_out;
}

Das funktioniert jetzt nicht mehr. Die if-Bedingung (oben) wird ignoriert.

Falk
Wie kann ich das Problem lösen??

  1. Hallo,

    würde das Problem in Deiner Bedingung der if-Schleife sehen. "$sql_out" sehe ich - auch vielleicht ist da PHp mit mir einer Meinung - nicht ganz als Bedingung. $sql_out gibt einen Wert, d.h. Deine Bedingung ist irgendwas wie
      if(selfhtml) {...}
    Wo ist da die Bedigung? Das ist ein - ja irgendwie ein nichts.
    Falls es um die Existenz der Variablen geht, so würde ich da mit isset($sql_out) bzw. !isset($sql_out) arbeiten.

    Grüße aus Würzburg
    Julian

    1. Hallihallo

      würde das Problem in Deiner Bedingung der if-Schleife sehen. "$sql_out" sehe ich - auch vielleicht ist da PHp mit mir einer Meinung - nicht ganz als Bedingung.

      Käse.
      if($sql_out) bedeutet soweit ich weiß soviel wie if($sql_out!="" && $sql_out!=0 && $sql_out!=false)
      Vielleicht tut's das auch net, aber ich verwende solche Bedingungen in meinen Scripten zu Hauf, und sie funktionieren immer :-)

      Wo ist da die Bedigung? Das ist ein - ja irgendwie ein nichts.

      s.o.

      Ciao,

      Harry

      1. Hallo

        es liegt auch nicht an if($sql_out). Ich vermute es liegt an global $worte;
        Damit greift die Funktion auf die Variable $worte am Anfang des Scripts zu und da ist sie ja noch nicht von überflüssigen Leerzeichen gereinigt. Die nachfolgende if Bedingung wird einfach nicht berücksichtigt. Nur ich hab keine Ahnung wie ichs anders machen soll??

        Falk

        1. Hallo Harry,
          ich glaub ich hab mich etwas blöd ausgedrückt, sorry.

          Beispiel:
          ----------------------------
          $worte[0] = "bla";
          $worte[1]="";
          $worte[2] = "hoi";

          function where($a){
          global $worte;
          for($n=0;$n<count($worte);$n++){
          if($sql_out){
          $sql_out.=$a;
          }
          $sql_out.= "tab_schlagworte.Schlagwort LIKE '%".$worte[$n]."%'";
          }
          return $sql_out;
          }

          echo where("---");

          Wie schmeiße ich $worte[1] vorher raus??

          Falk
          ----------------------------

          1. Holladiri

            function where($a){
            global $worte;
            for($n=0;$n<count($worte);$n++){
            if($sql_out){
            $sql_out.=$a;
            }
            $sql_out.= "tab_schlagworte.Schlagwort LIKE '%".$worte[$n]."%'";
            }
            return $sql_out;
            }

            echo where("---");

            Wie schmeiße ich $worte[1] vorher raus??

            Dann würde ich die Funktion etwas umschreiben:

            function where($a)
            {
             global $worte;
             $sql_out="";
             for($n=0; $n<count($worte); $n++)
             {
              if($worte[$n]!="")
              { if($sql_out)
                  $sql_out.=$a;
                $sql_out.="tab_schlagworte.Schlagwort LIKE '%".$worte[$n]."%'";
              }
             }
             return $sql_out;
            }

            Dann liegen alle leeren Array-Elemente raus.

            Ciao,

            Harry

            1. Hallo Harry,

              habs rausgekriegt. sort($worte) hat gefehlt. Die Schleife in der Funktion zählt ja von 0 an. Wenn es jetzt z.B. worte[2] nicht mehr gibt weils vorher rausgeflogen ist, steht am Ende aber wieder ein leerer Array-Eintrag drin. sort packt aber alles wieder in die richtige Reihenfolge.

              $worte=array_unique(explode(" ",$sb));
              if(in_array("",$worte)){
              $nichts=array_search("",$worte);
              unset($worte[$nichts]);
              }

              sort($worte);

              function where($a){
              global $worte;
              for($n=0;$n<count($worte);$n++){
              if($sql_out){
              $sql_out.=$a;
              }
              $sql_out.= "tab_schlagworte.Schlagwort LIKE '%".$worte[$n]."%'";
              }
              return $sql_out;
              }

              Also vielen Dank, ich werde dein Script trotzdem gleich ausprobieren.
              Tschüss
              Falk

  2. Holladiwaldfee

    Jetzt will ich die Variable $worte an eine Funktion übergeben, die eine SQL-Where Bedingung erzeugt:

    function where($a){
    global $worte;
    for($n=0;$n<count($worte);$n++){
    if($sql_out){
    $sql_out.=$a;
    }
    $sql_out.= "tab_schlagworte.Schlagwort LIKE '%".$worte[$n]."%'";
    }
    return $sql_out;
    }

    Das funktioniert jetzt nicht mehr. Die if-Bedingung (oben) wird ignoriert.

    Naja, also ich will Dich ja nicht irgendwie beunruhigen, aber bei mir tut's die obige Funktion, und zwar ohne Mucken.

    Beispiel:
    ----------------------------
    $worte[0] = "bla";
    $worte[1] = "hoi";

    function where($a){
    global $worte;
    for($n=0;$n<count($worte);$n++){
    if($sql_out){
    $sql_out.=$a;
    }
    $sql_out.= "tab_schlagworte.Schlagwort LIKE '%".$worte[$n]."%'";
    }
    return $sql_out;
    }

    echo where("---");
    ----------------------------

    ergibt bei mir für $sql_out:

    tab_schlagworte.Schlagwort LIKE '%bla%'---tab_schlagworte.Schlagwort LIKE '%hoi%'

    Und das ist ja glaub ich auch so ungefähr genau das, was rauskommen soll, oder ?

    Ciao,

    Harry