+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 15 von 18

Thema: Unterschied zwischen =, == und ===

  1. #1
    TP-Supporter timedance123 macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    481

    Unterschied zwischen =, == und ===

    Hallo!

    1. ich glaub ich würdd gar nix mehr können wenn ich hier nicht fragen kann+ggg+

    also wie man aus dem Titel ja entnehmen kann was ist der genaue Unterschied dieser Operatoren?

    ich frage deswegen, weil ich eine Datenbankabfrage starte und wenn sie geglückt ist gibt sie den wert 1 (=true) zurück

    wenn ich dass jetzt in eine IF-abfrage hau also -->query===1 dann geht das nicht weil die bedingung false ist!wenn ich allerdings query==1 eingebe, dann klappts!

    ich weiß dass "===" der Identitätsoperator ist(hoff ich mal+gg+) und da muss alleszusammen identisch sein! aber normal ist ja Zahl immer eine Zahl oder?=)

    Bitte um kurze Erläuterung=)wäre toll danke=)

  2. #2
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    = ist eine Zuweisung eines Wertes.
    Also bewirkt $a=4, dass $a den Wert 4 erhält.

    == ist ein Vergleich mit Typumwandlung
    Bei if ($a==$b) wird der Wert von $a mit $b verglichen und notfalls der Typ angepasst, damit überhaupt verglichen werden kann.

    === ist ein Vergleich ohne Typumwandlung
    Da man Äpfel mit Birnen nicht vergleichen kann, ergibt der Vergleich bereits das Ergebnis falsch wenn sich die Typen der Variablen unterscheiden - auch wenn letztlich der Wert (rein theoretisch) gleich zu sein scheint.

    siehe Beispielscript:
    Code:
    <?php
    $a=0;
    $b="000.00";
    
    if ($a==$b) echo "Die sind gleich!<br>";
    else echo "N&#246;, unterschiedlich";
    
    $a=0;
    $b="0";
    
    if ($a===$b) echo "Die sind gleich!";
    else echo "N&#246;, unterschiedlich";
    
    ?>
    Im ersten Beispiel erwartet man eigentlich, dass das Ergebnis "unterschiedlich" ergibt. Tut es aber nicht, da $b in den Typ von $a umgewandelt wird.
    Intern wird also verglichen if ($a==intval("000.00") ) . Und da intval("000.00") = 0 ist, ergibt der Vergleich "wahr".

    Im zweiten Beispiel erwartet man es genau andersherum.
    Beide Variablen haben anscheinend dern Wert 0.
    Nur ist $a ein Integerwert und $b ist eine Zeichenkette.
    Apfel und Birne sind unterschiedlich und deshalb das Ergebnis "falsch".

    War das verst&#228;ndlich?
    Geändert von DSB (07.10.2005 um 19:24 Uhr)
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  3. #3
    TP-Supporter timedance123 macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    481
    ja=)das war sogar sehr gut erkl&#228;rt=)

    h&#228;ttest du nicht bei mir mathe unterrichtn k&#246;nnen?

  4. #4
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Zitat Zitat von timedance123
    hättest du nicht bei mir mathe unterrichtn können?
    Das können wir ja nachholen.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  5. #5
    TP-Supporter timedance123 macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    481
    wann und wo?*gg*

  6. #6
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Zitat Zitat von timedance123
    wann und wo?*gg*
    Beim nächsten TP-Treffen?
    Während sich alle anderen eimerweise Bier hinter die Binde kippen büffeln wir Kurvendiskussionen und Statistiken.

    Obwohl, nee, lass mal.
    Ich geh lieber in die Ecke zu den Leuten mit den Eimern. *lol*
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  7. #7
    TP-Supporter timedance123 macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    481
    oooooch=)

    he nix gegen kurvendiskussionen und statistiken=)das kann ich heute noch+gg+ und im eimertrinkn gib ich dann dir unterrichtsstunden

    du mal andere frage nachdem du das obrige sogut erkl&#228;rt hast

    stichwort mysql-injection-->wie verhindert man das am besten/einfachsten?

    f&#252;r db-abfragen hab ich eine einfache funktion geschrieben, jetzt w&#228;rs fein, wenn ich diese erweitern k&#246;nnte!gibs da irgendetwas?=)

  8. #8
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Zitat Zitat von timedance123
    stichwort mysql-injection-->wie verhindert man das am besten/einfachsten?
    Die einfachste und meiner Meinung nach auch sicherste und zugleich schnellste Methode ist es, alle &#252;bergebenen Variablen durch mysql_real_escape_string zu jagen. So werden alle Sonderzeichen entsprechend der MySQL-Version maskiert.
    Das Thema wird im Netz ziemlich hochgekocht und sicherlich gibt es Scripte, die anf&#228;llig f&#252;r die Injections sind, aber diese einfache Funktion verhindert bereits alles.
    PHP schickt in den neueren Versionen sowieso nur einen Befehl an MySQL und nicht mehr mehrere. Eine Injection nach dem Prinzip :
    INSERT INTO bla WHERE bla="blub"; DELETE FROM ...... oder &#228;hnliche Folgebefehle ist sowieso nicht mehr m&#246;glich.
    Mit
    Code:
    $sql='INSERT INTO `tabelle` VALUES(\''.mysql_real_escape_string($_POST['eingabewert1'].'\',\''.$_POST['eingabewert2'].'\')...
    bist Du auf der sicheren Seite.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  9. #9
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Zitat Zitat von timedance123
    ich frage deswegen, weil ich eine Datenbankabfrage starte und wenn sie gegl&#252;ckt ist gibt sie den wert 1 (=true) zur&#252;ck

    wenn ich dass jetzt in eine IF-abfrage hau also -->query===1 dann geht das nicht weil die bedingung false ist!wenn ich allerdings query==1 eingebe, dann klappts!
    Der Vollst&#228;ndigkeit halber: das Ergebnis der Abfrage ist nicht 1 sondern enth&#228;lt eine Verbindungskennung oder eine Ergebnismenge. Wenn die Abfrage nicht geklappt hat ist das Ergebnis false.
    Um das Ergebnis korrekt zu behandeln m&#252;sstest Du so auf Erfolg abfragen:
    Code:
    $ergebnis=mysql_query($anweisung,$db_verbindung)
    if (!$ergebnis===false)
    { //hat geklappt
       ... weitere Anweisungen
    }
    else echo "<br>Es ein Fehler aufgetreten. Der MySQL-Server meldet: ".mysql_error();
    Gew&#246;hn Dir das mit mysql_error() ruhig an. Das erspart Dir jede Menge Zeit bei der Fehlersuche. Meistens hat man n&#228;mlich einen Syntaxfehler in der SQL-Anweisung oder hat einen Feldnamen anders geschrieben als er in der Tabelle tats&#228;chlich hei&#223;t. So meldet einem MySQL den Fehler und man sieht sofort woran es liegt.
    Geändert von DSB (08.10.2005 um 07:53 Uhr)
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  10. #10
    TP-Supporter timedance123 macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    481
    ok danke=) dass mit mysql_error und mysql_errno hab ich eingebaut+gg+

    nur ist die einzige m&#246;glichkeit, mysql injection zu verhindern, dass ich bei meinen Skripten jede Datenbankabfrage mit mysql_real_escape_string erweitern muss?

    oder gibt es eine M&#246;glichkeit, dass ich dass bei einer Funktion einbauen kann?das w&#228;r n&#228;mlich das einfachste+gg+

  11. #11
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Die Auslagerung ist schwierig, da Du das nicht auf die gesamte Query anwenden kannst sondern nur auf einzelne Strings.

    Mir pers&#246;nlich reicht die Behandlung der Strings mit addslashes, die neueren PHP-Versionen haben diesbez&#252;glich eh schon die Sicherheitsl&#252;cken gef&#252;llt, so das die M&#246;glichkeit der Injection kaum mehr gegeben ist.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  12. #12
    TP-Supporter timedance123 macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    481
    hmmm schade w&#228;re toll gewesen wenn das per funktion gehen w&#252;rde=)

    ab wann ist eigentlich diese sicherheitsl&#252;cke geschlossen worden?(welche php-version) =)

  13. #13
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Zitat Zitat von timedance123
    hmmm schade wäre toll gewesen wenn das per funktion gehen würde=)
    Und schon hast Du Dir selbst einen Grund gegeben alle Datenbankabfragen in einer eigenen Funktionssammlung oder Klasse zu bündeln.
    Ich bewerkstellige alle Datenbankabfragen über eine zentrale, kleine Funktionssammlung und muss Anpassungen (wie z.B. diese) nur innerhalb dieser Funktion einbauen. Auch die Queries werden innerhalb der Funktion aufgebaut - so braucht man nur dort einzugreifen und zu ändern.
    Auch eine spätere Erweiterung auf z.B. andere Datenbanksysteme ist so kein großer Aufwand mehr.

    Wenn man jedoch innerhalb seines Scripts immer wieder Queries direkt per mysql-Befehle übergibt, muss man an all den Stellen händisch eingreifen und welche Arbeit das bedeutet, weißt Du ja jetzt.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  14. #14
    TP-Supporter timedance123 macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    481
    ich hab auch eine klasse erstellt für das ganze datenbankzeugs nur meine funktion für die datenbankabfrage ist 2 zeilen lang+gg+und ich weiß jetzt nicht wie ich das bewerkstelligen soll, dass dies in einer funktion ist nachdem ich ja das direkt auf die eingaben $_POST, $_GET oder was sonst noch zielen muss=)


    hmmm kannst mir vl. ein bisschen einen Lösungsansatz verraten?=)wäre toll danke=)

  15. #15
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Mein Lösungsansatz sieht so aus, dass ich ein zunächst leeres Objekt erzeuge.
    Diesem Objekt gebe ich dann die benötigen Eigenschaften/Werte.
    Die Funktion save_object nimmt das Objekt entgegen und wertet die Objekteigenschaften/Werte aus. Die Variablenbezeichnung entspricht dabei dem Namen der Spalte in der MySQL-Datenbank.
    Den Query erzeuge ich so automatisch (Tippfehler mit vergessenen Hochkommas oder Backticks passieren mir so nicht mehr *g*) . Datenbank, Tabellenname und der Primärschlüssel werden der Funktion übergeben und schon hast Du alle Informationen die benötigt werden. Über den Primärschlüssel kannst Du auch entscheiden, ob es sich um einen Insert- oder Update-Befehl handeln muss.
    Vor dem Funktionsaufruf muss man nur das Objekt entsprechend vorbereiten.
    Um ein Objekt in der DB zu speichern benötige ich dann nur einen Aufruf:
    $saved=save_object($obj,'Datenbank','Tabelle','Primärschlüssel');

    Handelt es sich um einen Neueintrag wird die ID des Eintrags zurückgegeben, ansonsten true oder false.

    Statt mit einem Objekt kann man das genauso mit einem Array machen.
    Ich habs über eine Funktion gemacht, das in einer Klasse zu kapseln macht aber auch Sinn.

    Dies ist mein Lösungsansatz - natürlich führen aber viele Wege nach Rom.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51