Bekiro: Warum wird Code in Funktionen wird anders behandelt?

Hallo,

ich habe ein problem und würde mich auf eure hilfe sehr freuen. also, in einem formular sollen bereits existierende werte als value eingesetzt werden. wenn die werte nicht existieren wird auch kein value vorgegeben.

mein script funktioniert wenn ich den php code direkt in die formularzeile eingebe:

<input type="text" name="firma"
<?php if ((isset($firma)) and (!$firma == 0)) {
echo 'value="'.$firma.'"'; } ?>
/>

da mein formular sehr viele felder hat, wollte ich mir arbeit ersparen und meinen html-code etwas übersichtlicher halten, indem ich den code als funktion auslagere. also hab ich den php teil in eine funktion geschrieben:

function value($a) {
 if ((isset($a)) and (!$a == 0)) {
  echo 'value="'.$a.'"';
 }
}

und im formularfeld rufe ich dann die funktion auf:

<input type="text" name="firma"
<?php function (value($firma); ?>
/>

jetzt bekomme ich aber die fehlermeldung:
Notice: Undefined variable: firma in C:\index.php on line 7 />

da die variable $firma nicht existiert kommt wohl die fehlermeldung. ich dachte aber ich hätte das mit der "if" abfrage abgefangen. ich weiss nicht warum der php code direkt in das formularfeld geschrieben funktioniert, und als funktion definiert, eine fehlermeldung bringt.

was mache ich falsch?

  1. Grüße,

    jetzt bekomme ich aber die fehlermeldung:
    Notice: Undefined variable: firma in C:\index.php on line 7 />

    evtl weil die varibale als solche nur beim abschicken des formulars exestiert Oo? AFAIK IMHO ohne gewähr

    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
  2. Hallo Bekiro,

    <input type="text" name="firma"
    <?php if ((isset($firma)) and (!$firma == 0)) {
    echo 'value="'.$firma.'"'; } ?>
    />

    Dein Notation funktioniert nur, wenn register_globals aktiviert ist, wovon aus Sicherheitsgründen schon seit längerer Zeit abgeraten wird. Ab PHP 6 wird dieses "Feature" sogar komplett entfallen. Du solltest also lieber die superglobalen Arrays $_GET bzw. $_POST verwenden, in deinem Beispiel also statt $firma $_GET['firma'] bzw. $_POST['firma'].

    function value($a) {
    if ((isset($a)) and (!$a == 0)) {
      echo 'value="'.$a.'"';
    }
    }

    und im formularfeld rufe ich dann die funktion auf:

    <input type="text" name="firma"
    <?php function (value($firma); ?>
    />

    jetzt bekomme ich aber die fehlermeldung:
    Notice: Undefined variable: firma in C:\index.php on line 7 />

    Mich wundert ehrlich gesagt nicht, dass da keine weitere Fehlermeldung kommt. Die Anweisung<?php function (value($firma); ?> ist nämlich schon syntaktisch komplett falsch.

    Deshalb gehe ich davon aus, dass du stattdessen <?php value($firma); ?> dort stehen hast. D.h. du übergibst der Funktion value die Variable $firma, welche nicht definiert ist. Da die Überprüfung mit isset() aber erst innerhalb der Funktion stattfindet, kommt hier deswegen eine fehlermeldung.

    Schöne Grüße,

    Johannes

  3. Hallo,

    möglich, dass ich Unsinn erzähle (da ich eigentlich eher eigentlich Lernender als Lehrender bin), aber ich glaube, was du da fabrizierst ist Quatsch.

    <input type="text" name="firma"
    <?php function (value($firma); ?>
    />

    Du willst die Funktion dort doch nicht deklarieren sondern nur aufrufen. Darum ist das „function“ dort doch fehl am Platz. Außerdem öffnest du eine Klammer mehr, als du schließt. Versuchs mal so:

    <input type="text" name="firma"  
    <?php value($firma); ?>  
     />
    

    Gruß

    1. aber ich glaube, was du da fabrizierst ist Quatsch.
      <?php function (value($firma); ?>

      du hast vollkommen recht.
      es muss natürlich <?php value($firma); ?> heissen.
      hab mich hier vertan. in meinem script hab ich das aber richtig gehabt. danke für die richtigstellung ;-)

      gruss bekiro

      1. Hello,

        <?php function (value($firma)); ?>

        du hast vollkommen recht.
        es muss natürlich <?php value($firma); ?> heissen.

        Ich würde mir entweder das Wörtchen echo NICHT ersparen, oder aber den "Funktions"namen so wählen, dass ich genau wüsste, dass die "Funktion" eigentlich eine prozedur ist, also gar keinen Rückgabewert erzeugt, sondern ihn direkt auf die Standardausgabe "printet".

        also  print_value();

        Da das aber sogar noch länger ist, als   echo value();

        kann man sich auch gleich die Konvention auferlegen, dass Funktionen eben das gewünschte Ergebnis als Rückgabewert liefern, und sonst keine schreibenden Eingriffe in irgendwelche Datenstrukturen oder Kanäle vornehmen.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  4. Hello,

    function value($a) {
    if ((isset($a)) and (!$a == 0)) {
      echo 'value="'.$a.'"';
    }
    }

    function pvalue($varname)     ## als Unterscheidung für "gvalue()" und "cvalue()"
    {
      $value = '';
      if (!empty($_POST[$varname])
      {
        $value = htmlentities($_POST[$varname],ENT_QUOTES);  ## oder htmlspechialchars()
      }
      return $value;
    }

    und im formularfeld rufe ich dann die funktion auf:

    <input type="text" name="firma"
             value="<?php (pvalue($firma); ?>"
      />

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Hello,

      Hello,

      function value($a) {
      if ((isset($a)) and (!$a == 0)) {
        echo 'value="'.$a.'"';
      }
      }

      function pvalue($varname)     ## als Unterscheidung für "gvalue()" und "cvalue()"
      {
        $value = '';
        if (!empty($_POST[$varname])
        {
          $value = htmlentities($_POST[$varname],ENT_QUOTES);  ## oder htmlspechialchars()
        }
        return $value;
      }

      und im formularfeld rufe ich dann die funktion auf:

      <input type="text" name="firma"

      value="<?php echo pvalue($firma); ?>"

      />

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      1. Hallo Tom,

        ist aber immer noch falsch:

        <input type="text" name="firma"
                   value="<?php echo pvalue($firma); ?>"
          />

        <input type="text" name="firma"  
            value="<?php echo pvalue('firma'); ?>" />
        

        So stimmt der Aufruf deiner Funktion.

        Schöne Grüße,

        Johannes

        1. Hello,

          ist aber immer noch falsch:

          *aaach*

          Danke.

          Irgendwo musste der Name doch als String reingesteckt werden...
          Da habe ich extra das Übergabeargument der Funktion so genannt, und dann?

          <input type="text" name="firma"
                     value="<?php echo pvalue($firma); ?>"
            />

          <input type="text" name="firma"

          value="<?php echo pvalue('firma'); ?>" />

          
          >   
          > So stimmt der Aufruf deiner Funktion.  
            
            
          Schaun wir mal, ob Bekiro noch mal vorbeischaut oder ob es schon aufgegeben hat.  
            
            
          Harzliche Grüße vom Berg  
          <http://bergpost.annerschbarrich.de>  
            
          Tom
          
          -- 
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen  
          Nur selber lernen macht schlau  
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)  
            
          ![](http://bitworks.de/~selfHTML/Virencheck.gif)  
          
          
    2. hat leider auch nicht geklappt. da kommt immer noch die gleiche fehlermeldung. auch nach dem ich deine 2 klammerfehler korrigiert hatte.

      hier fehle der abschliessende klammer:

      if (!empty($_POST[$varname])

      muss natürlich so lauten:
      if (!empty($_POST[$varname]))

      und hier war eine klammer zu viel:

      value="<?php (pvalue($firma); ?>"

      so wars richtig:
      value="<?php pvalue($firma); ?>"

      aber wie gesagt, hat trotzdem nicht funktioniert. :-(

      1. Hello,

        hat leider auch nicht geklappt. da kommt immer noch die gleiche fehlermeldung. auch nach dem ich deine 2 klammerfehler korrigiert hatte.

        Entschuldige bitte. Aber Klammern musst Du bei mir immer selber mitbringen ;-)

        hier fehle der abschliessende klammer:

        if (!empty($_POST[$varname])

        muss natürlich so lauten:
        if (!empty($_POST[$varname]))

        und hier war eine klammer zu viel:

        value="<?php (pvalue($firma); ?>"

        so wars richtig:
        value="<?php pvalue($firma); ?>"

        nicht ganz.
        Da fehlte das diskutierte "echo" noch

        so wars richtig:
          value="<?php echo pvalue($firma); ?>"

        aber wie gesagt, hat trotzdem nicht funktioniert. :-(

        Da hilft nur noch selber nachdenken oder abwarten...

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)