averoxus: variable Übergabe funtioniert nicht

Hallo alle zusammen,

folgendes Problem:

function count_members ($all_counted_members) {
$query = mysql_query("SELECT id FROM members");
$all_counted_members = mysql_num_rows($query);
}

Diese Funktion soll aus der Datenbank members herauslesen wie viele Zeilen es gibt.
Jetzt führe ich die Funtkion aus:

count_members ($all_counted_members);
echo $all_counted_members;

Aber es kommt kein Ergebnis.

Wo liegt da das Problem (zur Datenbank habe ich schon connected).

mfG
averoxus

P.S.: Vielen Dank für die Hilfe!

  1. echo $begrüßung;

    function count_members ($all_counted_members) {
    $query = mysql_query("SELECT id FROM members");
    $all_counted_members = mysql_num_rows($query);
    }

    Idealerweise sind Funktionen so aufgebaut, dass sie Parameter entgegennehmen, etwas berechnen und ein Ergebnis zurückliefern.
    Du versuchst, das Ergebnis über einen Parameter zu erhalten. So wie die Funktion jetzt aussieht, braucht sie keine Parameter, will aber ein Ergebnis zurückliefern. Streiche also den Parameter und gib das Ergebnis über return zurück.

    Weiterhin ist es zum Zählen der Datensätze sinnvoller, die Funktion COUNT(*) der Datenbank zu verwenden. Du hingegen lässt alle Ergebnisse ermitteln, zu PHP übertragen (passiert automatisch im Hintergrund) und wirfst nach einem Durchzählen die übertragenen Daten wieder weg. Bei einer kleinen Datenmenge fällt das nicht weiter auf, aber bei einem größeren Datenbestand ist das eine sinnlose Verschwendung von Ressourcen.

    echo "$verabschiedung $name";

    1. Vielen, vielen Dank an alle.
      Jetzt funktioniert es mit count und return :-)!
      Die Tutorials werd ich mir gleich durchlesen.

      Also nochmal vielen Dank :D!

      mfG
      averoxus

  2. Hallo,

    Wo liegt da das Problem (zur Datenbank habe ich schon connected).

    Dir fehlen ein paar Grundlagen, würde ich sagen ... abre das lässt sich nachholen.

    Ok, ein paar Gedankenanstöße:

    • Bei der Entwicklung sollte die Zeile "error_reporting(E_ALL|E_STRICT);" nicht fehlen. Damit werden viele Fehler und Hinweise früher aufgezeigt. [1]
    • Schau dir den Abschnitt zu Funktionen im Manual an. [2]
    • Eine Funktion kann einen Rückgabewert haben. Wo ist der bei dieser Funktion? [3]
    • Warum wird der Funktion ein Parameter übergeben, wenn er nicht genutzt wird? Falls dieser Parameter eine Referenz sein soll, dann fehlt das "&" vor dem Namen. (Und die Funktion wird "falsch" benutzt, denn dann wäre ein "echo ".$all_counted_members;" zielführender. [4]
    • Wennn etwas mit Mysql gezählt werden soll, ist "SELECT COUNT(*) FROM tabelle" die bessere Variante. Ein paar Tipps findest du unter [5].
    • Schau dir den zweiten Parameter von mysql_query im Manual an. [6]

    [1] http://de3.php.net/manual/de/function.error-reporting.php
    [2] http://de3.php.net/manual/de/language.functions.php
    [3] http://de3.php.net/manual/de/functions.returning-values.php
    [4] http://de3.php.net/manual/de/language.references.php
    [5] http://php-faq.de/ch/ch-databases.html
    [6] Die Doku findest du jetzt bestimmt selber, oder?

  3. Lieber averoxus,

    Du hast das Prinzip der Werteübergabe zwischen Funktionen noch nicht ganz verstanden, schätze ich.

    function count_members ($all_counted_members) {
    $query = mysql_query("SELECT id FROM members");
    $all_counted_members = mysql_num_rows($query);
    }

    Diese Funktion bekommt einen Wert in einer Variablen $all_counted_members übermittelt...  und tut damit absolut nichts. Der eventuell übermittelte Wert wird in der zweiten Anweisung mit etwas Neuem überschrieben! Zurück gibt die Funktion übrigens nichts (oder siehst Du da ein "return $irgendwas"?).

    Diese Funktion soll aus der Datenbank members herauslesen wie viele Zeilen es gibt.

    Das tut sie ja...

    Jetzt führe ich die Funtkion aus:

    count_members ($all_counted_members);

    Das ist richtig. Du lässt die Funktion genau das tun, was sie soll. Na und? Fängst Du damit irgendetwas an? Ach, und wo kommt die Variable $all_counted_members her? Hast Du diese vorher im Verlauf Deines Scripts definiert? Dieses $all_counted_members im Funktionsaufruf ist eine völlig andere Variable, als die gleichnamige Variable innerhalb Deiner Funktion!

    echo $all_counted_members;

    Tja, hier wird das ausgegeben, was auch schon vorher in der Variablen $all_counted_members drinne stand... nämlich nix.

    Wo liegt da das Problem (zur Datenbank habe ich schon connected).

    Du möchtest, dass Deine Funktion einen Wert zurück gibt!

    function count_members () {  
        /* Diese Funktion benötigt keine übergebenen Werte, da ja alles schon  
           in der folgenden Zeile fest eingetragen ist: */  
      
        $query = mysql_query("SELECT `id` FROM `members`");  
        $all_counted_members = mysql_num_rows($query);  
      
        // Hier gibst Du das Ergebnis an den Funktionsaufruf zurück!!  
        return $all_counted_members;  
    }  
    
    

    So. Und nun holen wir uns über unsere Funktion den Wert:

    $all_counted_members = count_members(); // Wert holen und in Variable speichern  
    echo $all_counted_members; // und ausgeben.
    

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)