Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Funktion innerhalb von Schleife läuft nur einmal durch

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Funktion innerhalb von Schleife läuft nur einmal durch

    Hi zusammen,

    ich bin mit meinme Latein echt am Ende. Ich bekomme es nicht hin, dass die Funktion in der Folgenden Schleife 2x ausgeführt wird. Lediglich mein Kommentar außerhalb der Funktion, aber in der Schleife, wird 2x ausgegeben. Weiß vielleicht jemand an was es liegt? Ich habe schon verschiedene Schleifen getestet, auch mit goto habe ich es versucht. Alles führt zum selben Ergebnis. Hier der Code

    PHP-Code:
    <?php
    for($count 0$count 2$count++)
    {
    echo 
    "Hier wird ein Text ausgegeben";
     
    function 
    PostToHost1($host1$path1$referer1

    $data_to_send1) {
      
    $fp fsockopen($host180);
      
    printf("Open!\n");
      
    fputs($fp"POST $path1 HTTP/1.1\r\n");
      
    fputs($fp"Host: $host1\r\n");
      
    fputs($fp"Referer: $referer1\r\n");
      
    fputs($fp"Cookie: hier ist ein cookie drin\r\n");
      
    fputs($fp"Content-type: 

    application/x-www-form-urlencoded\r\n"
    );
      
    fputs($fp"Content-length: "strlen($data_to_send1

    .
    "\r\n");
      
    fputs($fp"Connection: close\r\n\r\n");
      
    fputs($fp$data_to_send1);
      
    printf("Sent!\n");
      while(!
    feof($fp)) {
          
    $res .= fgets($fp128);
      }
      
    printf("Done!\n");
      
    fclose($fp);
     
      return 
    $res;
    }
     
    $data1 "Postdaten die zu senden sind";
     
    printf("Go!\n");
    $x PostToHost1(
                  
    "host.tld",
                  
    "http://host.tld/bla.php",
                  
    "http://host.tld/bla.php",
                  
    $data1
    );
    }
    ?>


  • #2
    1. Formatiere deinen Quelltext sauber, das hilft dir den Überblick zu behalten
    2. Definiere die Funktion PostToHost1 ausserhalb der Schleife, spätestens beim 2. Durchlauf wird es einen redeclare Fehler geben - was vermutlich auch dein Problem ist
    3. Stell das error_reporting an, sonst siehst du solche Fehler nicht und musst erst einen Post im php.de Forum verzapfen
    4. Gut gemeinter Tipp: Initialisiere alle Variablen, $res ist z.B. nicht deklariert und auch nicht initilialisiert

    Kommentar


    • #3
      Google mal "EVA-Prinzip"
      Homepage: www.jplace.de

      Github: JohnnyDevNull

      Kommentar


      • #4
        Ja, Funktion innerhalb einer Schleife und "faules" error reporting ist definitv eine schlechte Mischung

        3. Stell das error_reporting an, sonst siehst du solche Fehler nicht und musst erst einen Post im php.de Forum verzapfen
        -> debuggen: http://php-de.github.io/#debugging

        Genereller "Tipp" error reporting beim Entwickeln immer voll aufdrehen

        LG
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Hi,

          Danke schonmal für die Antworten. Gibt es eine Möglichkeit die Funktion irgendwie zu "redeklarieren" ?
          Ich könnte auch die Schleife weglassen, und die gleiche Funktion nochmal unter anderem Namen dranhängen.. das habe ich auch schon gemacht, jedoch gefällt mir die Lösung nicht. Vor allem sind in der php Datei noch mehr Funktionen als die, die ich hier gepostet habe, welche alle in die Schleife sollen. Ich bin grade etwas Ratlos, über das weitere Vorgehen.

          Gruß
          phuck

          Kommentar


          • #6
            Zitat von phuck Beitrag anzeigen
            Gibt es eine Möglichkeit die Funktion irgendwie zu "redeklarieren" ?
            Nein. Das hat auch nichts mit aufrufen zutun. Keine Ahnung, was du vorhast oder missverstehst. Einmal deklarieren, sooft aufrufen wie du willst.
            Zitat von nikosch
            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

            Kommentar


            • #7
              Funktionsdeklarationen haben nichts im 'laufenden' Code zu suchen, schon gar nicht in Schleifen.
              Packe doch all deine Funktionen in eine extra Datei, welche du dann per require oder include (1x am Anfang!) in dein Script holst. Dann kannst du deine Funktionen aufrufen so oft wie nötig.
              PHP-Klassen auf github

              Kommentar


              • #8
                Zitat von tkausl Beitrag anzeigen
                Einmal deklarieren, sooft aufrufen wie du willst.
                Naja, genau das klappt ja nicht. Ich kann sie ja nur einmal aufrufen.

                Kommentar


                • #9
                  Ja, du musst sie ausserhalb der Schleife angeben..

                  PHP-Code:
                  function writeHello() {
                    echo 
                  "Hello";
                  }


                  for (
                  $i 1$i <= 20$i++) {
                    
                  writeHello();
                  }

                  /*
                  Hello
                  Hello
                  Hello
                  Hello
                  ...
                  */ 
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Doch, das würde klappen. Aber dein Programm läuft so ab:
                    1. Deklaration der Funktion => 1. Aufruf => 2. Deklaration der Funktion (wirft Fehler) => (2. Aufruf der Funktion, aber so weit kommt es nicht, weil Fehler).

                    Wenn du die Funktion nur einmal deklarierst kommen keine Fehler und du kannst sie so oft aufrufen wie du möchtest.

                    Kommentar


                    • #11
                      @hausl: Danke, ich glaube das ist genau das was ich gesucht habe. Ich werde es heute Abend, wenn ich wieder Zugriff auf den Server habe ausprobieren. Danke

                      Kommentar


                      • #12
                        Hi nochmal,

                        wenn ich es so mache, wie hausl gesagt hat (
                        PHP-Code:
                        function writeHello() {
                          echo 
                        "Hello";
                        }


                        for (
                        $i 1$i <= 20$i++) {
                          
                        writeHello();

                        )
                        , führt das bei mir dazu, dass die Funktion schon einmal aufgerufen wird, bevor die Schleife ausgeführt wird. Aber sonst läuft es so wie ich es mir vorgestellt habe.

                        Kommentar


                        • #13
                          Wie soll dass denn möglich sein, hast du mal ein Beispiel dazu, vielleicht auch eine Ausgabe?

                          Kommentar


                          • #14
                            Zitat von phuck Beitrag anzeigen
                            führt das bei mir dazu, dass die Funktion schon einmal aufgerufen wird, bevor die Schleife ausgeführt wird.
                            Dann hast du im Code vorher nochmal einen einzelnen Aufruf der Funktion.
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              Zitat von lstegelitz Beitrag anzeigen
                              Dann hast du im Code vorher nochmal einen einzelnen Aufruf der Funktion.
                              Ja, hab ich nun auch gemerkt

                              Kommentar

                              Lädt...
                              X