globale Variablen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von ThaHammer, 19.03.2005.

  1. ThaHammer

    ThaHammer Thread Starter MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    Ich habe ein kleines Script gebastelt, das mir je nach Auswahl der Tabelle, die Spalten als Formular ausgibt. Das dient später dazu leicht die Einträge zu Ändern, zu Editieren zu können. Ist so recht praktisch, man muß keine Rücksicht auf irgend eine Tabelle nehmen, weil das ja schön dynamisch aufgebaut wird. Soweit funktioniert das Ganze schon einwandfrei, bis auf das auslesen der Formulardaten am Ende. Da ergab sich ein kleines Problem.

    Ich baue die Tabelle mithilfe einer Funktion auf. In der Funktion werden die feldnamen in einer Schleife mit erzeugt. Das ergibt dann $name[$x], also ein Array mit den Feldnamen. Leider habe ich jetzt das Problem mit den globalen und lokalen Variablen. Das Array wird nicht zurück übergeben!
    Sobald ich aus der Funktion raus bin, habe ich das Array nicht mehr. Kann halt auch nichts ausgeben oder Ändern.

    Wie kriege ich das Array rüber in den Rest? Mit return $name geht es leider nicht, habe ich schon ausprobiert.
     
  2. Morfio

    Morfio MacUser Mitglied

    Beiträge:
    215
    Zustimmungen:
    1
    MacUser seit:
    25.10.2002
    Hi,

    also, mit "return $var" muss es gehen. Wenn Du das nicht benutzen willst/kannst, kannst Du mit Referenzen arbeiten:

    PHP:
    function tuWas(&$myArray) {
        
    $myArray[0] = "Hallo";
        
    $myArray[1] = "Welt";
    }

    $myArray = array();

    tuWas($myArray);

    for(
    $i 0$i count($myArray); $i++) {
        echo 
    $myArray;
    }
    Morfio ...
     
    Zuletzt bearbeitet: 19.03.2005
  3. Morfio

    Morfio MacUser Mitglied

    Beiträge:
    215
    Zustimmungen:
    1
    MacUser seit:
    25.10.2002
    PS: Du kannst natürlich auch mit globalen Variablen arbeiten, aber das ist bah!
     
  4. ThaHammer

    ThaHammer Thread Starter MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    So schaut meine Funktion derzeit aus.
    Ich übergebe ihm je nach Fall den Start und Endwert der Schleife.
    Endwert ist ganz einfach die Anzahl der Spalten in der ausgewählten Tabelle.

    function schleife($start,$menge)
    {
    global $resultf, $x, $name;
    for ($x=$start;$x<$menge;$x++)
    {
    $meta = mysql_fetch_field($resultf, $x);
    $lang=$meta->max_length+2;
    $typen=$meta->type; // Typ des Feldes ermitteln
    if($lang>=30) // Wenn die Felder zu breit sind
    {
    $lang=30;
    }
    echo"<td><input type=$typen name=$name[$x] size=$lang></td>";
    }
    echo "</tr>";
    return $name;
    }

    Mit name=$name[$x] versuche ich die Namen für die felder des Formulars zu vergeben, sollte doch so funktionieren?
    Mit return will ich den zurück geben.

    Da sehe ich selber gerade was überflüssiges! $x brauche ich ja gar nicht auf global setzten.
     
    Zuletzt bearbeitet: 19.03.2005
  5. Azathoth

    Azathoth MacUser Mitglied

    Beiträge:
    475
    Zustimmungen:
    9
    MacUser seit:
    20.09.2004
    wenn eine variable am anfang der function mit dem schlüsselwort "global" markiert wird, hast du das was du willst ;)
     
  6. ThaHammer

    ThaHammer Thread Starter MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    Ja dachte ich auch! Schau oben in der Function ist bei global auch $name dabei. Oder muß ich das dann anders angeben?
     
  7. Morfio

    Morfio MacUser Mitglied

    Beiträge:
    215
    Zustimmungen:
    1
    MacUser seit:
    25.10.2002
    Warum ist $name global und warum gibst Du $name zurück? Macht keinen Sinn. Und, wie schon erwähnt, solltest Du nicht mit globalen Variablen arbeiten, vor allem, da es hier nicht notwendig ist (s. mein Beispiel).
     
  8. ThaHammer

    ThaHammer Thread Starter MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    Na gut bei Global könnte man es wahrscheinlich weglassen, aber zurück geben muß ich es doch, wenn ich hernach die Namen der Formularfelder brauche. Die stehen im $name Array. Oder hast Du ne besser Lösung?

    ich mache PHP erst seit ein paar Wochen, habe bei den ein oder anderen Sachen noch kleinere schwierigeiten. Doof finde ich das es zwar viele Dokus und Bücher gibt, aber immer irgend etwas bei dennen fehlt was man gerade wieder benötigt! :)
     
  9. Morfio

    Morfio MacUser Mitglied

    Beiträge:
    215
    Zustimmungen:
    1
    MacUser seit:
    25.10.2002
    Du machst in Deinem Beispiel gar nichts mit der Variablen, außer sie auszugeben. Deshalb ist es auch obsolet, sie zurückzugeben.

    PHP:
    function schleife($start,$menge) {
        global 
    $resultf$x$name;

        for(
    $x $start$x $menge$x++) {
            
    $meta mysql_fetch_field($resultf$x);
            
    $lang $meta->max_length 2;
            
    $typen $meta->type// Typ des Feldes ermitteln

            
    if($lang>=30// Wenn die Felder zu breit sind
                
    $lang=30;

            echo
    "<td><input type=$typen name=$name[$x] size=$lang></td>";
        }
        
        echo 
    "</tr>";
        return 
    $name;
    }
    Die globale Variable $x ist unnötig und sogar schlecht, so zu benutzen. Auch mit $resultf machst Du nichts.

    Also, da Du $name überhaupt nicht benutzt, kann es auch nichts zurückgeben.

    So würde es einen Sinn ergeben:

    PHP:

    function tuWas($Name) {
        for(
    $i 0$i 10$i++) {
            
    $Name[$i] = "Test " + ($i 1);
        }

        return 
    $Name;
    }

    So würde jetzt in $Name 10 mal Test 1 (bist Test 10) stehen und alle Elemente von 0 bis 9 würden, falls vorhanden, überschrieben.

    Morfio ...
     
    Zuletzt bearbeitet: 19.03.2005
  10. ThaHammer

    ThaHammer Thread Starter MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    Du machst in Deinem Beispiel gar nichts mit der Variablen, außer sie auszugeben. Deshalb ist es auch obsolet, sie zurückzugeben.

    PHP:
    function schleife($start,$menge) {
        global 
    $resultf$x$name;

        for(
    $x $start$x $menge$x++) {
            
    $meta mysql_fetch_field($resultf$x);
            
    $lang $meta->max_length 2;
            
    $typen $meta->type// Typ des Feldes ermitteln

            
    if($lang>=30// Wenn die Felder zu breit sind
                
    $lang=30;

            echo
    "<td><input type=$typen name=$name[$x] size=$lang></td>";
        }
        
        echo 
    "</tr>";
        return 
    $name;
    }
    Die globale Variable $x ist unnötig und sogar schlecht, so zu benutzen. Auch mit $resultf machst Du nichts.

    Doch mit $resultf kriege ich die Länge des Feldes raus!

    Also, da Du $name überhaupt nicht benutzt, kann es auch nichts zurückgeben.

    Benutzte ich doch um den Formularfeldern einen Namen zu geben. Mir scheint nur das es so nicht geht. Vielleicht sollte ich die Namenszuweisung ausserhalb des HTML Tags machen?

    So würde es einen Sinn ergeben:

    PHP:

    function tuWas($Name) {
        for(
    $i 0$i 10$i++) {
            
    $Name[$i] = "Test " + ($i 1);
        }

        return 
    $Name;
    }

    So würde jetzt in $Name 10 mal Test 1 (bist Test 10) stehen und alle Elemente von 0 bis 9 würden, falls vorhanden, überschrieben.

    Ja genau! ich glaub ich weiß schön angsam wo mein Problem ist! Es ist wahrscheinlich die Zeile:

    echo"<td><input type=$typen name=$name[$x] size=$lang></td>";

    Da bastle ich zwar die Namen für HTML zusammen, aber PHP kann damit nichts anfangen. Oder bin ich jetzt am Holzweg?
    Ich schätze ich muß die zeile anders zusammen bauen, damit PHP auch was davon hat.

    Danke für deine Hilfe! Meine PHP Profis sind zur zeit nicht erreichbar, kann die nicht fragen.
     
Die Seite wird geladen...

Diese Seite empfehlen