printf() macht Probleme

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

  • printf() macht Probleme

    Hi,

    ich lasse die Daten, die ich aus einer DB ausgelesen habe, in einer Tabelle ausgeben.

    Nun mein Prob:
    Solange maximal 179 Treffer gefunden werden, funktioniert es auch anstandslos.
    Aber ab 180 Treffer kommt die bekannte Meldung "printf(): too few arguments in ...".

    So sieht der Code aus:
    PHP-Code:
    $sql "SELECT ingredients_id, ingredients_name FROM ingredients_name WHERE language='de' ORDER BY ingredients_name LIMIT 0,180";
    $query mysql_query($sql);
    while (
    $result mysql_fetch_array($query)) {
        
    $line++;
        
    printf ("<tr class=\"row%s\">\n
                <td width=\"20\" class=\"Verd11B\">" 
    $line "</td>\n
                <td class=\"Verd11\">" 
    $result[ingredients_name] . "</td>\n
                <td width=\"20\" class=\"Verd11\" align=\"center\">
                <a href=\"fr_main.php?subject=" 
    $subject "&action=detail&iid=" $result[ingredients_id] . "\">
                <img src=\"../../img/buttons/button_select.png\" width=\"14\" height=\"13\" alt=\"" 
    A_INGREDIENTS_DETAIL "\" border=\"0\">
                </a></td>\n
                <td width=\"20\" class=\"Verd11\" align=\"center\">
                <img src=\"../../img/buttons/button_edit.png\" width=\"12\" height=\"13\" alt=\"" 
    A_INGREDIENTS_EDIT "\" border=\"0\">
                </td>\n
                <td width=\"20\" class=\"Verd11\" align=\"center\"><a href=\"fr_main.php?subject=" 
    $subject "&action=" $action "&UserDrop=Yes\">
                <img src=\"../../img/buttons/button_drop.png\" width=\"11\" height=\"13\" alt=\"" 
    A_INGREDIENTS_DROP "\" border=\"0\">
                </a>
                </td>
                </tr>"
    $line 2);

    Habe ich da irgendwo einen Fehler drin?
    Ich habe schon fast alles probiert, bin aber so langsam mit meinem Latein am Ende.

    Danke für eure Hilfe!

    Greetz
    mrwhorf
    if ($getraenk=="kein kaffee mehr da" && $verlangen=="gross") { $arbeitsmoral="im keller"; }

  • #2
    was passiert bei 170?

    Kommentar


    • #3
      Bis zum Datensatz #179 läuft seltsamerweise alles normal.
      Die Meldung kommt eben erst, sobald 180 oder mehr Datensätze gefunden werden.
      Und das verstehe ich nun überhaupt nicht!
      if ($getraenk=="kein kaffee mehr da" && $verlangen=="gross") { $arbeitsmoral="im keller"; }

      Kommentar


      • #4
        hmm... da muss ich wohl auch was übersehen. warum nutzt du printf?

        Kommentar


        • #5
          versuche entweder das ganze mit
          Code:
          echo
          oder eine weitere fehlerquelle kann die zeitl. beschränkung der ausführzeit von scripten sein (standard 30 sek.). Ich glaube mit socket_set_timeout() müsstest du die Zeitspanne verlängern können.
          vielleicht funzt es ja dann
          ~Micro$oft®-Gegner~

          Kommentar


          • #6
            Das printf() benutze ich, um die Zeilen abwechselnd in verschiedenen Farben darzustellen.

            Für die Zeile: <tr class=\"row%s\">
            Und als Argument: $line % 2

            @microsoftgegner
            Mit echo bekomme ich die Zeilen allerdings leider nicht in verschiedenen Farben angzeigt.
            An der Laufzeit kann es auch nicht liegen, da das ganze lokal läuft und das Ergebnis innerhalb von 2 Sekunden da ist.
            Zuletzt geändert von mrwhorf; 12.09.2003, 15:49.
            if ($getraenk=="kein kaffee mehr da" && $verlangen=="gross") { $arbeitsmoral="im keller"; }

            Kommentar


            • #7
              ich denke/hoffe mal printf ist nicht grundlos eingesetzt worden...

              oder eine weitere fehlerquelle kann die zeitl. beschränkung der ausführzeit von scripten sein (standard 30 sek.). Ich glaube mit socket_set_timeout() müsstest du die Zeitspanne verlängern können.
              Das wird mit sicherheit anders angezeigt!

              Kommentar


              • #8
                Das Seltsame ist ja, dass die Meldung erst kommt, wenn mehr als 179 Treffer gefunden werden.

                Wenn ich das LIMIT auf 170 oder einen beliebigen niedrigeren Wert setze, funktioniert seltsamerweise alles.
                if ($getraenk=="kein kaffee mehr da" && $verlangen=="gross") { $arbeitsmoral="im keller"; }

                Kommentar


                • #9
                  dann mach mal

                  LIMIT 10, 180 oder sowas...

                  EDIT:
                  kann da jetzt keinen fehler sehen. frage mich nur, warum du das mit printf() machst. ich glaube das ist für sowas nicht das schnellste.

                  Kommentar


                  • #10
                    Das nächste Phänomen!

                    Wenn ich den Startwert für das LIMIT höher als 9 setze, kommt wieder die Fehlermeldung, unabhängig vom zweiten Wert.

                    Um Tabellenzeilen abwechselnd farbig darstellen zu können, ist mir jetzt nur diese Möglichkeit bekannt.
                    Gibt's noch andere? Vielleicht elegantere?
                    Bin da für alles offen.
                    Das würde dann vielleicht auch mein Prob beheben.

                    Korrektur:
                    Wird der Startwert von LIMIT auf 10 gesetzt, kann ich als zweiten Wert nur noch max. 169 angeben. Bei einem Startwert von 20 nur noch 159, Startwert 30 => 149, usw.
                    Sodass beide Werte in der Summe 179 nicht überschreiten dürfen.

                    Kann es vielleicht sein, dass ich da an einem kleinen Bug scheitere?

                    Mein System:
                    RedHat 9.0
                    Apache 2.0
                    PHP 4.2.2
                    MySQL 3.23.54
                    Zuletzt geändert von mrwhorf; 12.09.2003, 16:40.
                    if ($getraenk=="kein kaffee mehr da" && $verlangen=="gross") { $arbeitsmoral="im keller"; }

                    Kommentar


                    • #11
                      taucht vielleicht irgendwo in deinen datensätzen in %-zeichen auf?

                      da du die daten direkt in den formatstring von printf einfügst, müsste es dies dann m.e. als weiteren parameter betrachten.


                      btw: warum brauchst du dafür überhaupt prinftf? ein einfaches echo sollte doch ein wert der zwischen 0 und 1 alterniert ebenso gut ausgeben können,
                      PHP-Code:
                      $line++;
                      $line $line 2;
                      echo 
                      "<tr class=\"row".$line."\">\n"
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        @wahsaga

                        Ein %-Zeichen in den Datensätzen scheidet definitiv aus. Daran kann es also nicht liegen.

                        Die Ausgabe mit "echo" werde ich gleich mal testen.

                        Ausserdem habe ich das Phänomen entdeckt, dass die Summe von Startwert und Anzahl der Treffer in der LIMIT-Anweisung 179 nicht übersteigen darf, sonst kommt die Meldung mit "printf(): too..."

                        Das Problem wird sich wohl eh beheben. wenn ich eine Blätterfunktion einbaue und auf jeder Seite nur n Datensätze anzeige.
                        Alle Datensätze auf einer Seite ist IMHO sowieso keine gute Lösung.

                        Ich bin auf dieses Problem auch nur zufällig gestossen und wollte wissen ob ich da irgendwo einen Fehler gemacht habe.
                        Ansonsten hätte es mich ewig genervt, nicht zu wissen, ob da evtl. ein Fehler meinerseits drin ist.

                        Edit:
                        Dank an wahsaga!!!
                        Die Ausgabe mit "echo" funzt prima und es kann jetzt auch keine Fehlermeldung wegen printf() mehr kommen.


                        Trotzdem würde es mich immer noch interessieren, ob das ein Bug ist.
                        Zuletzt geändert von mrwhorf; 12.09.2003, 16:57.
                        if ($getraenk=="kein kaffee mehr da" && $verlangen=="gross") { $arbeitsmoral="im keller"; }

                        Kommentar

                        Lädt...
                        X