Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme beim erstellen von Funktionen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme beim erstellen von Funktionen

    Hallo php.de Community,

    ich stehe gerade vor dem Problem Quellcode in einer Funktion auszulagern. Zudem soll die Funktion sich in einer extra php befinden (function.php) und mit include in meine Startseite eingebunden werden.
    Bekomme die Fehlermeldung:

    Notice: Undefined variable: mysqli in C:\xampp\htdocs\server\functions.php on line 4

    Fatal error: Call to a member function query() on null in C:\xampp\htdocs\server\functions.php on line 4
    Woran kann es liegen?


    Die Main:
    PHP-Code:
    <?php
    require_once "db_data.php";
    include (
    'functions.php');
    global 
    $mysqli;
    showData();

    $mysqli->close();

    ?>
    db_database:
    PHP-Code:
    <?php
    $mysqli 
    = new mysqli("localhost""root""""test");
    if (
    $mysqli->connect_error){
        echo 
    "connection failed: " mysqli_connect_error();
        exit();
    }

    echo 
    "Database connection successful<br />";

    ?>
    functions:
    PHP-Code:
    <?php
    function showData(){
    global 
    $result;
    $result $mysqli->query("SELECT a1, a2, a3, a4, a5, a6 FROM haupttabelle;");
        while (
    $zeile $result->fetch_array()){
        echo 
    "<strong>{$zeile['a1']}</strong>: {$zeile['a2']} {$zeile['a3']} {$zeile['a4']} <br />\n";
        }
    $result->close();
    }



    ?>

  • #2
    Du darfst nicht $result->close verwenden. Sondern $mysqli->close(); Und $result scheint null zu sein, dass heißt deine While-Schleife wird ebenfalls ein Fehler erzeugen, da du $result->fetch_array() verwendest.

    Global Variablen sollte man zudem vermeiden.
    http://www.abouttheweb.de/2011/02/da...rmeiden-sollte

    Kommentar


    • #3
      global ist böse und sollte nicht verwendet werden. Wenn du Werte in einer Finktions brauchst, übergib sie als Parameter.

      Eine Funktion sollte nichts mit echo ausgeben sondern nur Werte mit return zurück liefern.

      Kommentar


      • #4
        $mysqli->close(); habe ich in der Main verwendet. Ich dachte ich müsste auch $result->close verwenden. Wie kann ich denn das Array ausgeben ohne "$result->fetch_array()"?

        Habe noch folgendes versucht:
        in der main:
        showData($result);
        in der function:
        <?php
        function showData(&$result){
        ...
        ?>
        Es erscheint noch die Fehlermeldung:
        Notice: Undefined variable: mysqli in C:\xampp\htdocs\server\functions.php on line 4

        Fatal error: Call to a member function query() on null in C:\xampp\htdocs\server\functions.php on line 4

        Kommentar


        • #5
          Zitat von Shapes Beitrag anzeigen
          Es erscheint noch die Fehlermeldung:
          Wie hellbringer schon sagte, mußt du das mysqli-Objekt als Parameter übergeben.

          Kommentar


          • #6
            Danke für den Hinweis. Leider bekomme ich immer noch die gleiche Fehlermeldung. Habe ich mit der Parameterübergabe was falsch gemacht?

            Auszug aus der main:
            showData($result, $mysqli);
            Auszug aus der functions:
            function showData(&$result, &$mysqli){
            ...
            }
            $result->close();
            }

            Kommentar


            • #7
              Das ist halt kein vollständiger Code, also kann man nichts dazu sagen.

              Warum machst du überhaupt Referenzen (&)?

              Kommentar


              • #8
                Okay super habe das Problem mit euere Hilfe lösen können. Die Referenzen habe ich rausgenommen und bei der Referenzübergabe die Variable $result entfernt, da sie zu diesem Zeitpunkt noch nicht definiert war. Danke!

                Kommentar

                Lädt...
                X