dynamische abfrage?

meiner Meinung nach bringt Holyflys Script viel zu viele Probleme mit sich, da man damit die Erweiterbarkeit auf den Müll schiebt. Dieses Script nimmt alle Werte die als Post Werte übergeben werden und hängt sie an die SQL Abfrage an.

Wenn du jetzt neue Tabellen mit neuen Informationen hast, die mit der alten verknüpft sind und du dieses dann ins Formular mit einbringst, wirst du keine ordentlichen Resultate mehr bekommen, da diese Informationen in einer Tabelle gesucht werden, wo sie gar nicht stehen können.

An deiner Stelle würde ich die Mehrarbeit in Kauf nehmen, zumal die Variablen generell überprüft werden sollten. Bei der Überprüfung kann man dann die Variable als AND Zweig an das SQL Statement anhängen oder halt nicht.

Am einfachsten geht das ganze, wenn du eine SQL Anweisung hast, in der immer ein WHERE Statement vorkommt, da du dir dann die Unterscheidung sparen kannst, ob ein WHERE Statement notwendig ist oder nicht. Füge einfach bei deinen Artikeln die Option status ein, mit der du einzelne Artikel auch mal offline setzen kannst.

Die SQL Anweisung sieht dann so aus:
$sql = "SELECT * FROM tablename WHERE status != '0' ";
wobei 0 hier für offline steht.

Dann kannst du die anderen Variablen einfach anhängen, wenn die Überprüfung erfolgreich verlaufen ist.
$sql .= " AND col = '$colWert'";

Diese Art von Scripten sind gut zu erweitern. Die Arbeit hält sich meiner Meinung nach auch in Grenzen, und da du sowieso alle Nutzereingaben überprüfen solltest ist die Arbeit dringend anzuraten.

Ciao, F.o.G.
 
Original geschrieben von F.o.G.
meiner Meinung nach bringt Holyflys Script viel zu viele Probleme mit sich, da man damit die Erweiterbarkeit auf den Müll schiebt. Dieses Script nimmt alle Werte die als Post Werte übergeben werden und hängt sie an die SQL Abfrage an.

Die erweitbarkeit ist gerade gegeben.
das POST Array ist ein normales array wie jedes andere auch. Weshalb es dem coder frei steht wieviele elemente das array beinhaltet usw
Dein Einwand kann ich 0 nachvollziehen

Das er eine extra column ansetzen soll um ein problemchen zu umgehen ist absolut falsch
 
ich laub du verstehst nicht was ich meine. Wenn man nun noch andere Dinge abfragt, die nicht in dieser, sondern in einer Nebentabelle gespeichert sind, dann hast du ein Problem. Denn bei einem JOIN muss zumindest immer der Name der anderen Tabelle angegeben werden.

Eine andere Frage: was passiert, wenn jemand einem POST mehr Einträge hinzufügt, als man im Script an Spalten definiert hat? dann steht im SQL Query so was wie AND = 'Werte vom Angreifer'. Das würde zu einem Fehler führen. Lass das mal automatisiert tausendfach von einem Hacker ausführen. Der MySQL Server wird unweigerlich zusammenbrechen.

Meiner Meinung nach sollten alle Benutzereingaben 3 oder sogar 4 mal überprüft werden. Und wenn man so was sowieso schon überprüft, kann mans gleich ordentlich machen.

OK, deswegen eine Extra Spalte ist sicher unsinnig, aber zeige mir einen sicheren Weg, das gewünschte zu erreichen. Mal abgesehen davon: Er wollte auch ein Script, wo alle Artikel angezeigt werden, wenn keine Angaben gemacht wurden. Wenn also nichts in POST drin steht, wird bei deinem Script KEIN Query erzeugt.

Naja, ich sollte mich da nicht so reinsteigern, ich weiß nur aus eigener Erfahrung, dass es sehr gefährlich sein kann, zu achtlos mit Code umzugehen. Ich hatte mal eine Attacke auf meinen Server, der war dann down. Als ich mich (ich fühlte mich ja im Recht) beschwerte, hatte mein Hoster das Problemscript schon analysiert und mich in die Schranken verwiesen. Das ist nun 2 Jahre her, und seit dem achte ich auf Sicherheit.

Ciao, F.o.G.
 
F.o.G. hat gesagt.:
Eine andere Frage: was passiert, wenn jemand einem POST mehr Einträge hinzufügt, als man im Script an Spalten definiert hat? dann steht im SQL Query so was wie AND = 'Werte vom Angreifer'. Das würde zu einem Fehler führen. Lass das mal automatisiert tausendfach von einem Hacker ausführen. Der MySQL Server wird unweigerlich zusammenbrechen.

Ich sagte dir schon bereits das es um ein array geht. Du kannst dir gern mal die möglichkeiten anschauen die du hast wenn du ein array prüft. Nichts ist einfacher als ein Array zu durchlaufen und nach regeln zu sondieren.
Die schöne Sache ist du kannst dein Array auch dynamisch erweitern. Anstatt den Code umzuschreiben und seine querys anzupassen setzt er einfach sein Formularitem hinzu.
Alles andere ist absolut unsystematisch.

Meiner Meinung nach sollten alle Benutzereingaben 3 oder sogar 4 mal überprüft werden. Und wenn man so was sowieso schon überprüft, kann mans gleich ordentlich machen.

Nicht 3-4 mal, einmal richtig. Für solche Sachen gibts reguläre ausdrücke.
Dein Chef wirds dir danken wenn du mal wieder doppelt soviel zeit brauchst für das Script.

OK, deswegen eine Extra Spalte ist sicher unsinnig, aber zeige mir einen sicheren Weg, das gewünschte zu erreichen.

Habe ich schon gesagt anhand eines Pattern regulären ausdrück prüfen.

Mal abgesehen davon: Er wollte auch ein Script, wo alle Artikel angezeigt werden, wenn keine Angaben gemacht wurden. Wenn also nichts in POST drin steht, wird bei deinem Script KEIN Query erzeugt.
Ich gebe tips und nicht komplette Scripte. Wenn ich was sage dann den Schwierigen teil.
Ich denke ich kann von jemanden der Solch ein Ding basteln will erwarten das er sowas von alleine einbauen kann.
Und das denk ich kann mann Brauni schon zugestehen.

Naja, ich sollte mich da nicht so reinsteigern, ich weiß nur aus eigener Erfahrung, dass es sehr gefährlich sein kann, zu achtlos mit Code umzugehen. Ich hatte mal eine Attacke auf meinen Server, der war dann down. Als ich mich (ich fühlte mich ja im Recht) beschwerte, hatte mein Hoster das Problemscript schon analysiert und mich in die Schranken verwiesen. Das ist nun 2 Jahre her, und seit dem achte ich auf Sicherheit.

Dieses Problem hatte ich bisher noch nicht. Vielleicht liegt das daran das mein Vorgänger Admin hier in der Firma schon alles sauber konfiguriert hat, der Schlingel :-)

uch ich kann bei meinem Job als Programmierer eines Marktforschungsinstitut sehr wohl was mit Sicherheitsaspekte
von Scripten anfagen
Jedoch sollte mann auch überlegen wie mann Sicherheit gewährleistet.
Denn grade in diesem Aspekt zählt nicht Masse statt klasse.
 
bezüglich des Array's reden wir aneinander vorbei...ich weiß genau was man mit Array's machen kann, aber auch was nicht. Du hast in deinem Script die Felder definiert, die abgefragt werden sollen, und zwar in einem eigenen Array. Danach baut dein Script das Query auf und zwar anhand der Anzahl der Einträge des POST Array's.

Wenn dein POST Array mehr Einträge hat als dein Felder Array, dann führt das Query zu einem Fehler, aus oben genannten Gründen.

Zur Erweiterung:
wenn man in dem selben Formular auch Daten abfragst, die in anderen Tabellen gespeichert sind, wird man das mit deiner Methode nicht mehr realisieren können, da diese Werte automatisch an Tabelle A geschickt werden, obwohl sie zu Tabelle B sollen. Das gleiche gilt, wenn man 2 Tabellen mit einem JOIN verknüpft. Syntaxgemäß sollte man die Tabellen mit einem Identifikator per AS ausstatten, (SELECT * FROM table1 AS tbl1, table2 AS tbl2 ... ). Wie soll man nun die Tabellen unterscheiden? Im POST Array kann das nicht stehen.

Zur Prüfung:
das war nicht wortwörtlich zu nehmen, mit dem 4 mal prüfen. Ich wollte damit ausdrücken, dass Usereingaben sehr sorgfältig geprüft werden sollen, und natürlich ja, mit regulären Ausdrücken. Wenn du mich nicht verstehst tut es mir leid.
Und wenn man sowieso schon prüft, dann kann man das Query gleich richtig aufbauen. So.....

bezüglich komplettes Script:
bei dir muss man mit der Formulierung wirklich aufpassen. Ich hatte gemeint, er wollte einen Tipp, wie man das bewerkstelligt, dass bei keiner Einschränkung alle Artikel angezeigt werden. Dein Tipp (besser?) gewährleistet das nicht. Hab ich mich jetzt eineindeutig ausgedrückt?

Ciao, F.o.G.
 
Zuletzt bearbeitet:
F.o.G. hat gesagt.:
bezüglich des Array's reden wir aneinander vorbei...ich weiß genau was man mit Array's machen kann, aber auch was nicht. Du hast in deinem Script die Felder definiert, die abgefragt werden sollen, und zwar in einem eigenen Array. Danach baut dein Script das Query auf und zwar anhand der Anzahl der Einträge des POST Array's.
Wenn du die user zu doof dafür hälst vor dem foreach eine komplettabfrage durchzuführen dann ist das schön für dich. Aber ich traue leuten mehr zu.
Les doch mal endlich. Ich habe genau das schon gepostet, wie schwer ists denn sowas einzuabauen?
Na?
so schwer wie
$sql = "select * from tabelle";
einzufügen.

Wenn dein POST Array mehr Einträge hat als dein Felder Array, dann führt das Query zu einem Fehler, aus oben genannten Gründen.
Habe ich dir auch schon beantwortet
Und ich kau das jetzt nicht nochmal durch, wenn du dumm sterben willst weil du etwas nicht mit offenen Verstand liest bist du selber schuld.
Zur Erweiterung:
wenn man in dem selben Formular auch Daten abfragst, die in anderen Tabellen gespeichert sind, wird man das mit deiner Methode nicht mehr realisieren können, da diese Werte automatisch an Tabelle A geschickt werden, obwohl sie zu Tabelle B sollen. Das gleiche gilt, wenn man 2 Tabellen mit einem JOIN verknüpft. Syntaxgemäß sollte man die Tabellen mit einem Identifikator per AS ausstatten, (SELECT * FROM table1 AS tbl1, table2 AS tbl2 ... ). Wie soll man nun die Tabellen unterscheiden? Im POST Array kann das nicht stehen.
Was laberst du denn da? So ein bloedsinn. Mann sollte nicht Syntaxmässig einen identifikator bla blub

Zur Prüfung:
das war nicht wortwörtlich zu nehmen, mit dem 4 mal prüfen. Ich wollte damit ausdrücken, dass Usereingaben sehr sorgfältig geprüft werden sollen, und natürlich ja, mit regulären Ausdrücken. Wenn du mich nicht verstehst tut es mir leid.
Und wenn man sowieso schon prüft, dann kann man das Query gleich richtig aufbauen. So.....
In dem man eine extra spalte in die Datenbank einfügt die eigentlich nichts zu tun hat ausser ...öhm... ja ..
naja eigentlich nichts.
Mit dem vorschlag immer als AS zu selektieren wird dies zur phrase.
Du hast noch nie mit Datenbanken mit hunderttausdende von einträgen zu tun sonst würdest du nicht so performance hinderende Methoden vorschlagen.
Die noch komplett falsch sind.
Hauptsache was gesagt?

bezüglich komplettes Script:
bei dir muss man mit der Formulierung wirklich aufpassen. Ich hatte gemeint, er wollte einen Tipp, wie man das bewerkstelligt, dass bei keiner Einschränkung alle Artikel angezeigt werden. Dein Tipp (besser?) gewährleistet das nicht. Hab ich mich jetzt eineindeutig ausgedrückt?
Ciao, F.o.G.

foreach(@$_POST
leistet das.
Denn nur für gepostete Variablen wird das query verändert.

Damit du auch was dabei lernst
$sql = "select * from table";
foreach(@$_POST ....

So und damit ist schluss hier.

Ein Tip F.o.G bevor mann etwas kritisiert sollte mann wissen wovon mann spricht.
 
ich gebs sowieso auf :)

Manche Leute sind einfach nicht zu überzeugen. Glaub mir, ich weiß wovon ich hier rede, aber ich kann dir das in einfachen Worten nicht begreiflich machen. Und daher kapituliere ich hier vor dir. Du hast Recht und ich meine Ruhe.

Ausserdem bist du Admin...

In Zukunft bitte ich dich um eins: lies bitte meine Aussagen ganz genau, versuche bitte zumindest ansatzweise meine Argumente zu verstehen, da auch in meinen unqualifizierten und deinen sicherlich hoffnungslos unterlegenen Antworten auch irgendein Gedanke steckt, der nicht grundsätzlich falsch ist.
Meine Frage bezüglich zusätzlicher Infos in einem POST Array hast du mir in diesem Thread nicht beantwortet, sorry.

Ciao, F.o.G.
 
Zurück