was ist sicherer/besser ?

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

  • #31
    hi tobi und php-desaster,

    danke für eure antworten

    ein typecast - hm, also es gibt ein einschränkendes und ein erweitertes casting...
    erweitert = wenn der neue typ den alten auf jeden fall aufnehmen kann
    einschränkend = verlust von stellen oder genauigkeit
    was davon ist nun was ? :
    PHP-Code:
    $wegid= (int) $_GET['wegid'];
    //oder
    $wegidintval($_GET['wegid']); 
    und irgendwie habe ich das gefühl, daß ich etwas falsches nachgelesen habe. was ist der unterschied zwischen (int) und intval ?
    mal davon ausgehe, daß es auch mit $_POST geht ?

    Ich vermute, dass dein ID ein auto_increment Wert in der DB ist, demnach solltest Du auch prüfen, ob es sich bei der Eingabe um eine Zahl handelt.
    mir ist noch nicht ganz klar, weshalb ich überprüfen muß, ob der auto_increment-wert in der db eine zahl ist, wo ich in der db doch festgelegt habe, daß ID zb int(10) ist und ich ohnehin keinen einfluß über eine eingabe per formularfeld auf diese id-speicherung habe - eben weil es doch ein auto_increment ist. wieso muß man/ich das dann überprüfen ? oder was könnte ohne prüfung denn passieren ?

    php-desaster ich stelle fest, du bist ein gnadenloser optimist
    ich denke, teils kann ich damit etwas anfangen, teils nicht. trotzdem schon mal danke, als zusammenfassung auf jedenfall abgespeichert.
    vermutlich muß ich aber trotzdem nochmal nachfragen.
    (geht bei einem armen anfängerlein eben alles etwas langsamer)

    viele grüße, skys

    Kommentar


    • #32
      ein typecast - hm, also es gibt ein einschränkendes und ein erweitertes casting...
      erweitert = wenn der neue typ den alten auf jeden fall aufnehmen kann
      einschränkend = verlust von stellen oder genauigkeit
      was davon ist nun was ?
      In deinem Beispiel gibt es keinen Unterschied. Das erste ist ein Cast, wie du ihn auch in anderen Sprachen findest. Das zweite dagegen ist ein Funktionswrapper für diesen Cast.
      Ein Beispiel für einen Cast mit Verlust wäre von Double nach Integer, da du mindestens die Nachkommastellen verlierst!

      mir ist noch nicht ganz klar, weshalb ich überprüfen muß, ob der auto_increment-wert in der db eine zahl ist, wo ich in der db doch festgelegt habe, daß ID zb int(10) ist und ich ohnehin keinen einfluß über eine eingabe per formularfeld auf diese id-speicherung habe - eben weil es doch ein auto_increment ist. wieso muß man/ich das dann überprüfen ? oder was könnte ohne prüfung denn passieren ?
      Nein, du musst nicht den Wert in der Datenbank prüfen, sondern den Wert aus dem Formular. Du kannst auch einfach nach Integer casten, das könnte den Benutzer aber eher verwirren oder zu ungewolltem Verhalten führen. Überprüfst du vorher, ob es sich um eine Ziffer handelt, kannst du eine entsprechende Fehlermeldung ausgeben.

      php-desaster ich stelle fest, du bist ein gnadenloser optimist
      Hmm, das kann sein

      ich denke, teils kann ich damit etwas anfangen, teils nicht. trotzdem schon mal danke, als zusammenfassung auf jedenfall abgespeichert.
      vermutlich muß ich aber trotzdem nochmal nachfragen.
      (geht bei einem armen anfängerlein eben alles etwas langsamer)
      Kein Problem, dafür ist das Forum ja da!

      Kommentar


      • #33
        hallo zusammen,

        habe mich in den dateien etwas verzettelt - nun habe ich eine musterdatei und eine mustertabelle mit so wenig drin wie möglich.

        frage zum funktionswrapper (da wort für mich neu) : ist ein funktionswrapper einfach dadurch gekennzeichnet, daß wie zb hier [COLOR=blue]intval($_GET['wegid']);[/COLOR] vorne steht was gemacht wird, eine klammer kommt, und worauf es sich bezieht, ist in der klammer ?

        Nein, du musst nicht den Wert in der Datenbank prüfen, sondern den Wert aus dem Formular.
        ok, dann bin ich glaub richtig.
        dh, wenn ich die id gar nicht mehr über :
        PHP-Code:
        $eintrag "INSERT INTO amust (id, wort, zahl, zeit) 
        VALUES('', '" 
        .  sqlstr($_POST['wort']) . "',
         '" 
        .  sqlstr($_POST['zahl']) . "', '" time() . "')"
        in die db einspeise, sondern die db es selbst macht :
        PHP-Code:
        $eintrag "INSERT INTO amust (wort, zahl, zeit) 
        VALUES('" 
        .  sqlstr($_POST['wort']) . "',
         '" 
        .  sqlstr($_POST['zahl']) . "', '" time() . "')"
        dann brauche ich die id natürlich auch nicht zu prüfen.

        Überprüfst du vorher, ob es sich um eine Ziffer handelt, kannst du eine entsprechende Fehlermeldung ausgeben.
        mit den prüfungen kämpf ich noch...

        habe im moment folgenden code :
        PHP-Code:
        $wort mysql_real_escape_string($_POST['wort']);
        $zahl mysql_real_escape_string($_POST['zahl']);
        $zeit mysql_real_escape_string($_POST['zeit']);

        // mmmmmmmm Pruefungen mmmmmmmmmmmmmmmmmmmmmmm

        $zahl intval($_GET['zahl']);

        // mmmmmmmm Werte eintragen etc mmmmmmmmmmmmmmmmmm

        if ($_POST['hiddenstring'] != '')
        // wenn die post-variable nicht leer ist

        function sqlstr(&$addr)
        {
         if(isset(
        $addr)){return mysql_real_escape_string($addr);}
         return 
        "";
        }

        $eintrag "INSERT INTO amust (id, wort, zahl, zeit) 
        VALUES('', '" 
        .  sqlstr($_POST['wort']) . "',
         '" 
        .  sqlstr($_POST['zahl']) . "', '" time() . "')";

        // mmmmmmmm Pruefungen mmmmmmmmmmmmmmmmmmmmmmm

        if( !isset($_POST['wort']) )
        {
        echo 
        "Fehler bei isset (Variable nicht gesetzt)...";    // Nicht gesetzt -> Fehler
        }

        if( !
        preg_match'/[a-z]+/i'$_POST['wort'] ) )
        {
        echo 
        "Fehler bei preg_match (Wert falsch)...";    // Wert falsch -> Fehler
        echo "Bei Wort keine reine Zahl eingeben.";
        }

        $eintragen mysql_query($eintrag)or die(__LINE__ .':'mysql_error());

        } else
        // die post-variable ist leer - also formular ausgeben ! 
        ...
        // ende von else 
        bei wort eine reine zahl rein geschrieben brachte die fehlermeldung zu preg_match = ok.

        da aber insgesamt mit den prüfungen das noch nicht klappt, evtl auch besser einen neuen thread gezielt zu der neuen datei und dem prüfen aufmachen sollte ?
        *mal sehen

        sonntägliche grüße, skys
        Zuletzt geändert von skys; 02.03.2008, 20:31.

        Kommentar


        • #34
          Dein Code ist Kraut-und-Rüben. Ich empfehle dir, alles zu löschen und nochmal ganz von vorn anzufangen.

          Die Reihenfolge bei der Formularverarbeitung sollte sein:
          - prüfen ob Formular überhaupt abgeschickt wurde
          - prüfen ob alle erwarteten Werte in $_POST/$_GET vorhanden sind
          - prüfen ob alle Werte in $_POST/$_GET das gewünschte Format haben
          - Werte aus $_POST/$_GET escapen bzw. konvertieren je nach Verwendungszweck
          - Query aus den Werten zusammenbauen
          - Query abschicken

          Alle Prüfungen können negativ ausfallen. Es genügt dann nicht, nur einen netten Hinweis auszugeben, aber trotzdem mit der Formularverarbeitung fortzufahren. Du mußt die Verarbeitung abbrechen!

          Schematisch sieht das so aus:
          PHP-Code:
          if (Formular nicht abgeschickt) {
              exit;
          }
          if (
          Wert A nicht vorhanden) {
              exit;
          }
          if (
          Wert B nicht vorhanden) {
              exit;
          }
          ...
          if (
          Wert A nicht im geforderten Format) {
              exit;
          }
          if (
          Wert B nicht im geforderten Format) {
              exit;
          }
          ...
          Wert A mysql_real_escape_string(Wert A);
          Wert B intval(Wert B);
          ...
          Query "INSERT ... Wert A, Wert B ...";
          if (!
          mysql_query(Query)) {
              exit;

          Kommentar


          • #35
            hallo onemorenerd,

            danke für deine antwort und das code-beispiel
            mit dem zusammenfügen der einzelteile hapert es noch sehr, ich weiß - probiere einfach nur immer die verschiedenen möglichkeiten aus.
            jetzt mal gemäß deiner anleitung versuchen - hoffentlich klappts.

            viele grüße, skys

            Kommentar


            • #36
              murks - wiedermal auf fehlersuche bin...

              PHP-Code:
              // mmmmmmm feld ist leer mmmmmmmmmmmmmmmmmmmmmmm

              if ($_POST['wort'] = '')
              // wenn wert leer ist, dann abbruch
              {
              echo 
              "Wort-Feld ist leer";
                  exit;
              }

              if (
              $_POST['zahl'] = '')
              // wenn wert leer ist, dann abbruch
              {
              echo 
              "Zahl-Feld ist leer";
                  exit;
              }

              // mmmmmmm feldwert ist nicht im geforderten format mmmmmmmmmmmmm

              if( !isset($_POST['wort']) )
              {
              echo 
              "Fehler bei isset (Feld leer -> Variable nicht gesetzt)...";   
              // Nicht gesetzt -> Fehler
              exit;
              }

              if( !
              preg_match'/[a-z]+/i'$_POST['wort'] ) )
              {
              echo 
              "wert von Wort-Feld falsch";
              exit;    
              // Wert falsch -> Fehler
              // nehme ich das exit raus, bekomme ich die seite wenigstens angezeigt 
              }

              // mmmmmmm escapen mmmmmmmmmmmmmmmmmmmmmmmmm

              $wort mysql_real_escape_string($_POST['wort']);
              $zahl intval($_POST['zahl']);
              $zeit mysql_real_escape_string($_POST['zeit']);

              // mmmmmmmm Werte eintragen etc mmmmmmmmmmmmmmmmmm

              if ($_POST['hiddenstring'] != '')
              // wenn die post-variable nicht leer ist

              function sqlstr(&$addr)
              {
               if(isset(
              $addr)){return mysql_real_escape_string($addr);}
               return 
              "";
              }

              $eintrag "INSERT INTO amust (wort, zahl, zeit) 
              VALUES('" 
              .  sqlstr($_POST['wort']) . "',
               '" 
              .  sqlstr($_POST['zahl']) . "', '" time() . "')";   // werte einfügen

              $eintragen mysql_query($eintrag)or die(__LINE__ .':'mysql_error());

                      
              mysql_close($connect);  // datenbank schliessen
                      
              header("Location: muster.php"); // zur seite umleiten

              } else
              // die post-variable ist leer - also formular ausgeben ! 
              folgendes nicht verstehe :

              warum muß ich beim aufruf der datei schon prüfen, ob daswort-eingabefeld leer ist :
              if ($_POST['wort'] = '')
              es kann doch noch gar nichts drin sein, wenn ich die datei erst aufrufe.
              müßte die prüfung nicht erst während dem absenden statt finden (und wie müßte ich es dann machen ?)

              außerdem bekomme ich mit diesem code die meldung "wert von Wort-Feld falsch" - aber ebenfalls ja noch nicht mal zum eintragen kam.

              müßten die prüfungen nicht alle erst später kommen ?

              aber egal, weil irgendein dicker fehler muß sowieso noch drin stecken - nur wo ?
              Zuletzt geändert von skys; 02.03.2008, 14:55.

              Kommentar


              • #37
                So wird das nie was. Du hast zu wenig Ahnung, du kopierst nur wild Codeschnipsel zusammen.

                Zum Beispiel das hier:
                exit;
                header(...);

                Du weißt offenbar nicht was exit bewirkt. Obwohl es ja nicht schwer zuerraten ist.


                Oder die Funktion sqlstr() ... die du eigentlich überhaupt nicht brauchst, wenn du nur die schon escape-ten Variablen benutzen würdest.


                Ich sehe keinen Sinn darin, dir alles vorzukauen oder fertig hinzuwerfen. Suche dir ein Anfängertutorial oder kaufe ein Einsteigerbuch.

                Kommentar


                • #38
                  eben weil ich anfänger bin und es lerne und fehler mache, bin ich hier und frage. wenn du mir nicht helfen möchtest ist das dein gutes recht, keine frage.

                  übrigens weiß ich schon was exit bewirkt, hatte es nur zu spät gesehen und dann hier vergessen auch zu korrigieren (abgesehen davon, daß das nun wirklich nicht das wichtigste ist) - aber vermutlich überflüssig, so etwas zu erklären.
                  learning by doing beinhaltet nun mal das fehler machen.

                  aber umso schöner für dich, wenn du das scheinbar schon hinter dir hast

                  edit: damit andere nicht auch von dem exit-fehlerchen abgelenkt werden, korrigiert
                  Zuletzt geändert von skys; 02.03.2008, 14:56.

                  Kommentar


                  • #39
                    Ja mein Freund, da haben wir es doch: Du bist zu ungeduldig oder schlicht schlampig. Das hat mit Lernen oder Können nichts zu tun.

                    Rück deinen Code mal ordentlich ein und dann lies ihn solange immer wieder durch und beseitige die gefundenen Fehler, bis dir wirklich nichts mehr einfällt. Erst dann solltest du den Code in ein Forum posten, denn erst dann bist du auch an deine Grenzen gekommen und brauchst Hilfe.

                    Erster Tipp (ich wiederhole mich zum x-ten Mal): Variablen sollten nur definiert werden ($var = ...), wenn sie irgendwann auch benutzt werden. Ist das so bei $wort?


                    Und jetzt zeig mal, was du wirklich kannst ...

                    Kommentar


                    • #40
                      wenn dann freundin – was ich aber sehr bezweifle

                      jap, ungeduldig bin ich, das gebe ich zu – und ich habe nie behauptet, es zu können, ich bin am lernen.
                      fühl dich doch nicht durch die unwissenheit und entsprechender fragen und fehler eines anfängers angegriffen, schade um die verpulverte kostbare energie.

                      ja, ich weiß, es gibt regeln für das einrücken (bei html idr auch etwas berücksichtige), aber für so wenig code und solange ich nicht mal einfache sachen hinbekomme, lerne ich nicht die einrücke-regeln zuerst. ich habe ganz andere probleme und will erst mal weiter kommen.
                      wenn ich dann mal einiges hinbekomme oder es mal schnell finde, was so sehr wichtig ist einzurücken, daß sich andere nicht auf die füße getreten fühlen, dann kümmere ich mich auch gerne um das einrücken.
                      nur nützt mir derzeit die schönste eingerückte müll-datei nichts, nur weil sie schöner fürs auge ist – und soo unordentlich schreibe ich dann doch nicht.

                      übrigens poste ich fragen und code auch erst im forum, wenn mir nichts mehr dazu einfällt und mein google-finger lahm wird – sollte zwar klar sein, egal...

                      aber trotzdem danke !, denn abgesehen von deinen leicht aggressiven sätzen (aus welchen gründen auch immer, denn ich habe nicht die absicht hier irgendwen zu provozieren und auch nicht das gefühl, daß ich das tue) hast du mir mit dem letzten satz wirklich geholfen, wo ich nach dem fehler suchen muß.

                      Und jetzt zeig mal, was du wirklich kannst ...
                      würde ich sehr gerne, mal sehen, ob ich's finde...

                      Kommentar


                      • #41
                        Original geschrieben von skys
                        fühl dich doch nicht durch die unwissenheit und entsprechender fragen und fehler eines anfängers angegriffen, schade um die verpulverte kostbare energie.
                        Mach dir mal keine Sorgen, ich bin die Ruhe selbst.
                        ... aber für so wenig code und solange ich nicht mal einfache sachen hinbekomme, lerne ich nicht die einrücke-regeln zuerst. ich habe ganz andere probleme und will erst mal weiter kommen.
                        Ich denke dir würden deine eigenen Fehler eher ins Auge springen, wenn du deinen Code ordentlich formatieren würdest. Denn zum Teil sind es strukturelle Fehler.
                        Besorge dir einfach eine vernünftige IDE, die den Code automatisch einrückt.

                        Kommentar


                        • #42
                          ich mache mir keine sorgen um dich.
                          ich finde es nur schade, wenn manche statt einfach nur zu helfen sich auf ihr wissens-hinterteil setzen.

                          im moment verzettel ich mich mit den prüfungen aber eh und komme nicht weiter, also mal etwas anderes suchen, damit es wenigstens noch etwas produktiv wird...

                          mit dir über meine ide zu diskutieren bringt mir im moment nicht viel.
                          ich habe konkrete und vor allem andere fragen deren antworten mir weiterhelfen würden.

                          ein lehrer muß sich an das niveau der schüler anpassen können, wenn er ihnen etwas beibringen will und nicht umgekehrt - aber das ist leider keine selbstverständliche fähigkeit.

                          Kommentar


                          • #43
                            ein lehrer muß sich an das niveau der schüler anpassen können, wenn er ihnen etwas beibringen will und nicht umgekehrt
                            Wir sind hier nicht in der Schule und ich nicht dein Lehrer. Also lass bitte den Quatsch.

                            Ich rate dir, deinen Code sauber zu formatieren. Wenn du der Meinung bist, dass es nichts bringt (ohne es ausprobiert zu haben?), bitte sehr, ignoriere mich einfach.

                            Zurück zum Thema. Bist du vorwärts gekommen?

                            Kommentar


                            • #44
                              in der schule nicht, aber ich denke, es ist klar, was gemeint ist.

                              Ich rate dir, deinen Code sauber zu formatieren. Wenn du der Meinung bist, dass es nichts bringt (ohne es ausprobiert zu haben?), bitte sehr, ignoriere mich einfach.
                              für den rat danke ich dir und ignorieren tue ich dich keineswegs.
                              natürlich hast du recht, daß der code eingerückt sein sollte, die vorteile liegen auf der hand, vor allem wenn eine datei mal länger und der code komplexer wird. anfangs habe ich das auch brav gemacht, aber irgendwann wurde es mir zu blöd, weil ich ständig am code korrigieren bin und bald schneller den code wechselte als ich überhaupt hätte einrücken können.

                              bzgl ide hatte ich diverse editoren ausprobiert, aber jeder hatte einen nachteil, so daß ich dann doch wieder an einer älteren phase5-version hängen blieb.

                              weitergekommen ? jein.
                              im code überhaupt nicht bzw andere prüfungen ausprobiert - gibt ja zig möglichkeiten. aber steckt ja eh noch ein fehler drin, ergo auch nicht wirklich viel brachte außer mich zu verzetteln und noch mehr fragen zu dem gelesenen, wovon ich das meiste leider nicht umsetzen kann.
                              das ist eben die krux : mir fehlt einiges 'zwischendrin', so daß ich nicht einfach mal eben das manual oder eine funktion lesen und die dann auch entsprechend umbauen und nutzen kann. dabei wäre es sicher gar nicht so schwer.

                              dachte, ich wäre schon weiter, aber muß jetzt wohl erst meine musterdatei nochmal ganz abbauen und irgendwo weiter vorne nochmal anfangen.

                              ps :
                              dummen "1111 = 127"-fehler gefunden tinyint statt smallint genommen
                              *zu speichergeizig war*
                              Zuletzt geändert von skys; 02.03.2008, 20:51.

                              Kommentar

                              Lädt...
                              X