Ankündigung

Einklappen
Keine Ankündigung bisher.

Was bedeutet '".$Variable."' ?

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

  • Was bedeutet '".$Variable."' ?

    Ich wusste leider nicht, wonach ich hier suchen sollte da es sich ja nicht um eine Funktion handelt. Bei der Syntax hab ich nichts gefunden

    was hat die Schreibweise mit den Punkten nun zu bedeuten?

    Z.B. bei if(UserName='".$name."')


  • #2
    So wie es da steht, ist es kompletter Quatsch, der zu einem parse error führt.

    Zu den Punkten: http://php.net/language.operators.string
    (aber auch der Teil ist -wie er dasteht- Quatsch mit Soße)

    Kommentar


    • #3
      naja das mit dem if war blödsinn, aber sowas hier funktioniert:

      SELECT xxx FROM yyy WHERE UserName='".$name."' AND ......

      Und aus der Zeichenketten-Operation werd ich da ned schlau

      Kommentar


      • #4
        PHP-Code:
        <?php $query "SELECT xxx FROM yyy WHERE UserName='".$name."' AND ...... "?>
        das sind drei Zeichenketten, die miteinander verknüpft werden.
        Zuerst das Zeichenkettenliteral SELECT xxx FROM yyy WHERE UserName='
        dann die Variable $name
        und dann wieder ein Literal, ' AND ......

        Mal angenommen $name ist blub, dann entsteht aus den Verknüpfungen die Zeichenkette
        SELECT xxx FROM yyy WHERE UserName='blub' AND .....

        Kommentar


        • #5
          hm, und einfach nur ..... WHERE UserName='$name' ..... würde nicht funktionieren?

          Kommentar


          • #6
            Zitat von saibot
            hm, und einfach nur ..... WHERE UserName='$name' ..... würde nicht funktionieren?
            Wahrscheinlich schon
            Ich machs immer so:
            PHP-Code:
            <?php
            $strQuatsch 
            "BlaBla = {$varTest} blblblbl";
            ?>

            Kommentar


            • #7
              Es gibt immer den persönlichen Stil beim Coden; der ein macht's, die andere so.


              siehe auch: http://php.net/language.types.string

              Kommentar


              • #8
                ok, danke schonmal.

                Jetzt noch ne Frage zu einem Beispiel aus dem PHP Handbuch.
                Da steht:

                PHP-Code:
                <?php
                /**
                 * Variable für sichere Verwendung quotieren
                 */
                function quote_smart($value)
                {
                   
                // stripslashes, falls nötig
                   
                if (get_magic_quotes_gpc()) {
                       
                $value stripslashes($value);
                   }

                   
                // quotieren, falls kein integer
                   
                if (!is_int($value)) {
                       
                $value "'" mysql_real_escape_string($value) . "'";
                   }

                   return 
                $value;
                }

                // verbinden
                $link mysql_connect('mysql_host''mysql_user''mysql_password')
                   OR die(
                mysql_error());

                // sichere Anfrage formulieren
                $query sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
                           
                quote_smart($_POST['username']),
                           
                quote_smart($_POST['password']));

                mysql_query($query);

                ?>

                Wenn jetzt der Benutzer aber zum Beispiel eine Zahlenkombination eingibt, wird die dann normalerweise nicht automatisch bei $_POST als String erkannt?
                Ich versteh den Sinn nicht, warum abgefragt wird ob es sich um einen Int handelt oder nicht...dürfte der normalerweise garnicht vorkommen?
                Und wenn es ein Int wäre, dann würde er ja nicht per '".$intwert."' in den Query-String eingebunden werden, oder?

                Kommentar


                • #9
                  Ich selbst trenne Strings immer von Variablen.

                  Kommentar


                  • #10
                    Ja, per POST übertragene Parameter landen immer als Zeichenketten in $_POST.
                    So wie die Funktion dort angewendet wird, greift der !is_int()-Part immer.
                    Aber dieses quote_smart könnte auch mit anderen Parametern aufgerufen werden ...könnte.

                    Aber sehr schön, Du denkst also mit beim Lesen des Handbuchs.

                    Kommentar


                    • #11
                      und wegen dem Strip_slashes....das bräucht ich doch nicht abfragen, wenn ich im voraus weiss dass ich magic_quotes_gpc nicht aktiviert habe.
                      Es müsste doch am einfachsten sein, wenn ich einfach alle Eingaben die per $_POST ankommen erstmal mit mysql_real_escape_string() bearbeite, ohne irgendwelche Abfragen.

                      mysql_real_escape_string() UND magic_quotes_gpc() auf einmal zu verwenden ist doch auch blödsinn, oder?

                      Kommentar


                      • #12
                        mysql_real_escape_string() UND magic_quotes_gpc() auf einmal zu verwenden ist doch auch blödsinn, oder?
                        Ja.

                        Kommentar


                        • #13
                          nochmal was:

                          Wenn ich ein Passwort mit $passw=md5($passw) verschlüssle und dann ein Query mache mit sprintf("UPDATE xxx SET Pass=%s", $passw);

                          kommt eine Fehlermeldung
                          Unknown column '098f6bcd4621d373cade4e832627b4f6' in 'field list'

                          Das md5 liefert allerdings auch eine Hex-Zahl zurück. Wenn ich allerdings %x schreibe statt %s, dann landet eine Zweistellige Zahl in meiner Datenbank und nicht der gewollte 32-Zeichen-Wert.
                          Wie muss ich das denn machen?

                          Kommentar


                          • #14
                            Wenn Du es wirklich als Zahl speichern willst, musst Du für mysql ein 0x vor eine Hexzahl schreiben.
                            Vermutlich speicherst Du den Wert aber als Zeichenkette und als solche sollte sie dann auch transportiert werden und daher mit ' markiert werden.

                            mysql_real_escape_string() UND magic_quotes_gpc() auf einmal zu verwenden ist doch auch blödsinn, oder?
                            die beiden Funktionen haben kaum etwas miteinander zu tun. magic_quotes_gpc() liefert nur zurück, ob php von sich aus in http-Parametern bestimmte Zeichen maskiert. Der Mechanismus selbst ist so ungefähr das Breitbandantibiotikum unter den Sicherungsmaßnahmen. Es tötet vieles ab, aber wenn es nicht ausreicht, bewirkt es mehr Schaden als Nutzen und stumpft ab.
                            Du willst Zeichenketten für eine bestimmte mysql-Aktion vorbereiten und dafür ist mysql_real_escape_string() das spezialisierte Werkzeug. Da magic_quotes schon einen Teil bearbeitet/verhuntzt hat, muss das ersteinmal wieder rückgängig gemacht werden, bevor mysql_real_escape_string richtig arbeiten kann.

                            Kommentar


                            • #15
                              super, danke

                              Passw geht jetzt

                              und da ich die magic_quotes nirgends eingeschalten hab, geh ich mal davon aus dass ich dann nicht jedesmal prüfen muss und einfach mysql_real_escape_string verwenden kann?!

                              aber um zu verhindern, dass html-Tags ausgeführt werden, muss ich noch htmlentities() oder strip_tags() verwenden, seh ich das richtig?
                              Was muss ich dann zuerst machen?

                              Wenn ich zuerst htmlentities und danach mysql_real_escape_string anwende, kommt am Ende nur der Name der variable raus

                              Kommentar

                              Lädt...
                              X