Simone: If Abfrage in einer While Schlife in einer Funktion auslagern

Hallo ich habe ein Problem bzw. ich möchte mein Code sinnvoll verkürzen um in Zukunft nicht alles doppelt zu schreiben ich möchte in meiner while Schleife folgenden Code auslagern "if(strlen($row['ANSPRECHPARTNER']) > $max_string_laenge){ "...

Nur wenn ich das mache kommt keine Variable mehr an.

Also ich habe folgendes versucht den ganzen Code komplex in einer Funktion weiter oben im Code auszulagern

function Aufruf() { hier steht der Code }  und dann habe in meiner while Schleife den alten Code durch den Aufruf  Aufruf(); aufgerufen wenn ich das so mache bleiben alle table data leer.

Kann mir jemand helfen oder sagen was ich falsch mache? Gruß Simone

///////////////

echo $table_th;
     while ($row = mysql_fetch_assoc($rs))
  {

$data=Array();
  $id = $row['ID'];

if(strlen($row['ANSPRECHPARTNER']) > $max_string_laenge)
    {  $filter = strip_tags(substr($row['ANSPRECHPARTNER'],0,($max_string_laenge)));
     $var_ansprechpartner =  $filter.' ...';           }
  else  {  $var_ansprechpartner = $row['ANSPRECHPARTNER'];         }
    $data["var_ansprechpartner"] = $var_ansprechpartner;

if(strlen($row['VORNAME']) > $max_string_laenge)
    {  $filter = strip_tags(substr($row['VORNAME'],0,($max_string_laenge)));
     $var_vorname =  $filter.' ...';             }
  else  { $var_vorname = $row['VORNAME'];              }
    $data["var_vorname"] = $var_vorname;

if(strlen($row['NACHNAME']) > $max_string_laenge)
    {  $filter = strip_tags(substr($row['NACHNAME'],0,($max_string_laenge)));
     $var_nachname =  $filter.' ...';             }
  else  {  $var_nachname = $row['NACHNAME'];             }
    $data["var_nachname"] = $var_nachname;

if(strlen($row['ORT']) > $max_string_laenge)
    {  $filter = strip_tags(substr($row['ORT'],0,($max_string_laenge)));
     $var_ort =  $filter.' ...';              }
  else  {  $var_ort = $row['ORT'];               }
    $data["var_ort"] = $var_ort;

echo make_table_td($data);
  } ?>
   </table>

  1. Hallo ich habe ein Problem bzw. ich möchte mein Code sinnvoll verkürzen um in Zukunft nicht alles doppelt zu schreiben ich möchte in meiner while Schleife folgenden Code auslagern "if(strlen($row['ANSPRECHPARTNER']) > $max_string_laenge){ "...

    Nur wenn ich das mache kommt keine Variable mehr an.

    Wie auslagern?
    warum kommt keine Variabel an?
    Wie rufst Du die Funktion auf?
    Sorry aber Dein Quelltext ist nicht so richtig Zielführend!
    Der funktioniert oder etwa nicht?
    Welche Fehelr werden denn angezeigt?

    TomIRL

    1. Wie auslagern?
      warum kommt keine Variabel an?
      Wie rufst Du die Funktion auf?
      Sorry aber Dein Quelltext ist nicht so richtig Zielführend!
      Der funktioniert oder etwa nicht?
      Welche Fehelr werden denn angezeigt?

      Es wurde kein Fehler angezeigt das Script was ich da stehen habe funktioniert nur wenn ich es auslage kommt nichts. Das ist alles in meinem ersten posting zulesen

  2. Hi Simone,

    Du solltest Dir, der Übersicht wegen, einen sauberen Schreibstil (Code) angewöhnen. Schreibe z.B. die { und } in eigene Zeilen, dann blickst Du einfach besser durch.

    Eine Verkürzung scheint hier sinnvoll und möglich. Du darfst aber nicht vergessen, dass Du die Variablen auch an die Funktion übergeben mußt, sofern diese nicht global sind. Vielleicht ist das schon Dein Problem und Du hast einfach nicht daran gedacht, Argumente zu übergeben oder global zu definieren.

    MfG
    Danny

    1. Vielleicht ist das schon Dein Problem und Du hast einfach nicht

      »»daran gedacht, Argumente zu übergeben oder global zu definieren.

      Wie definiere ich denn meine Variable in der Funktion so das die Variable auch noch außerhalb der Funktion sichtbar ist?

      Mit global $variable funktioniert es bei nicht.

      1. Hi,

        global zu definieren ist in Deinem Fall gar nicht nötig, siehe meine Antwort weiter oben.

        1. Hi,

          global zu definieren ist in Deinem Fall gar nicht nötig, siehe meine Antwort weiter oben.

          Der Code ist richtig und funktioniert auch aber damit ich nicht so ein langen Rattenschwanz habe ich es zusammengepackt. Nun möchte ich den Code nur noch in einer Funktion auslagern aber wenn ich der Funktion die Variablen übergebe kommte es beim Funktionsaufruf zum Parse Error

          ich schreibe folgendes:

          function create_table_string($row['ANSPRECHPARTNER'], $max_string_laenge, $row['VORNAME'])
           {
                  ...
                  }

          was ist denn da falsch? $row['ANSPRECHPARTNER'] ist die Variable die aus der Datenbank kommt.

          1. da steckt ein syntaktischer Fehler drin.

            function create_table_string($row['ANSPRECHPARTNER'], $max_string_laenge, $row['VORNAME'])

            Du kannst hinter function als Argument kein assoziatives Array mit Schlüssel angeben, das geht nur wenn Du die Funktion aufrufst:

            create_table_string($row['ANSPRECHPARTNER'], etc);

            ...

            function create_table_string($ansprechpartner, etc.)

            ...

            1. create_table_string($row['ANSPRECHPARTNER'], etc);

              ...

              function create_table_string($ansprechpartner, etc.)

              ...

              Das habe ich mir auch erst gedacht aber mit function create_table_string($ansprechpartner, etc.) geht es auch nicht obwohl ich zuvor die varibale in die $ansprechpartner geschrieben habe.

              $ansprechpartner = $row['ANSPRECHPARTNER'];

              Keine Ahnung wo der Fehler ist...

              Sonst hat es immer funktioniert aber hier nicht

              1. Mhmmmm, poste doch mal den aktuellen Stand, dann ist der Fehler bestimmt leicht zu finden.

              2. hi,

                Das habe ich mir auch erst gedacht aber mit function create_table_string($ansprechpartner, etc.) geht es auch nicht obwohl ich zuvor die varibale in die $ansprechpartner geschrieben habe.

                $ansprechpartner = $row['ANSPRECHPARTNER'];

                wer sagt, dass du letzteres machen sollst/musst?

                du scheinst immer noch nicht verstanden zu haben, wie man variablen als aufrufparameter an funktionen uebergibt.

                function create_table_string($ansprechpartner, etc.)
                {
                  // in dieser funktion steht dir jetzt eine variable
                  // mit dem namen $ansprechpartner zur verfuegung,
                  // mit der du _innerhalb_ der funktion arbeiten kannst
                }

                aufrufen kannst du das ganze dann z.b. so:

                $rueckgabeempfaenger = create_table_string($row['ANSPRECHPARTNER'], etc.);

                gruss,
                wahsaga

  3. Hello,

    function str_limit($instr, $len, $apx=" ...", $tags=true, $slashes="gpc")
    {
      ## tags entfernen
      if($tags)
      {
        $instr = strip_tags($instr);
      }

    ## slashes entfernen
      if(($slashes == "force") or
         ($slashes == "gpc" and get_magic_quotes_gpc()) or
         ($slashes == "run" and get_magic_quotes_runtime()) or
         ($slashes == "both" and (get_magic_quotes_gpc() or get_magic_quotes_runtime()))
      {
        $instr = stripslashes($instr);
      }

    ## führende und anhängende Leerzeichen?
      # $instr = trim($instr);

    ## Länge kappen
      if($strlen($instr) > $len)
      {
        $instr = substr($instr,0$len).$apx;      # apx steht für Appendix
      }

    return $instr;
    }

    echo $table_th;

    while ($row = mysql_fetch_assoc($rs))
    {

    $data=Array();
      $data[$id] = $row['ID'];

    $data["var_ansprechpartner"] = str_limit($row['ANSPRECHPARTNER'],$max_string_laenge);
      $data["var_vorname"]         = str_limit($row['VORNAME'],$max_string_laenge);
      $data["var_nachname"]        = str_limit($row['NACHNAME']$var_nachname,$max_string_laenge);
      $data["var_ort"]             = str_limit($row['ORT'],$max_string_laenge);

    echo make_table_td($data);

    }

    ?>

    </table>

    <!--

    habe nochmal ein bisschen für Dich nachgedacht:

    Die reihenfolge der Funktionen war auch nicht so günstig

    Wieso sollte die maximale Anzeigelänge davon abhängen, ob Tags

    im String enthalten _waren_

    Außerdem würde ich in einer DB nur Rohdaten abspeichern, keine Tags, keine

    slashes. Formatierungen sollten mit CSS gemacht werden und daher nicht

    in der DB gespeichert werden. Ausnahme: Full-HTML in der DB

    dann schau Dir nochmal die Funktion array_map an. Du weißt ja schon, dass man

    ein großes Array auch aus zwei kleinen zusammensetzen kann. Dann könnte man auch

    drei Arrays in einem großen speichern usw.

    Du könntest die gesamte Datenkommunikation harmonisieren, also gleiche oder

    ähnliche Namen verwenden für die DB und die Ausgabe im HTML-Formular

    Und die langen Variablenbezeichner sind zwar sehr schön aussagekräftig, aber

    nicht sehr praktisch zum Programmieren "$max_strlen" würde das geliche sagen

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  4. while ( $row = mysql_fetch_assoc($rs) )
    {
     $id = $row['ID'];
     $maxlen = $max_string_laenge;
     $data = Array();

    $data["var_ansprechpartner"] = get_field($row, 'ANSPRECHPARTNER', $maxlen);
     $data["var_vorname"] = get_field($row, 'VORNAME', $maxlen);
     $data["var_nachname"] = get_field($row, 'NACHNAME', $maxlen);
     $data["var_ort"] = get_field($row, 'ORT', $maxlen);

    echo make_table_td($data);
    }

    // ==============================================

    function get_field($row, $field, $maxlen)
    {
     if (strlen($row[$field]) > $maxlen) // crop ?
     {
      $filter = strip_tags(substr($row[$field],0,($maxlen)));
      $str =  $str.' ...';
     }
     else
     {
      $str = $row[$field];
     }
     return $str;
    }