will nicht so wie ich es mir denke

Status
Für weitere Antworten geschlossen.

Ryckmaster

Well-known member
PHP:
function administrator_loeschen($p_Administrator, $p_nl)
{
$query="delete from administrator where Administrator='$_GET[nl]'";
$ergebnis=mysql_query($query);
if(!$ergebnis)
{
echo "Der Administrator ist nicht vorhanden.";
}
else
echo "Der Administrator wurde gelöscht!"; 
}

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
 
deswegen: if(!$ergebnis)

schau dir mal die Funktionen mysql_affected_rows() oder mysql_num_rows() an
 
hä? ich habe eine andere function da geht es ja genau so!
außerdem will ich ja nicht herausfinden wieviele daten gelöscht wurden.
ich will nur wissen ob der administrator da ist, das ist alles.
 
ich würd mal sagen das liegt am query
PHP:
<?
...
$query="delete from administrator where Administrator='$_GET[nl]'";
$ergebnis=mysql_query($query);
...
?>
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
 
okay vllt. hast du recht, aber wie kann ich denn heraus bekommen ob das ergebnis zu keiner wert kam.
also ob keine übereinstimungen gefunden worden sind??
 
Hallo,
ich führ immer erst ein SELECT FROM Query aus.
In deinem Fall:
PHP:
$query = mysql_query("SELECT `id` FROM `administrator` WHERE `Administrator` = '".mysql_real_escape_string($_GET[nl])."' LIMIT 0 , 1");
if(@mysql_num_rows($query) == 0)
{
echo "Der Administrator ist nicht vorhanden.";
}
else
{
 $delete = mysql_query("DELETE FROM `administrator` WHERE `Administrator` = '".mysql_real_escape_string($_GET[nl])."' LIMIT 0 , 1");
 if (!$delete)
 {
 echo "Es ist ein DB Fehler aufgetreten: ".mysql_error();
 }
 else
 {
 echo "Der Administrator wurde gelöscht!"; 
 }
}

$_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
 
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
 
@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: http://informations-quelle.de/programmieren-lernen.html
---------------------------------
@Threadstarter: Nächstes mal bitte einen passenden Titel wählen.
=> Closed

Gruß
Broken Sword
 
Status
Für weitere Antworten geschlossen.

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten