Onkel Schnitzel: Bin ich zu blöd fürs Affenformular?

Huhu,

nachdem ich versucht habe, mein Formular nach dem Tut von [li]http://www.php-faq.de/q/q-stil-normalform.html[/li] zu erstellen und das nicht geklappt hat, fange ich jetzt nochmal ganz von vorne an.

Ich hab also erstmal nur das reine Formular -ganz normal in HTML- mit dieser Adresse <form action="<?php echo $_SERVER['PHP_SELF']; ?>">  Wenn ich das leere Formular jetzt einfach mal absende, lande ich plötzlich auf der Startseite meines Projektes. Ich dachte eigentlich, das Formular würde sich immer wieder selbst aufrufen. (??)

Grüße,
Onkel Schnitzel

  1. Hi!

    Wie sieht die Startseite deines Projektes aus? Wie ist die HTML-Ausgabe, die das o.g. Skript ausspuckt?

    Gruß

    Martin

  2. Hi!

    Ich hab also erstmal nur das reine Formular -ganz normal in HTML- mit dieser Adresse <form action="<?php echo $_SERVER['PHP_SELF']; ?>">  Wenn ich das leere Formular jetzt einfach mal absende, lande ich plötzlich auf der Startseite meines Projektes. Ich dachte eigentlich, das Formular würde sich immer wieder selbst aufrufen. (??)

    Rufst du die betreffende Seite über eine URL mit Query-String, also z.B. index.php?seite=kontakt auf? Dieser ist nämlich nicht in $_SERVER['PHP_SELF'] enthalten, sondern nur das index.php.

    Grüße,
    Fabian St.

    --
    Meine Website: http://fabis-site.net
    --> XHTML, CSS, PHP-Formmailer, Linux
    ---------------------
    fabi@erde ~# whatis spam
    spam: nothing appropriate
    ---------------------
    Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
    1. Rufst du die betreffende Seite über eine URL mit Query-String, also z.B. index.php?seite=kontakt auf? Dieser ist nämlich nicht in $_SERVER['PHP_SELF'] enthalten, sondern nur das index.php.

      Ja, richtig. Dann erstelle ich wohl am besten eine separate Datei gaestebuch.php, oder?

      Grüße,
      Onkel Schnitzel

      1. Hi!

        Ja, richtig. Dann erstelle ich wohl am besten eine separate Datei gaestebuch.php, oder?

        Nö, musst du nicht, nimm stattdessen $_SERVER['REQUEST_URI'].

        Grüße,
        Fabian St.

        --
        Meine Website: http://fabis-site.net
        --> XHTML, CSS, PHP-Formmailer, Linux
        ---------------------
        fabi@erde ~# whatis spam
        spam: nothing appropriate
        ---------------------
        Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
        1. Nö, musst du nicht, nimm stattdessen $_SERVER['REQUEST_URI'].

          hm, ich lande trotzdem auf der index.php.

          <form action="<?php echo $_SERVER['REQUEST_URI']; ?>">

          1. Hi Onkel,

            hm, ich lande trotzdem auf der index.php.

            <form action="<?php echo $_SERVER['REQUEST_URI']; ?>">

            Wo kann man das Ganze sehen?

            MfG, Dennis.

            1. Wo kann man das Ganze sehen?

              Leider nirgendwo. Ich teste das z.Z. alles noch lokal. Mein GB-Formular hat übrigens diese URI:  http://localhost/index.php?section=gb_eintrag

              Hier die wichtigsten Dateischnipsel:

              // gb_eintrag.php

              <div id="textbox">
              <form action="<?php echo $_SERVER['REQUEST_URI']; ?>">
                 <table class="gb_tabelle" border="0" cellspacing="5" width="100%">
                   .......
                 </table>
              </form>
              </div>

              // index.php

              <?php
                error_reporting(E_ALL);
                include "frames.php";
                echo "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN\n";
                echo ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n";
                echo "<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">\n";
                echo   "<head>\n";
                echo     "<title></title>\n";
                echo     "<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\n";
                echo     "<link rel="stylesheet" type="text/css" href="optik.css" />\n";
                echo   "</head>\n";
                echo   "<body>\n";
                  ...............
                 include     "inhalt.php";
                echo   "</body>\n";
                echo "</html>\n";
              ?>

              In 'frames.php' liegt ein Array mit sämtlichen Inhalts-Dateien und 'inhalt.php' legt fest, welche Datei angezeigt wird. Funktioniert auch alles soweit. Aber bevor das Ganze zu kompliziert wird, mache ich vielleciht einfach eine separate 'gaestebuch.php' und gut is :-)

              Gruß,
              Onkel Schnitzel

              1. hi,

                // gb_eintrag.php
                <form action="<?php echo $_SERVER['REQUEST_URI']; ?>">

                // index.php
                   include     "inhalt.php";

                du hast also index.php mit dem browser angefordert, und darin dann gb_eintrag.php mit include eingebunden.

                was steht also in $_SERVER['REQUEST_URI'] ...?

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. was steht also in $_SERVER['REQUEST_URI'] ...?

                  (huch, das ist ja wie damals in der Schule :-))  hm, wahrscheinlich steht da...index.php?section=gb_eintrag. Also das selbe Ergebnis wie mit '$_SERVER['PHP_SELF']', oder nicht? Ich werd mir den Unterschied nachher mal zu Gemüte führen. Jetzt muß ich erstmal was essen.

                  Bis dahin,
                  Onkel Schnitzel

                  1. Hallo Onkel.

                    Also das selbe Ergebnis wie mit '$_SERVER['PHP_SELF']', oder nicht?

                    Nö:

                    index.php?seite=start

                    $_SERVER["REQUEST_URI"] /index.php?seite=start
                    $_SERVER["PHP_SELF"] /index.php

                    Gruß, Ashura

                    --
                    Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                    Try it: Become an Opera Lover in 30 days
                    1. Hallo Ashura,

                      index.php?seite=start

                      $_SERVER["REQUEST_URI"] /index.php?seite=start
                      $_SERVER["PHP_SELF"] /index.php

                      hab ich jetzt auch nicht ganz verstanden- ich scheine heute irgendwie mit dem Klammerbeutel gepudert zu sein- egal ;-)  Ich hab die Datei jetzt separat gespeichert und jetzt klappts auch mit $_SERVER["PHP_SELF"]

                      Gute Nacht,
                      Onkel Schnitzel

              2. yo,

                <form action="<?php echo $_SERVER['PHP_SELF']; ?>"> macht bei mir genau den gewünschten effekt auf meiner webseite. ich denke mal, dein problem wird eventuell in der index.php liegen, aber die können wir nicht einsehen.

                Ilja

          2. echo $begrueszung;

            Nö, musst du nicht, nimm stattdessen $_SERVER['REQUEST_URI'].

            hm, ich lande trotzdem auf der index.php.

            <form action="<?php echo $_SERVER['REQUEST_URI']; ?>">

            Du gibst nicht an, welche Methode (GET/POST) verwendet werden soll. In dem Fall ist GET die Default-Einstellung. Nun passiert, dass deine Formular-Daten den vorhandenen QueryString einfach überschreiben...

            Das hättest du sehen können, wenn du dir die übermittelten Daten hättest angezeigen lassen:

            echo '<pre>';
            print_r($_GET);
            print_r($_POST);

            echo "$verabschiedung $name";

  3. Hello,

    ein Beispiel dafür findest Du unter

    http://selfhtml.bitworks.de/speichern.php

    Wenn Du Anregungen hast, wie man das vereinfachen oder in mehrere Denkschritte aufteilen kann, dann poste Deine Gedanken bitte.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. ein Beispiel dafür findest Du unter

      http://selfhtml.bitworks.de/speichern.php

      Wenn Du Anregungen hast, wie man das vereinfachen oder in mehrere Denkschritte aufteilen kann, dann poste Deine Gedanken bitte.

      Schönes Script- nur steig ich da leider überhaupt nicht dahinter ;-) Die Masse an Funktionen erschlägt mich momentan einfach (ich mache ja erst seit wenigen Wochen PHP). Nichtsdestotrotz hat mir Dein Script den ein oder anderen Denkanstoß gegeben. Ich werde jetzt versuche, alles selbst zu schreiben- so einfach wie möglich. Den Feinschliff mit Funktionen usw. kann ich später immernoch machen.

      Schönen Dank,
      Onkel Schnitzel

      1. Hello,

        Schönes Script- nur steig ich da leider überhaupt nicht dahinter ;-) Die Masse an Funktionen erschlägt mich momentan einfach (ich mache ja erst seit wenigen Wochen PHP). Nichtsdestotrotz hat mir Dein Script den ein oder anderen Denkanstoß gegeben. Ich werde jetzt versuche, alles selbst zu schreiben- so einfach wie möglich. Den Feinschliff mit Funktionen usw. kann ich später immernoch machen.

        Drum sagte ich ja: Zur Erläuterung des Affenformulares schon wieder zu aufgeblasen.
        Da muss man ja noch nicht in Dateien speichern.

        Ich habe da Prinzip nochmal auf http://selfhtml.bitworks.de gezeigt.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Ich habe da Prinzip nochmal auf http://selfhtml.bitworks.de gezeigt.

          Das ist super. Hat mir echt weitergeholfen.

          Danke,
          Onkel Schnitzel

          1. Hello,

            Ich habe da Prinzip nochmal auf http://selfhtml.bitworks.de gezeigt.

            Das ist super. Hat mir echt weitergeholfen.

            Und wenn Du dann auch noch die tiefgründigeren, leider durchaus berechtigten Mängelrügen von Dedlfix durchprobiert hast, dann bist Du fit für die nächste Hürde ;-))

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Und wenn Du dann auch noch die tiefgründigeren, leider durchaus berechtigten Mängelrügen von Dedlfix durchprobiert hast, dann bist Du fit für die nächste Hürde ;-))

              Ach, ich bin jetzt schon nicht mehr fit. Bis vor einer halben Stunde bin ich gut vorwärts gekommen. Alles hat geklappt- ich konnte meine Felder ausfüllen, die wurden nach -erstmal einfachen- Bedingungen überprüft und bei Richtigkeit in meine Datenbank eingetragen. Und die Felder blieben auch immer mit den letzten Werten gefüllt- halt wies sein soll.

              Doch auf einmal, bekomme ich beim Aufrufen des Formulars in jedem Feld das hier zu sehen: <br />    Ein Zeilenumbruch? Wo kommt der denn her?  In meiner Not hab ich versucht, das mit dieser Anweisung zu beheben:

              if(isset($_POST['name'])) {
                     $name = htmlentities(stripslashes($_POST['name']));
                 }

              War natürlich nix. Im Formularfeld steht übrigens: value="<?php echo $name; ?>"

              Gruß,
              Onkel Schnitzel

              1. Hello,

                Doch auf einmal, bekomme ich beim Aufrufen des Formulars in jedem Feld das hier zu sehen: <br />    Ein Zeilenumbruch? Wo kommt der denn her?  In meiner Not hab ich versucht, das mit dieser Anweisung zu beheben:

                if(isset($_POST['name'])) {
                       $name = htmlentities(stripslashes($_POST['name']));
                   }

                War natürlich nix. Im Formularfeld steht übrigens: value="<?php echo $name; ?>"

                Da wird irgendwo ein PHP-Error stattgefunden haben, für den es eine Fehlermeldung gibt.
                Diese Fehlermeldungen enthalten auch manchmal Häkchen. Da kommt der Browser bei Eingabefeldern dann oft durcheinander.

                Um diesen Fehler zu finden, kannst Du entweder Teile des Scriptes auskommentieren, und dann nach und nach wieder in Betrieb nehmen, oder aber die Fehlermeldungen nicht auf die Standardausgabe (hier Browser) lenken, sondern in eine Datei. Di kannst Du dann in Ruhe lesen.

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Da wird irgendwo ein PHP-Error stattgefunden haben, für den es eine Fehlermeldung gibt.

                  Ja, die Variable name war nicht definiert. Seltsamerweise hatte das Ganze vorhin aber funktioniert, obwohl ich $name irgendwo definiert hatte. Naja, jetzt hab ichs erstmal so gemacht:

                  $name = "";
                     if(isset($_POST['name'])) {
                         $name = htmlentities(stripslashes($_POST['name']));
                     }

                  Auch wenn dedlfix das nicht so gut findet. Wie gesagt, der Feinschliff kommt später. Danke nochmal für Deine Hilfe und Dein Script

                  Gruß,
                  Onkel Schnitzel

                  1. Hello,

                    $name = "";
                       if(isset($_POST['name'])) {
                           $name = htmlentities(stripslashes($_POST['name']));
                       }

                    Auch wenn dedlfix das nicht so gut findet. Wie gesagt, der Feinschliff kommt später. Danke nochmal für Deine Hilfe und Dein Script

                    Ich hatte hier schon öfter einen Leitfaden für einen sauberen Scriptaufbau gegeben und das bemängelt er dann natürlich zu recht, dass ich mich in dem Beispiel nicht dran gehalten habe.

                    Wenn Du Dir das Leben vereinfachen willst, dann nimm Deine Variablen-Initialisierungen alle in einem gemeinsamen Abschnitt ganz oben im Script vor, dann kann es nicht so schnell passieren, dass Du einen Namen versehentlich doppelt verwendest. Und schreib einen Kommentar dahinter, der auch Blöde schlau macht. Dann kannst Du Deine eigenen Scripte auch noch in einem Jahr verstehen ;-))

                    Und was den Einwand mit stripslashes betrifft; das regel ich persönlich eigentlich immer durch eine einzige Funktion, die im Daten-Übernahme-Bereich des Scriptes aufgerufen wird:

                    function strip($_in)
                    {
                      if (get_magic_quotes_gpc())
                      {
                        $_in =  is_array($_in) ? array_map("strip", $_in) : stripslashes($_in);
                      }

                    return $_in;
                    }

                    Die Funktion beseitigt rekursiv die gesetzten Maskierungs-Slashes.

                    Wenn man Einfluss darauf hat, kann man auch magic_quotes_gpc für das Script, das ganze Verzeichnis oder den ganzen Virtual Host ausschalten.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
        2. Hi Tom!

          Ich habe da Prinzip nochmal auf http://selfhtml.bitworks.de gezeigt.

          Darf ich das mal ein wenig kritisieren?

          ## Wenn die Ausgabe-Variable schon als Parameter aus dem Post kam
            if(isset($_POST['text']))
            {
              $text = htmlentities(stripslashes($_POST['text']));
            }

          Du machst hier stripslashes() ohne vorher get_magic_quotes_gpc() zu befragen?
          Und was macht denn das htmlentities() hier? Wolltest du nicht intern mit Rohdaten arbeiten und die Daten erst zum Ausgabemedium hin für ebendieses anpassen?

          Wenn du das Formular im IE mit Enter absendest, wird keiner der Buttons als gedrückt ausgewertet ...[2] und die Usereingabe wird im default-Zweig von switch wieder verworfen.

          $text wird nur bedingt (if, switch) initialisiert. Noch gibt es keinen Fall, bei dem nicht mindestens eins der bedingten Programmteile, welche $text setzen, abgearbeitet wird. Du musst dann aber gut aufpassen, dass das nach späteren Weiterentwicklungen immer so bleibt...
          Oder aber statt $default gleich $text initialisieren und dann ggf. nachher durch den $_POST-Wert oder nach belieben (switch ($btn)) ersetzen.

          dedlfix

          [1] geht bei deinem Beispiel nicht, da es nur eine Textarea enthält, die das Enter abfängt
          [2] hier hab ich mir ein paar Zwischenschritte gespart

          1. Hello,

            Ich habe da Prinzip nochmal auf http://selfhtml.bitworks.de gezeigt.

            Darf ich das mal ein wenig kritisieren?

            ## Wenn die Ausgabe-Variable schon als Parameter aus dem Post kam
              if(isset($_POST['text']))
              {
                $text = htmlentities(stripslashes($_POST['text']));
              }

            Ja, das darfst/musst Du kritisieren. Das ist auch nicht (ganz) richtig, sondern nur typisch.
            Ich suche noch nach einer Form der Erklärung, die möglichst allgemeingültig ist, und trotzdem nicht aufgeblasen mit allen (eigentlich) notwendigen Randbedinungen und Überprüfungen. Dann versteht es nämlich kein Anfänger mehr. Selbstverständlich muss man dann auch nach und nach alle Fallstricke erklären.

            Ich wollte zusammen mit Dennis ein PHP-Doku- bzw. Tutorialsystem aufbauen, dass einem ermöglicht, mit wenigen Schritten ein Problem zu erörtern, eine oder mehrere Lösungswege vorzustellen, diese zu dokumentieren und zu kommentieren und auch Ergänzungen durch Dritte zu ermöglichen.

            Grundproblem ist immer noch, eine einheitliche Systemplattform zu definieren und diese auch für einen Anfänger einstellbar zu machen.

            Und was macht denn das htmlentities() hier? Wolltest du nicht intern mit Rohdaten arbeiten und die Daten erst zum Ausgabemedium hin für ebendieses anpassen?

            Das ist nur halb wahr, da mit den Daten nicht "gearbeitet" wird. Allerdings habe ich es nicht gesondert kenntlich gemacht. Aber prinzipiell hast Du auch hier Recht.

            Wenn du das Formular im IE mit Enter absendest, wird keiner der Buttons als gedrückt ausgewertet ...[2] und die Usereingabe wird im default-Zweig von switch wieder verworfen.

            Pech gehabt ;-))

            Mal ernsthaft: Das sind alles wichtige Anmerkungen. Wo bringe ich Di nun unter?
            Wie steige ich ein in das einfachste Affenformular, das vorstellbar ist und wie baue ich es dann nach und nach auf zu einem "Profi-Affen"-Formular? *gg*

            $text wird nur bedingt (if, switch) initialisiert. Noch gibt es keinen Fall, bei dem nicht mindestens eins der bedingten Programmteile, welche $text setzen, abgearbeitet wird. Du musst dann aber gut aufpassen, dass das nach späteren Weiterentwicklungen immer so bleibt...

            Das ist die Krux mit den Schnellschüssen.
            Ich habe heute Morgen (so gegen 4:30) nicht mehr schlafen können und im Forum gelesen.
            Da kam mir dann in den Sinn, das "mal eben schnell" zu schreiben.

            Also lass und mal die Kuh vom Eis holen.
            Einen Ochsen hab ich ja auch noch gebaut bei Eddi. Der hat mich wohl falsch verstanden... (hoffe ich jedenfalls)

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. re

              Mal ernsthaft: Das sind alles wichtige Anmerkungen. Wo bringe ich die nun unter?

              Für das $text-Initialisierungs-Problem hab ich ja schon einen Vorschlag gemacht.

              stripslashes() würde ich als Fußnote oder in der Rubrik "Weitere Stolperstellen" aufführen. Das Problem tritt ja nicht überall(/ bei allen Hostern) auf. Als Lösung würde ich eine Konfigurationsänderung oder die Verwendung einer einmaligen Behandlung am Script-Anfang vorschlagen.

                
              function stripslashes_array(&$var) {  
                if (is_array($var))  
                  foreach ($var as $key => $value)  
                    stripslashes_array($var[$key]);  
                else  
                  $var = stripslashes($var);  
              }  
                
              if (get_magic_quotes_gpc()) {  
                stripslashes_array($_GET);  
                stripslashes_array($_POST);  
                stripslashes_array($_COOKIE);  
              }  
              
              

              Die Ausgabe würde ich einfach so darstellen:

              <input ... value="<?php echo htmlspecialchars($value) ?>">

              Das sollte für ein einfaches Affenformular reichen. Der Profi nimmt dann sicher sowieso Templates.

              dedlfix

    2. Hallo Tom,

      ein Beispiel dafür findest Du unter http://selfhtml.bitworks.de/speichern.php

      Das Script arbeitet leider nicht korrekt unter Apache 2.0.53 (MPM worker; PHP als Handler 5.0.4)

      Wenn Du Anregungen hast, wie man das vereinfachen oder in mehrere Denkschritte aufteilen kann, dann poste Deine Gedanken bitte.

      Löse es mit Semaphoren!

      Gruß aus Berlin!
      eddi

      1. Hello,

        ein Beispiel dafür findest Du unter http://selfhtml.bitworks.de/speichern.php

        Das Script arbeitet leider nicht korrekt unter

        Wenn Du Anregungen hast, wie man das vereinfachen oder in mehrere Denkschritte aufteilen kann, dann poste Deine Gedanken bitte.

        Löse es mit Semaphoren!

        flock() arbeitet mit Semaphoren. Darum sollte ich mich als Programmierer nicht kümmern müssen.
        Semaphore sind immer unterste Programmschublade, ganz dicht am Assembler. In einer Hochsprache muss man daher schon sehr genau wissen, was die alles (nicht) macht, wenn man sie selber einsetzen will. Sonst kann es passieren, dass in einer Applikation alles dreimal geregelt wird und sich dann vielleicht gegenseitig stört.

        Was also bitte funktioniert nicht, was konntest Du feststellen? und wieso gerade unter
        "Apache 2.0.53 (MPM worker; PHP als Handler 5.0.4)"
        Was ist da was und wozu ist es da?

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hallo Tom,

          flock() arbeitet mit Semaphoren. Darum sollte ich mich als Programmierer nicht kümmern müssen.
          Semaphore sind immer unterste Programmschublade, ganz dicht am Assembler. In einer Hochsprache muss man daher schon sehr genau wissen, was die alles (nicht) macht, wenn man sie selber einsetzen will. Sonst kann es passieren, dass in einer Applikation alles dreimal geregelt wird und sich dann vielleicht gegenseitig stört.

          Dann fühle ich mich jetzt belehrt und bin froh zu sehen, daß Du gar keine Hilfe benötigst, wenn die "unterste Programmschublade" für Dich nichts ist, um ein nicht sauber arbeitendes Script(, das nebenbei bemerkt vor Warnmeldungen nur so strotz,) zum laufen zu bringen.

          Was also bitte funktioniert nicht, was konntest Du feststellen?

          "Das probier mal schön selber aus"

          und wieso gerade unter

          RTFM!

          "Apache 2.0.53 (MPM worker; PHP als Handler 5.0.4)"

          |       |     |     |     |       |        |
               1       2     3     4     5       6        7

          Was ist da was             und  wozu ist es da?

          1.) Serversoftware             ->   zum Servieren von Inhalten
          2.) Softwareversion            ->   zur Info für Dich zum nachstellen
          3.) Multi-Processing-Module    ->   zum Anheben der Skalierbarkeit
          4.) getestetes MPM             ->         -||-
          5.) heißgeliebte Scriptsprache ->   zum Erstellen dynamischer Inhalte
          6.) getestet als Modul         ->   zur Info für Dich zum nachstellen
          7.) Softwareversion            ->         -||-

          Ich habe Dir die Frage mal so beantwortet, als hättest Du sie ernst gemeint...
          Was ich noch vergessen hatte zu erwähnen: Es ist auf Linux getestet worden.

          Mit so einer dämlichen Reaktion auf ausdrücklich erbetene Verbesserungsvorschläge hätte ich von _Dir_ nicht erwartet! (bin stocksauer)

          Gruß aus Berlin!
          eddi

          1. Hello,

            Was also bitte funktioniert nicht, was konntest Du feststellen?

            Ich habe Dir die Frage mal so beantwortet, als hättest Du sie ernst gemeint...
            Was ich noch vergessen hatte zu erwähnen: Es ist auf Linux getestet worden.

            Mit so einer dämlichen Reaktion auf ausdrücklich erbetene Verbesserungsvorschläge hätte ich von _Dir_ nicht erwartet! (bin stocksauer)

            Versteh ich nicht. Ich habe doch auf Deutsch um Aufschluss gebeten, oder?
            Und da ich nicht direkt auf den RAM (als shared Memory) zugreife, sehe ich auch keine Veranlassung, selber Semaphore einzuführen. Das IST Sache des Betriebssystems, dessen Funktionen PHP für flock() auch nutzt. Nur wenn ich ans OS etwas dranstricke, was noch nicht funktionell durchkonzipiert ist, muss ich auf die Ebene der selbstgebauten Merker und deren Funktionen zurückgehen.

            Wenn ich da jetzt irgendwas falsch verstanden habe, könntest Du es mir doch ganz sachlich erklären. Und was PHP mit einer ACCESS-Datenbank zu tun hat, ist mir auch nicht einsichtig.

            Ich weiß jetzt jedenfalls immer noch nicht, was es zu bemängeln gibt?
            Welche Fehlermeldungen kommen denn?
            Auf meinen sämtlichen Testservern läuft das Script einwandfrei.
            Ich kann also nicht nachvollziehen, wo es kneift.

            Geh bitte nochmal in Dich und muckel nicht rum.
            Schließlich lesen hier Andere Interessierte mit, die (später) nicht mehr selber nachfragen können. Also sollten wir das jetzt zuende bringen.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Re:

              Scriptmeldungen bei error_reporting(2047); und einem GET-Request:

              Notice: Undefined index: data in ~/speichern.php on line 177
              Notice: Use of undefined constant show_html - assumed 'show_html' in ~/speichern.php on line 233
              Notice: Undefined variable: filedata in ~/speichern.php on line 256
              Notice: Undefined variable: filedata in ~/speichern.php on line 257
              Notice: Undefined variable: filedata in ~/speichern.php on line 258
              Notice: Uninitialized string offset:  0 in ~/speichern.php on line 264
              Notice: Uninitialized string offset:  0 in ~/speichern.php on line 267
              Notice: Uninitialized string offset:  0 in ~/speichern.php on line 270

              Nach Anlegen der mit $filename und $lockfile benannten Datein sieht es immernoch meit einem GET-Request nun so aus:

              Notice: Undefined index: data in ~/speichern.php on line 177
              Notice: unserialize() [function.unserialize]: Error at offset 0 of 2 bytes in ~/speichern.php on line 161
              Notice: Undefined index: btn in ~/speichern.php on line 203
              Notice: Undefined index: btn in ~/speichern.php on line 209
              Notice: Undefined index: data in ~/speichern.php on line 217
              Notice: Use of undefined constant show_html - assumed 'show_html' in ~/speichern.php on line 233

              Mit einem POST-Request über das Formular:

              Notice: Undefined index: download in ~/speichern.php on line 203
              Notice: Use of undefined constant show_html - assumed 'show_html' in ~/speichern.php on line 233
              Notice: Undefined variable: meldung in ~/speichern.php on line 254

              Also keine Warnung. Entschuldige - mein Fehler!

              Als überaus ärgerlich habe ich auch den Fehler aus Zeile 298 <form action="/speichern.php" method="post"> emfpunden. Solche Flüchtigkeitsfehler wie auch show_html statt $show_html müssen in einem über ein halbes Jahr propagiertem Script nun wirklich nicht sein.

              Was also bitte funktioniert nicht, was konntest Du feststellen?
              Ich habe Dir die Frage mal so beantwortet, als hättest Du sie ernst gemeint...
              Was ich noch vergessen hatte zu erwähnen: Es ist auf Linux getestet worden.

              Mit so einer dämlichen Reaktion auf ausdrücklich erbetene Verbesserungsvorschläge hätte ich von _Dir_ nicht erwartet! (bin stocksauer)

              Man kann sich auch so seine Wahrheit zusammenkopieren

              Versteh ich nicht. Ich habe doch auf Deutsch um Aufschluss gebeten, oder?

              Den hatte ich Dir auf dämliche Deine Frage -was da was sei- auch gegeben, um Dir alle Möglichkeiten, ein gleiches Testsystem zu erstellen, mitzuteilen.

              Und da ich nicht direkt auf den RAM (als shared Memory) zugreife, sehe ich auch keine Veranlassung, selber Semaphore einzuführen.

              Schlichterdings funktioniert das Script nicht, das könntest Du schnell selbst testen. Für mich zumindest wäre dies hinreichender Grund eine Veranlassung zu sehen, über Semaphorenhandling zum Blocken der Speicherdatei zumindest nachzudenken.

              Das IST Sache des Betriebssystems, dessen Funktionen PHP für flock() auch nutzt.

              Ich hatte Dir nicht ohne Grund "RTFM" geschrieben. Die Dokumentation in Deutsch und Englisch sind sich in diesem mal Punkt erstaunlich einig:

              Bei einigen Betriebssystemen ist flock() auf dem
                   Prozesslevel implementiert. Wenn Sie ein multi-
                   threaded Server API wie ISAPI benutzen können
                   Sie sich nicht auf flock()  verlassen, um Datei-
                   en vor anderen PHP-Skripten zu schützen, welche
                   in parallelen Threads der gleichen Server-Instanz
                   laufen!

              On some operating systems flock() is implemented
                   at the process level. When using a multithreaded
                   server API like ISAPI you may not be able to rely
                   on flock() to protect files against other PHP
                   scripts running in parallel threads of the same
                   server instance!

              Nur wenn ich ans OS etwas dranstricke, was noch nicht funktionell durchkonzipiert ist, muss ich auf die Ebene der selbstgebauten Merker und deren Funktionen zurückgehen.

              Erkläre Dich bitte! Was meinst Du mit diesem Wort? Nach meinem Test redest Du hier anscheined von flock(), da Semaphoren im Manual nicht als experimentell beschreiben und nach ersten Test von mir die Funktionalität sichern, wo flock() in _nicht funktioneller Konzeption_ verfehlt.

              Wenn ich da jetzt irgendwas falsch verstanden habe, könntest Du es mir doch ganz sachlich erklären. Und was PHP mit einer ACCESS-Datenbank zu tun hat, ist mir auch nicht einsichtig.

              Nichts - aber auch rein gar nichts; und ich bin mir sicher, Du weißt genau was gemeint ist.

              Ich weiß jetzt jedenfalls immer noch nicht, was es zu bemängeln gibt?

              Das Script arbeitet unter "Apache 2.0.53 (MPM worker; PHP als Handler 5.0.4)" auf Linux nicht korrekt. Aus der Passage des Scriptes...

              Wenn kein ordnungsgemäßes Locking programmiert wurde, wird die

              Zählerdatei nach dem Versuch zerstört sein, oder zumindest

              mit einem erheblichen Fehler gezählt haben

              ...entnehme ich, das der Zweck ein ordnungsgemäßes Locking realisieren soll. Könnte der empfundene Mangel des "nicht korrekt arbeites" aus dem Verfehlen dieses Zweckes (ansich selbstredend) herrühren?

              Welche Fehlermeldungen kommen denn?

              Keine.

              Auf meinen sämtlichen Testservern läuft das Script einwandfrei.

              Diese laufen mit dem Prozessmodul worker?

              Ich kann also nicht nachvollziehen, wo es kneift.

              Das Script zeichnet sage und schreibe 946 Zugriffe beim Test mit "ab -n 1000 -c 10 [Resource]" und 245 beim Test mit "ab -n 1000 -c 100 [Resource]" auf; und das kneift dann schon!

              Gruß aus Berlin!
              eddi

              1. Hello Eddi,

                dazu komme ich erst am Wochenende.

                Das muss wohl mal grundsätzlich untersucht werden.
                Jedenfalls was das Script urprünglich nicht dazu gedacht, Sicherheitslücken zu propagieren. Allerdings war es auch nicht dazu gedacht, auf speziellen Serverkonfigurationen zu laufen, sondern auf "normalen". Wenn Deine Konfiguration inzwischen die allgemein übliche ist, dann geh ich doch lieber wandern bei dem schönen Wetter.

                Für Kunden wärs dann was anderes, da muss man sich leider auch manchmal anmotzen lassen.

                Alternativ könntest Du ja mal einen Gegenvorschlag machen, der auf jedem möglichen System läuft, und ich teste dann mal ;-))

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Re:

                  Das muss wohl mal grundsätzlich untersucht werden.

                  Je nach Lage (Safe-Mode/SAPI/...) scheint mir ein gefälschter Aufruf (also ein Aufruf eines nicht mal existie Moduls) mit dl() durch die Warnmeldung...

                  Warning: dl() [function.dl]: Not supported in multithreaded Web servers - use extension=susi.so in your php.ini in ~/speichern.php on line ~

                  hinreichend eindeutig zu sein, um festzustellen, daß es sich um ein multithreaded Server handelt. Dabei ist besonders nützlich, das diese Warnung unabhängig der Einstellungen von enable_dl ausgegeben wird.

                  Ich erinnere mich, daß Du dort über track_errors etwas extrem nützliches entwickelt hattest, um Handling nach den Konfigurationen (ich glaube damals ging es um Versionen) zu betreiben. Am Wochenende werde ich sicher auch Zeit finden, einen durchdachten Lösungsweg über Semaphoren zu entwerfen und anzutesten. Schreib mir bitte eine Mail, denn ich finde das Script ansich sehr gut - und es wäre schade, wenn es an solchen grundsätzlichen Sachen scheitern würde.

                  Jedenfalls was das Script urprünglich nicht dazu gedacht, Sicherheitslücken zu propagieren.

                  Das will ich auch so nicht gesagt haben!

                  Allerdings war es auch nicht dazu gedacht, auf speziellen Serverkonfigurationen zu laufen, sondern auf "normalen".

                  Es ist richtig, ohne Angabe des MPMs ist der Standard beim Kompilieren immer noch prefork.

                  Wenn Deine Konfiguration inzwischen die allgemein übliche ist, dann geh ich doch lieber wandern bei dem schönen Wetter.

                  Das ist sie sicher _noch_ nicht(, vielleicht sogar nie). Aber so spreziell, wie Du meinst, ist worker nun schon lange nicht mehr und die Idee von Threads statt eigener Prozesse ist für mich seit einigen Monaten zumindest so verlockend gewesen, meine Programmierung in den Testumgebungen auf worker umzustellen.
                  Die Version 2.0.x des Apachen ist nun wirklich nicht erst seit gestern zum Herunterladen verfügbar, 2.1.x steht in den Startlöchern und es bleibt abzuwarten, ob die Entwicklung der Versionen 1.x nicht bald eingestellt wird und man sich dann nicht mehr nur in der Gestaltung von Dokumenten verschiedenen Clients gegenüber sieht, sondern auch in der Programmierung übergreifende Lösungen wird finden müssen.

                  Wie oben auch angedeutet, sind mir bis jetzt gravirende Dinge aufgefallen, die ich mit einem Wissen noch nicht abklären kann, die worker mit sich bringt und einen maßenweisen Einsatz derzeit in Frage stellen.

                  Alternativ könntest Du ja mal einen Gegenvorschlag machen, der auf jedem möglichen System läuft, und ich teste dann mal ;-))

                  Ist versprochen und machen wir so (mail-de Dich mal am Wochenende). Nur in aller kürze: Im Moment halte ich sogar einen ganz üblen Trick für den aussichtsreichsten, dem Server selbst das Speichern in Form seiner Logdatein von Daten zu überlassen ;)

                  Gruß aus Berlin!
                  eddi

                  1. Hello,

                    [...]

                    ich befürchte, dass Du da in die Multithreading-Geschichte so tief eingestiegen bist, dass ich erstmal hinterherkommen muss. Schaun wir also mal.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau