Invalid argument - "foreach" problem HIlfe!

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

  • Invalid argument - "foreach" problem HIlfe!

    Invalid argument supplied for foreach() ....hier in Zeile 8

    Bekomme die Meldung nicht weg, ist der Syntax richtig? ". Die Zeile darüber ist ja für den foreach "verantwortlich", $n-count" geht das denn so`?

    Tip wäre Spitze!
    PHP-Code:
     function getMotw($memberverbindung$n)
      {
        
    $motwList=getCurrentMOTW($memberverbindung);
        if(
    count($motwList)<$n)
        {
          
    $motwList2=selectNewMOTW($memberverbindung,$n-count($motwList));
          foreach(
    $motwList2 as $mid)
            
    storeNewMOTW($memberverbindung$mid);
          
    $motwList=array_merge($motwList$motwList2);
        }
        return 
    $motwList;
      } 

  • #2
    $motwList2 ist hier kein Array, deswegen die Fehlermeldung. evtl um $n-count() noch Klammern setzen
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      Die Klammern haben in diesem Fall absolut keinen Einfluss. Die Frage ist: Was gibt die Funktion selectNewMOTW() zurück? Offensichtlich ist es kein Array.
      Gruss
      H2O

      Kommentar


      • #4
        Hmm, hab da wegen dem selectNewMOTW schon experimentiert.
        Ohne Erfolg.

        O:K., hier mal der komplette text:
        der foreach befindet sich im unteren Drittel.

        PHP-Code:
        <?php require_once('Connections/memberverbindung.php');
        mysql_select_db($database_memberverbindung$memberverbindung);


        // Holt die memberids der aktuellen Mitglieder der Woche
          // oder NULL falls es keine gibt.
          
        function getCurrentMOTW($memberverbindung)
          {
            
        $query='SELECT membernr AS motw FROM membersOfTheWeek WHERE kw=WEEK(CURDATE(),3)
             AND year=YEAR(CURDATE())'
        ;
             if(
        false===($result=mysql_query($query$memberverbindung)))
              die(
        mysql_error().' ON '.$query);
                   
        $motwList=array();
            while(
        false!==($row=mysql_fetch_assoc($result)))
              
        $motwList[]=$row['motw'];
            return 
        $motwList;
          }

         
        // Speichert ein neues Mitglied der Woche
           
        function storeNewMOTW($memberverbindung$motw)
          {
            
        $query=sprintf('INSERT INTO membersOfTheWeek (ProductID,kw,year)
             VALUES(%d,WEEK(CURDATE(),3),YEAR(CURDATE()))'
        $motw);
            if(!
        mysql_query($query$memberverbindung))
              die(
        mysql_error().' ON '.$query); 
          }

          
        // ermittelt $n neue Mitglieder der Woche
          
        function selectNewMOTW($memberverbindung$n)
          {
            
        $query=sprintf('SELECT 
                              a.membernr AS motw
                            FROM
                              members a 
                               LEFT JOIN membersOfTheWeek b 
                                ON 
                                  a.membernr=b.membernr 
                            ORDER BY
                              b.year ASC,
                              b.kw ASC,
                              RAND()
                            LIMIT 1,%d'
        ,$n);
            
        $result=mysql_query($query$memberverbindung);
             if(!
        mysql_query($query,$memberverbindung))
              die(
        mysql_error().' ON '.$query);
            
        $motwList=array(); 
            while(
        false!==($row=mysql_fetch_assoc($result)))
              
        $motwList[]=$row['motw']; 
        }

        // ZUSAMMENBAU: gibt die aktuellen $n "Mitglieder der Woche" zurück:
          
        function getMotw($memberverbindung$n)
          {
            
        $motwList=getCurrentMOTW($memberverbindung);
            if(
        count($motwList)<$n)
            {
              
        $motwList2=selectNewMOTW($memberverbindung,$n-count($motwList));
              foreach(
        $motwList2 as $mid)
                
        storeNewMOTW($memberverbindung$mid);
              
        $motwList=array_merge($motwList$motwList2);
            }
            return 
        $motwList;
          }  
          
              
        $aktmem=getMotw($memberverbindung,1);
          
        ?>

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
        <LINK REL="SHORTCUT ICON" HREF="/favicon.ico">
        <meta name="robots" content="INDEX,FOLLOW">

        <BODY>

         <?php echo $aktmem ['memberinfo']; ?>

        </BODY>
        </HTML>

        Kommentar


        • #5
          Und was gibt selectNewMOTW() zurück? Ich behaupte ganz mutig: Rein gar nichts! Oder siehst du return in dieser Funktion? Allenfalls nach der while-Schleife das Array zurückgeben...
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Original geschrieben von jahlives
            Und was gibt selectNewMOTW() zurück? Ich behaupte ganz mutig: Rein gar nichts!
            Das könnte hinkommen.

            Ziel ist:

            Aus der tabelle "members" einen oder zwei texte aus der Spalte "memberinfo" (pro Woche einen anderen) auslesen und anzeigen.
            Dazu gibt es noch die Tabelle "membersOfTheWeek" mit Spalte "kw und "year". Beide haben die Spalte "membernr", sozusagen als ID Spalte.

            Da müsst Ihr mir mal unter die Arme greifen, ich meine den betreffenden Block korrigiert einstellen.

            Ich habe hiermit meine Schwierigkeiten, teils sind mir Befehle nicht bekannt, dann ist das Script auch nicht von mir erstellt, nur teils verbessert, wo ich konnte.

            Mann, wenn das endlich laufen würde...uhhh...

            Kommentar


            • #7
              Da müsst Ihr mir mal unter die Arme greifen, ich meine den betreffenden Block korrigiert einstellen.
              hier gibt es keinen fertigen code. du musst doch nur am ende der funktion selectNewMOTW das entsprechende return einbauen. siehe auch hier: funktionen

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Schon probiert?
                Allenfalls nach der while-Schleife das Array zurückgeben...
                PHP-Code:
                function selectNewMOTW($memberverbindung$n)
                  {
                    
                $query=sprintf('SELECT 
                                      a.membernr AS motw
                                    FROM
                                      members a 
                                       LEFT JOIN membersOfTheWeek b 
                                        ON 
                                          a.membernr=b.membernr 
                                    ORDER BY
                                      b.year ASC,
                                      b.kw ASC,
                                      RAND()
                                    LIMIT 1,%d'
                ,$n);
                    
                $result=mysql_query($query$memberverbindung);
                     if(!
                mysql_query($query,$memberverbindung))
                      die(
                mysql_error().' ON '.$query);
                    
                $motwList=array(); 
                    while(
                false!==($row=mysql_fetch_assoc($result))){
                      
                $motwList[]=$row['motw']; 
                    }
                    
                //Jetzt geben wir das Array zurück
                    
                return $motwList;

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Klappt jetzt, danke!

                  Das Script arbeitet jetzt, nur der Ablauf ist noch etwas gestört.
                  Ich beschreibs heute später mal. Da muss ich etwas ausholen.

                  Kommentar

                  Lädt...
                  X