will nicht so wie ich es mir denke

  • geschlossen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • will nicht so wie ich es mir denke

    PHP-Quellcode

    1. function administrator_loeschen($p_Administrator, $p_nl)
    2. {
    3. $query="delete from administrator where Administrator='$_GET[nl]'";
    4. $ergebnis=mysql_query($query);
    5. if(!$ergebnis)
    6. {
    7. echo "Der Administrator ist nicht vorhanden.";
    8. }
    9. else
    10. echo "Der Administrator wurde gelöscht!";
    11. }
    Alles anzeigen


    egal ob der administrator in den db ist oder nicht, es heißt immer das er gelöscht wurde.
    wenn der admin drin steht wird er aber auch gelöscht.
    warum gibt er nie an der administrator nicht in der db steht??

    lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ryckmaster ()

  • ich würd mal sagen das liegt am query

    PHP-Quellcode

    1. <?
    2. ...
    3. $query="delete from administrator where Administrator='$_GET[nl]'";
    4. $ergebnis=mysql_query($query);
    5. ...
    6. ?>

    ich mein sql untescheidet nicht zwischen groß und kleinsschreibung. somit wählst du aus eine tabelle dessen feld einer tabelle entspricht ==> $ergebnis = false.

    EDIT:
    wenn du wissen willst, ob der adminitrator, da ist oder nicht solltest du eher die SELECT methode benutzen
  • Hallo,
    ich führ immer erst ein SELECT FROM Query aus.
    In deinem Fall:

    PHP-Quellcode

    1. $query = mysql_query("SELECT `id` FROM `administrator` WHERE `Administrator` = '".mysql_real_escape_string($_GET[nl])."' LIMIT 0 , 1");
    2. if(@mysql_num_rows($query) == 0)
    3. {
    4. echo "Der Administrator ist nicht vorhanden.";
    5. }
    6. else
    7. {
    8. $delete = mysql_query("DELETE FROM `administrator` WHERE `Administrator` = '".mysql_real_escape_string($_GET[nl])."' LIMIT 0 , 1");
    9. if (!$delete)
    10. {
    11. echo "Es ist ein DB Fehler aufgetreten: ".mysql_error();
    12. }
    13. else
    14. {
    15. echo "Der Administrator wurde gelöscht!";
    16. }
    17. }
    Alles anzeigen


    $_GET oder $_POST solltest du immer escapen bevor du sie mit MySQL in Berührung bringst! -> SQL Injections.


    @thomo:

    thomo schrieb:

    1) `count` - kein normaler Mensch legt ein Feld count an und wenn doch, kann man auch nur die einzelnen, reservierten Befehle (count, group etc) in Backticks setzen....
    Bin ich kein normaler Mensch, wenn ich in einer Tabelle für einen Besucherzähler (counter) eine Spalte `count` nenne? Ich, die meisten anderen Leute wahrscheinlich auch, verwenden eh viel lieber englische Begriffe.
    Und wie sähe das denn aus, wenn ich ein paar Spalten selecte und nur nur count in `` setze?

    thomo schrieb:

    2) der Limit-Befehl ruft nicht 1 Ergebnis ab, sondern gibt nur ein Ergebnis aus (zumal es zum einen unlogisch ist 100.000 Admins mit dem Namen Peter zu haben und zum anderen wurde schon geklärt, dass der Name UNIQUE ist, also nur einmal vorkommt), bei 100.000 Administratoren "Peter" musst du sowieso eine WHERE-Klausel definieren, die nicht nach dem Namen arbeitet, sonst provozierst du ohnehin Kollisionen
    Das mag zwar sein, dass es nur einen Administrator Peter gibt, aber wenn die Tabelle 100.000 rows hat, durchsucht MySQL alles nach Peter, das kann bei 100.000 schon etwas "dauern". Wenn Peter schon in row 5 gefunden wird, warum dann die restlichen 99.995 rows durchsuchen?

    thomo schrieb:

    3) die Fehlermeldungen die durch obiges Script hervorgerufen werden, sind in jedem Fall potentielle Lücken, wenn du dich irgendwann mal mit SQL-Injections näher beschäftigst, wirst du das merken.
    Das mag schon sein, aber wie BrokenSword schon geschrieben hat sind Fehlermeldungen sehr sinnvoll, gerade wenn du noch in der Entwicklung des Scripts bist.

    thomo schrieb:

    Die Leute die hier ihre Fragen stellen, sind keine Profis und ich biete meine Hilfe gern an, aber wenn man schon keine Ahnung hat, sollte man es wenigstens von Anfang an so erklärt bekommen, sonst hast du hier unzählige Threads ala "meine Seite wurde gehackt...."
    Genau, aber das Argument spricht gegen deinen Beitrag.

    mfg
    snip3r
    Neulinge * Forenregeln * F.A.Q. * Lexikon
    Suchfunktion* IRC * Teamspeak * User helfen User
    Patrioten reden nur davon, dass sie für ihr Land sterben, niemals davon, dass sie für ihr Land töten. (Bertrand Russell)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Broken Sword ()

  • Bitte NIEMALS eine Fehlerausgabe verursachen (bsp. wie in dem Post von Sniper - .mysql_error() )

    Einem Angreifer bietet sowas immer ne potentielle Lücke, gibts du diese Fehler nicht aus, bleibt dem Angreifer nur ne Blind-Injection, die um einiges schwieriger ist als mit nem MySQL-Error....


    Das nur vorweg...xD

    Das Prinzip von Sniper sollte dir reichen, aber bitte OHNE Augabe von Fehlern und ohne das hier (da einfach überflüssig):

    SO NICHT!
    ------------
    ("SELECT `id` FROM `administrator` WHERE `Administrator` = '".mysql_real_escape_string($_GET[nl])."' LIMIT 0 , 1");
    if(@mysql_num_rows($query) == 0)


    Sondern so:
    -------------

    ("SELECT * FROM administrator WHERE Administrator = '".mysql_real_escape_string($_GET[nl])."'");
    if(@mysql_num_rows($query) == 0)


    Gruß thomo
  • @thomo: Ich meine du übertraibst ordentlich. Wenn man beim Erstellen ist, vor allem, wenn man Hilfe in einem Forum sucht, ist das unabdingbar. Ich habe keine Lust endlose Threads zu haben, nur weil alle deinen Rat befolgen.
    Außerdem, wenn man Injections abschirmt (Die Daten, die der Benutzer beeinflussen kann, dementsprechend filtern), sind SQL-Fehler Ausgaben keines Wegs potentielle Sicherheitslücken.

    Auch sind ` nicht überflüssig, oder wie willst du sonst zum Beispiel eine Zelle namens 'count' ansprechen? Das ist halt der Standard in SQL und sollte von klein auf auch benutzt werden, damit man hier nicht Threads ala "Warum funktionier SELECT count FROM... nicht?" öffnen muss.

    Nun zum LIMIT. Das ist auch nicht überflüssig, sondern hat auch eine Bedeutung, die du vielleicht vorher erklären solltest, bevor du das als überflüssig erklärst. Es sind nicht beides identische Befehle. Der Befehl mit LIMIT ruft immer nur ein Ergebnis ab. Sprich, wenn es 100000e Administratoren mit dem Namen Peter geben würde, bräuchte deine Version 99999 mal länger, als Snip3s. Das Limit am Ende hat also durchaus seinen Nutzen.

    Das nur mal so :D

    Gruß
    Broken Sword
  • @BrokenSword

    In diesem, wie auch in einigen anderen Threads zum Thema PHP, liest man ganz deutlich raus, dass du keine Ahnung hast.

    1) `count` - kein normaler Mensch legt ein Feld count an und wenn doch, kann man auch nur die einzelnen, reservierten Befehle (count, group etc) in Backticks setzen....
    2) der Limit-Befehl ruft nicht 1 Ergebnis ab, sondern gibt nur ein Ergebnis aus (zumal es zum einen unlogisch ist 100.000 Admins mit dem Namen Peter zu haben und zum anderen wurde schon geklärt, dass der Name UNIQUE ist, also nur einmal vorkommt), bei 100.000 Administratoren "Peter" musst du sowieso eine WHERE-Klausel definieren, die nicht nach dem Namen arbeitet, sonst provozierst du ohnehin Kollisionen
    3) die Fehlermeldungen die durch obiges Script hervorgerufen werden, sind in jedem Fall potentielle Lücken, wenn du dich irgendwann mal mit SQL-Injections näher beschäftigst, wirst du das merken.

    Die Leute die hier ihre Fragen stellen, sind keine Profis und ich biete meine Hilfe gern an, aber wenn man schon keine Ahnung hat, sollte man es wenigstens von Anfang an so erklärt bekommen, sonst hast du hier unzählige Threads ala "meine Seite wurde gehackt...."

    thomo

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von thomo ()

  • @thomo:
    Ach, jetzt weiß ich auch endlich, warum ich nie Aufträge bekomme, danke für die Erleuchtung :D

    Nein, Spaß bei Seite. Du scheinst etwas stur und uneinsichtig (sonst würdest du nicht mit Argumenten, ala "Ist doch unlogisch" oder "du hast ja keine Ahnung" kommen) - darum einfach nur ein paar Links, die dir hoffentlich die Erleuchtung bringen, dass du nicht alles weißt und kannst.

    MySQL :: MySQL 5.1 Reference Manual :: 8.2 Schema Object Names
    MySQL :: MySQL 5.1 Reference Manual :: 7.2.16 LIMIT Optimization
    //Da das Web noch niemanden wie mit deiner Einstellung zu SQL-Fehlern kennt, gibt's auch kein Link :D
    Aber hier gibt es noch ein paar Grundsätze: informations-quelle.de/programmieren-lernen.html
    ---------------------------------
    @Threadstarter: Nächstes mal bitte einen passenden Titel wählen.
    => Closed

    Gruß
    Broken Sword

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword ()